📖 Теория: повторение циклов, range и списков

⚡ Кратко

Урок повторяет четыре связанные темы: цикл for по итерируемым объектам, генерацию чисел через range(), управление циклом операторами break/continue/else и работу со списками.

  • for item in iterable: — перебор элементов.
  • range(start, stop, step) — числовая последовательность, stop не включается.
  • break прерывает цикл, continue пропускает итерацию, else выполняется, если break не сработал.
  • Список — изменяемая коллекция; элементы можно менять по индексу и срезу.
words = ["apple", "banana"]
for word in words:
    print(word)

О чём этот раздел

Теория повторяет материал исходного занятия Summary Session 5: итерируемые объекты, циклы, range() и списки. Каждая тема сопровождается рабочим примером.

Итерируемые объекты

Итерируемый объект — это объект, который может состоять из множества элементов и предоставляет их по одному, когда это необходимо. Примеры: строки, списки, объекты range, кортежи, множества и словари.

📄 examples/iterable_string.py
text = "Python"
for letter in text:
    print(letter)

Итерация — это один шаг в процессе последовательного перебора элементов. На каждой итерации переменная цикла получает следующий элемент.

Цикл for

Цикл for позволяет повторно выполнять блок кода для каждого элемента последовательности.

📄 examples/basic_for.py
text = "Python"
for letter in text:
    print(letter)

Здесь letter — переменная цикла, а text — итерируемая последовательность. Цикл завершится сам, как только будут перебраны все символы.

Функция range()

range(start, stop, step) создаёт последовательность чисел:

  • stop — обязательный конец диапазона (не включается);
  • start — необязательное начало (по умолчанию 0);
  • step — необязательный шаг (по умолчанию 1).
📄 examples/range_variants.py
# Один аргумент: от 0 до 5 не включительно
for i in range(5):
    print(i)

# Два аргумента: от 2 до 6 не включительно
for i in range(2, 6):
    print(i)

# Три аргумента: нечётные числа от 1 до 10
for i in range(1, 10, 2):
    print(i)

# Отрицательный шаг
for i in range(10, 0, -2):
    print(i)

Управление циклом: break, continue, else

break

Прерывает выполнение цикла досрочно.

📄 examples/for_break.py
for letter in "Python":
    if letter == "h":
        break
    print(letter)

continue

Пропускает текущую итерацию и переходит к следующей.

📄 examples/for_continue.py
for letter in "Python":
    if letter == "h":
        continue
    print(letter)

else

Блок else выполняется, только если цикл завершился без break.

📄 examples/for_else.py
for letter in "Python":
    if letter == "a":
        break
    print(letter)
else:
    print("Цикл завершён нормально.")

Вложенные циклы

Вложенный цикл находится внутри другого цикла. Внутренний цикл выполняется полностью для каждой итерации внешнего.

📄 examples/nested_loops.py
for i in "AB":
    for j in "12":
        print(i, j)
📄 examples/nested_time.py
current_hours = 8
hours = 3
end_time = current_hours + hours

while current_hours < 24 and current_hours < end_time:
    for minutes in range(60):
        print("Время (часов:минут): ", current_hours, ":", minutes, sep="")
    current_hours += 1

Коллекции и изменяемые типы

Коллекция — структура данных для хранения множества элементов. Изменяемый тип данных позволяет изменять содержимое после создания объекта. Список — изменяемый; строка и число — неизменяемые.

📄 examples/mutable_demo.py
numbers = [1, 2, 3]
numbers[0] = 100
print(numbers)  # [100, 2, 3]

text = "hello"
# text[0] = "H"  # TypeError: 'str' object does not support item assignment

Список (list)

Список — упорядоченная изменяемая коллекция, которая может содержать элементы любых типов.

📄 examples/list_basics.py
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3]
mixed = [42, "Python", 3.14, True, [1, 2, 3]]

print(fruits)
print(numbers)
print(mixed)

Создание списков

📄 examples/creating_lists.py
# Пустой список
empty = []
also_empty = list()

# С элементами
my_list = [1, 2, 3, 4]

# Из строки
chars = list("python")
print(chars)

# Из range
values = list(range(0, 10, 2))
print(values)

Индексация и срезы

Индексация начинается с 0; последний элемент — -1. Срез list[start:stop:step] возвращает подсписок, не изменяя исходный.

📄 examples/list_indexing.py
my_list = ["apple", "banana", "cherry", "date"]
print(my_list[0])   # apple
print(my_list[-1])  # date
print(my_list[-4])  # apple
📄 examples/list_slicing.py
my_list = [0, 1, 2, 3, 4, 5, 6]

print(my_list[1:4])    # [1, 2, 3]
print(my_list[::2])    # [0, 2, 4, 6]
print(my_list[::-1])   # [6, 5, 4, 3, 2, 1, 0]
print(my_list[-4:-1])  # [3, 4, 5]
print(my_list[:])      # копия

Изменение списка

📄 examples/list_modifying.py
items = ["apple", "banana", "cherry"]
items[1] = "blueberry"
print(items)

numbers = [10, 20, 30, 40, 50]
numbers[1:3] = [200, 300]
print(numbers)

values = [100, 200, 300, 400]
values[-1] = 500
print(values)

Операции со списками

📄 examples/list_operations.py
list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(list1 + list2)  # конкатенация

print([0] * 5)        # повторение

numbers = [1, 2, 3, 4, 5]
print(3 in numbers)   # True
print(6 in numbers)   # False
print(len(numbers))   # 5

Цикл for со списками

📄 examples/for_over_list.py
my_list = [1, 2, 3, 4, 5]
for item in my_list:
    print(item)
📄 examples/nested_list_strings.py
my_strings = ["apple", "banana", "cherry"]
for word in my_strings:
    for letter in word:
        print(letter, end="")
    print()

Современные практики

Если нужен одновременно индекс и значение, удобна функция enumerate(). Для создания нового списка из существующей последовательности часто используют list comprehensions. Для форматирования строк — f-strings.

📄 examples/modern_enumerate.py
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")
📄 examples/modern_comprehension.py
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)
Проверить по документации: enumerate(), f-strings и list comprehensions выходят за рамки исходного занятия. Они описаны в официальной документации Python и в материалах Real Python (см. Ресурсы).