🏠 Домашнее задание

⚡ Суть задания

Домашнее задание закрепляет работу с индексами, срезами, функциями ord()/chr(), строковыми методами и циклами. Нужно написать четыре программы: проверку кодировки символа, извлечение подстроки с заполнением, подсчёт символа и инвертирование строки без цифр.

Результат: четыре рабочих файла .py, которые корректно обрабатывают пользовательский ввод и проходят проверку в VS Code.

📋 Формулировка задания

Исходное задание из LMS:

  1. Проверка кодировки. Напишите программу, которая принимает от пользователя один символ и выводит его код в таблице Unicode и его принадлежность к диапазону ASCII (True/False).
    Введите символ: A
    Код Unicode: 65
    ASCII символ: True
  2. Подстрока с заполнением. Напишите программу, которая принимает строку и индексы начала и конца. Программа должна вывести подстроку на указанных позициях. Также если конечный индекс выходит за пределы строки, программа заполняет недостающие символы символами _.
    Введите строку: Программирование
    Введите начальный индекс: 3
    Введите конечный индекс: 20
    Подстрока: граммирование_____
    💡 На заметку: количество символов _ зависит от фактической длины строки. В Python строка "Программирование" содержит 16 символов, поэтому при end=20 добавится 4 символа _.
  3. Подсчёт символа. Напишите программу, которая принимает строку и символ, а затем подсчитывает, сколько раз символ встречается в строке.
    Введите строку: Hello, world!
    Введите символ: o
    Символ o встречается 2 раз(а).
  4. Инвертирование строки без цифр. Напишите программу, которая принимает строку и выводит её в обратном порядке, пропуская все цифры.
    Введите строку: n52uFs6Inoh67ty8P
    Результат: PythonIsFun

🔧 Шаг 0. Подготовка окружения

Перед началом работы над любым заданием курса нужно настроить окружение. Эти шаги одинаковы для всех уроков.

📁 Структура репозитория: мы используем один репозиторий для всех практических работ курса. Это удобнее, чем 46 отдельных репозиториев: общий .gitignore, единая история, легко переключаться между уроками.
1

Создайте (или откройте) рабочую папку

В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.

# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
2

Инициализируйте Git-репозиторий (один раз)

Если папка ещё не является git-репозиторием:

git init

# Создайте базовые файлы
echo "# Python Fundamentals — Практические работы" > README.md
echo "venv/" > .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
echo ".env" >> .gitignore

git add README.md .gitignore
git commit -m "init: базовая структура репозитория"
3

Создайте папку для текущего урока

# Структура: lesson-XX/
mkdir -p lesson-14
cd lesson-14
4

Создайте виртуальное окружение (venv)

# Windows (PowerShell / CMD)
python -m venv venv
venv\Scripts\activate

# Mac / Linux
python3 -m venv venv
source venv/bin/activate

После активации в начале строки терминала появится (venv). Все дальнейшие команды выполняйте внутри venv.

5

Создайте ветку для задания

# Вернитесь в корень репозитория
cd ..

# Создайте и переключитесь на ветку
git checkout -b lesson/14-python-strings-intro

# Отправьте ветку на удалённый репозиторий (если настроен)
git push -u origin lesson/14-python-strings-intro

Именование веток: lesson/XX-краткое-название. Это позволяет легко находить нужный урок.

🛠️ Шаги выполнения задания

Теперь, когда окружение готово, приступайте к решению.

1

Задание 1: проверка кодировки

Создайте файл check_encoding.py. Прочитайте один символ, получите его код через ord() и проверьте, попадает ли код в диапазон 0–127.

letter = input("Введите символ: ")
unicode_code = ord(letter)
is_ascii = 0 <= unicode_code <= 127

print("Код Unicode:", unicode_code)
print("ASCII символ:", is_ascii)

Проверка в VS Code:

  1. Запустите: python check_encoding.py.
  2. Введите A → ожидается Код Unicode: 65 и ASCII символ: True.
  3. Введите Я → ожидается код больше 127 и ASCII символ: False.
2

Задание 2: подстрока с заполнением

Создайте файл substring_with_padding.py. Получите строку и два индекса, извлеките срез и, если конечный индекс больше длины, добавьте недостающие символы _.

