💻 Практические примеры

⚡ Минимальный рабочий пример

data = "1 2 3 4 5"
numbers = [int(n) for n in data.split()]
print(f"Сумма: {sum(numbers)}")

Этот код читает строку, разбивает её на слова, превращает каждое слово в число и выводит сумму.

ЗадачаПриём
Строка → числа[int(x) for x in text.split()]
Разворот спискаnumbers[::-1]
Максимум без max()цикл + сравнение с накопителем
Один пробел вместо нескольких" ".join(text.split())
Все позиции подстрокиstr.find(sub, start) в цикле
Топ-3 ошибки: забыли пересчитать индекс после свопа соседних элементов · find() без сдвига start находит только первое вхождение · сравнение регистрозависимое, если не привести строку к .lower().

Урок про обработку строк и списков даёт всего несколько задач — здесь собраны примеры на все ключевые приёмы: числа из строки, поиск максимума без встроенных функций, работа с пробелами, поиск всех вхождений подстроки и фильтрация по условию. Там, где в исходном задании требовался input(), используется фиксированная строка — так весь код урока можно склеить и запустить одним файлом; в интерактивной версии верните input() самостоятельно.

Пример 1: сумма чисел из строки

Принимаем строку с числами через пробел и выводим сумму. Для автоматической проверки используем фиксированную строку; в интерактивной версии замените её на input().

📄 examples/sum_numbers.py
data = "1 2 3 4 5"
numbers = [int(x) for x in data.split()]
print(f"Сумма чисел: {sum(numbers)}")

Логика: split() разбивает строку по пробелам, int() превращает каждую часть в число, sum() считает сумму.

Пример 2: обратный список

Создаём список чисел из строки и выводим его в обратном порядке.

📄 examples/reverse_list.py
data = "1 2 3 4 5"
numbers = [int(x) for x in data.split()]
reversed_numbers = numbers[::-1]
print(f"Обратный список: {reversed_numbers}")

Логика: срез [::-1] создаёт новый список с элементами в обратном порядке.

Пример 3: максимальное число без max()

Ищем наибольшее число и его индекс вручную — так же, как под капотом работает встроенный max().

📄 examples/max_without_builtin.py
numbers = [3, 12, 8, 22, 9, 25, 6, 23, 8, 7]
max_number = numbers[0]
max_index = 0

for index, number in enumerate(numbers):
    if number > max_number:
        max_number = number
        max_index = index

print("Список чисел:", numbers)
print("Наибольшее число:", max_number)
print("Индекс числа:", max_index)

Логика: max_number — накопитель, начинаем с первого элемента. enumerate() даёт одновременно индекс и значение, поэтому не нужен отдельный счётчик через range(len(numbers)).

Пример 4: перестановка соседних элементов

Меняем местами элементы с индексами 0-1, 2-3 и т.д.

📄 examples/swap_adjacent.py
numbers = [1, 2, 3, 4, 5]
for i in range(0, len(numbers) - 1, 2):
    numbers[i], numbers[i + 1] = numbers[i + 1], numbers[i]
print(numbers)

Логика: шаг 2 в range() берёт индексы парами (0, 2, 4, ...), а numbers[i], numbers[i + 1] = numbers[i + 1], numbers[i] меняет пару местами без временной переменной. Последний нечётный элемент (если он есть) остаётся на месте — см. Ошибки урока, ошибка 7.

Пример 5: числа и слова

Обрабатываем строку, содержащую слова и целые числа. Числа остаются числами, слова начинаются с заглавной буквы.

📄 examples/numbers_and_words.py
text = "apple 42 banana 3 100 orange"
result = []

for item in text.split():
    if item.isdigit():
        result.append(int(item))
    else:
        result.append(item.title())

print(f"Изначальная строка: {text}")
print(f"Результат: {result}")

Пример 6: кодирование строки (RLE)

Каждая последовательность одинаковых символов заменяется на символ и количество повторений.

📄 examples/rle_encode.py
text = "aaaabbc"
encoded = ""
count = 1

for i in range(1, len(text)):
    if text[i] == text[i - 1]:
        count += 1
    else:
        encoded += text[i - 1] + str(count)
        count = 1

encoded += text[-1] + str(count)
print(f"Закодированная строка: {encoded}")

Пример 7: звёздочки вместо цифр

Перебираем символы и заменяем цифры на *.

📄 examples/stars_instead_digits.py
text = "My number is 123-456-789"
result = "".join("*" if char.isdigit() else char for char in text)
print(f"Строка: {text}")
print(f"Результат: {result}")

Пример 8: развернуть каждое слово

Порядок слов сохраняется, но каждое слово переворачивается по буквам.

📄 examples/reverse_each_word.py
text = "Python is fun"
words = text.split()
reversed_words = []

for word in words:
    reversed_words.append(word[::-1])

result = " ".join(reversed_words)
print(f"Строка: {text}")
print(f"Результат: {result}")

Логика: split() без аргумента делит по словам, срез [::-1] переворачивает каждое слово, а " ".join(...) собирает их обратно с одиночными пробелами.

Пример 9: один пробел вместо нескольких

Убираем лишние пробелы внутри строки и по краям.

📄 examples/collapse_spaces.py
text = "  Hello, World!   How are you?  "
result = " ".join(text.split())
print(f"Строка: {text!r}")
print(f"Результат: {result!r}")

Логика: split() без аргумента сам склеивает подряд идущие пробелы и отбрасывает пробелы по краям — поэтому " ".join(text.split()) короче, чем цепочка .replace(). Сравните с ошибкой 4 в Ошибки урока: split(" ") с явным аргументом лишние пробелы не убирает.

Пример 10: все позиции подстроки

Находим все вхождения подстроки без учёта регистра, а не только первое.

📄 examples/find_all_positions.py
text = "Banana bAnana baNAna"
substring = "ban"
text_lower = text.lower()

positions = []
start = 0
while True:
    position = text_lower.find(substring, start)
    if position == -1:
        break
    positions.append(position)
    start = position + 1

print("Строка:", text)
print("Подстрока:", substring)
for position in positions:
    print("Позиция:", position)

Логика: find(substring, start) ищет начиная с индекса start и возвращает -1, если не нашёл — на этом условии цикл while останавливается. Без второго аргумента find() всегда находил бы одну и ту же первую позицию — см. Ошибки урока, ошибка 3.

Пример 11: корректные имена

Оставляем только имена, которые состоят из букв и начинаются с заглавной буквы.

📄 examples/valid_names.py
names = ["Alice", "bob", "Charlie", "dave", "Eva", "Frank123"]
valid_names = []

for name in names:
    if name.isalpha() and name[0].isupper():
        valid_names.append(name)

print("Имена с заглавной буквы и без цифр:")
for name in valid_names:
    print(name)

Логика: isalpha() отсекает "Frank123" (в нём есть цифры), name[0].isupper() отсекает "bob" и "dave" (начинаются со строчной буквы). Оба условия нужны одновременно — только цифры или только регистр не решают задачу.

Проверить по документации: f-strings, генераторные выражения, списковые включения, срез [::-1] и множественное присваивание выходят за рамки исходного занятия.

Как запустить в VS Code

  1. Создайте файл example.py в папке урока.
  2. Скопируйте код из примера выше.
  3. Откройте терминал в VS Code (Ctrl + `).
  4. Активируйте виртуальное окружение: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  5. Запустите: python example.py