text = input("Введите строку: ")
start_index = int(input("Введите начальный индекс: "))
end_index = int(input("Введите конечный индекс: "))

substring = text[start_index:end_index]

if end_index > len(text):
    substring += "_" * (end_index - len(text))

print("Подстрока:", substring)

Проверка в VS Code:

  1. Запустите: python substring_with_padding.py.
  2. Введите Программирование, начальный 3, конечный 20 → ожидается граммирование_____.
  3. Введите Python, начальный 0, конечный 6 → ожидается Python.
3

Задание 3: подсчёт символа

Создайте файл count_symbol.py. Переберите строку в цикле и увеличивайте счётчик при совпадении.

text = input("Введите строку: ")
symbol = input("Введите символ: ")

count = 0
for char in text:
    if char == symbol:
        count += 1

print(f"Символ {symbol} встречается {count} раз(а).")

Проверка в VS Code:

  1. Запустите: python count_symbol.py.
  2. Введите Hello, world! и символ o → ожидается 2.
  3. Введите banana и символ a → ожидается 3.
4

Задание 4: инвертирование строки без цифр

Создайте файл reverse_without_digits.py. Пройдите строку в обратном порядке и добавляйте в результат только нецифровые символы.

text = input("Введите строку: ")
result = ""

for char in text[::-1]:
    if not char.isdigit():
        result += char

print("Результат:", result)

Проверка в VS Code:

  1. Запустите: python reverse_without_digits.py.
  2. Введите n52uFs6Inoh67ty8P → ожидается PythonIsFun.
  3. Введите 123abc → ожидается cba.

✅ Полные решения

Ниже приведены полные решения всех четырёх заданий. Совет: попробуйте выполнить самостоятельно, прежде чем смотреть ответ.

Задание 1: проверка кодировки

📄 check_encoding.py
letter = input("Введите символ: ")
unicode_code = ord(letter)
is_ascii = 0 <= unicode_code <= 127

print("Код Unicode:", unicode_code)
print("ASCII символ:", is_ascii)

Задание 2: подстрока с заполнением

📄 substring_with_padding.py
text = input("Введите строку: ")
start_index = int(input("Введите начальный индекс: "))
end_index = int(input("Введите конечный индекс: "))

substring = text[start_index:end_index]

if end_index > len(text):
    substring += "_" * (end_index - len(text))

print("Подстрока:", substring)

Задание 3: подсчёт символа

📄 count_symbol.py
text = input("Введите строку: ")
symbol = input("Введите символ: ")

count = 0
for char in text:
    if char == symbol:
        count += 1

print(f"Символ {symbol} встречается {count} раз(а).")

Задание 4: инвертирование строки без цифр

📄 reverse_without_digits.py
text = input("Введите строку: ")
result = ""

for char in text[::-1]:
    if not char.isdigit():
        result += char

print("Результат:", result)

🧪 Как проверить решение

  1. Активируйте venv: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  2. Запустите каждый файл: python check_encoding.py, python substring_with_padding.py, python count_symbol.py, python reverse_without_digits.py.
  3. Проверьте вывод в терминале — не должно быть ошибок.
  4. Проверьте граничные случаи: пустая строка, индексы за пределами длины, строки без цифр.

🐛 Отладка в VS Code

Если что-то не работает:

  1. Поставьте точку останова (breakpoint) кликом слева от номера строки.
  2. Нажмите F5 или выберите «Run → Start Debugging».
  3. Используйте панель Debug (переменные, стек вызовов, консоль).
  4. Проверьте Terminal на наличие traceback — Python показывает номер строки с ошибкой.
  5. Если возникает IndexError, проверьте, что индекс меньше длины строки.

💾 Сохранение работы

# Добавьте все файлы урока
git add lesson-14/

# Сделайте коммит с осмысленным сообщением
git commit -m "lesson-14: strings, indexing, slicing, encoding"

# Отправьте на GitHub / GitLab
git push

💡 Советы и типичные ошибки

  • Убедитесь, что venv активирован перед запуском.
  • Не коммитьте папку venv/ — она указана в .gitignore.
  • Помните, что строки неизменяемы: методы возвращают новые строки.
  • Срез [start:end] не включает символ с индексом end.
  • Для проверки, является ли символ цифрой, удобен метод isdigit().