Python - Вложенные циклы
Привет, молодые программисты! Сегодня мы погружаемся в увлекательный мир вложенных циклов в Python. Как ваш добрый сосед-компьютерный учитель, я рад вести вас через это путешествие. Поверьте мне, к концу этого урока вы будете циклиться как профи!
Что такое вложенные циклы?
Перед тем как попрыгать в глубокую воду, начнем с основ. Представьте себе, что вы упорядочиваете свою гардеробную шкафу. Вы проходите по каждой полке (это один цикл), и для каждой полки вы сортируете все вещи на ней (это еще один цикл внутри первого). Вот исключительно что такое вложенные циклы в программировании - циклы внутри циклов!
Вложенный цикл for в Python
Начнем с цикла for
, который является как надежный старый друг в мире Python.
Основная структура
Вот общая структура вложенного цикла for
:
for внешняя_переменная in внешняя_последовательность:
# Тело внешнего цикла
for внутренняя_переменная in внутренняя_последовательность:
# Тело внутреннего цикла
Простой пример: Матрица умножения
Создадим простую матрицу умножения, чтобы лучше понять это:
for i in range(1, 6):
for j in range(1, 6):
print(f"{i} x {j} = {i*j}", end="\t")
print() # Переход на новую строку после каждого ряда
Этот код выведет:
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25
Разберем это:
- Внешний цикл (
for i in range(1, 6)
) выполняется 5 раз, представляя строки. - Для каждой итерации внешнего цикла внутренний цикл (
for j in range(1, 6)
) выполняется 5 раз, представляя столбцы. - Мы выводим каждый результат умножения, используя
end="\t"
, чтобы добавить табуляцию вместо новой строки. - После каждого ряда (итерации внешнего цикла) мы выводим пустую строку, чтобы перейти к следующему ряду.
Пример из реальной жизни: Планировка мест
Представьте себе, что вы учитель (как я!) и распределяете места для класса. Создадим схему распределения мест:
студенты = ["Алиса", "Боб", "Чарли", "Давид", "Ева"]
рядов = 3
мест_в_ряду = 2
номер_места = 0
for ряд in range(1, рядов + 1):
print(f"Ряд {ряд}:")
for место in range(1, мест_в_ряду + 1):
if номер_места < len(студенты):
print(f" Место {место}: {студенты[номер_места]}")
номер_места += 1
else:
print(f" Место {место}: Пустое")
print() # Пустая строка между рядами
Это выведет:
Ряд 1:
Место 1: Алиса
Место 2: Боб
Ряд 2:
Место 1: Чарли
Место 2: Давид
Ряд 3:
Место 1: Ева
Место 2: Пустое
В этом примере:
- Внешний цикл итерируется по каждому ряду.
- Внутренний цикл назначает студентов местам в каждом ряду.
- Мы используем переменную
номер_места
, чтобы отслеживать, какого студента мы назначаем следующим. - Если студентов не хватает, оставшиеся места помечаются как "Пустое".
Вложенный цикл while в Python
Теперь познакомимся с двоюродным братом цикла while
- вложенным циклом while
. Это как сторожевой, который постоянно проверяет условие.
Основная структура
Вот как обычно выглядит вложенный цикл while
:
while внешнее_условие:
# Тело внешнего цикла
while внутреннее_условие:
# Тело внутреннего цикла
Пример: Числовая пирамида
Создадим числовую пирамиду, чтобы увидеть вложенные циклы while
в действии:
ряд = 1
while ряд <= 5:
столбец = 1
while столбец <= ряд:
print(столбец, end=" ")
столбец += 1
print() # Переход на новую строку
ряд += 1
Это выведет:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
Разберем это:
- Внешний цикл
while
контролирует количество рядов (от 1 до 5). - Для каждого ряда внутренний цикл
while
выводит числа от 1 до текущего номера ряда. - Мы увеличиваем
столбец
внутри внутреннего цикла иряд
внутри внешнего цикла.
Пример из реальной жизни: Проверка запасов
Представьте себе, что вы управляете небольшим магазином. Вам нужно регулярно проверять ваши запасы. Давайте симулируем это с помощью вложенных циклов while
:
запасы = {
"яблоки": 50,
"бананы": 30,
"апельсины": 40
}
дни = 1
while дни <= 3: # Проверка на 3 дня
print(f"День {дни} Проверка запасов:")
for фрукт, количество in запасы.items():
while количество > 0:
print(f"Проверка {фрукт}...")
количество -= 10 # Симуляция продажи 10 единиц каждая проверка
if количество <= 20:
print(f"Оповещение о низком уровне {фрукт}! Осталось только {количество}.")
break # Прекратить проверку этого фрукта, если запасы низкие
запасы[фрукт] = количество # Обновление запасов
print(f"Конец дня {дни} Запасы: {запасы}\n")
дни += 1
Это выведет что-то вроде:
День 1 Проверка запасов:
Проверка яблок...
Проверка яблок...
Проверка яблок...
Оповещение о низком уровне яблок! Осталось только 20.
Проверка бананов...
Оповещение о низком уровне бананов! Осталось только 20.
Проверка апельсинов...
Проверка апельсинов...
Оповещение о низком уровне апельсинов! Осталось только 20.
Конец дня 1 Запасы: {'яблоки': 20, 'бананы': 20, 'апельсины': 20}
День 2 Проверка запасов:
Проверка яблок...
Оповещение о низком уровне яблок! Осталось только 10.
Проверка бананов...
Оповещение о низком уровне бананов! Осталось только 10.
Проверка апельсинов...
Оповещение о низком уровне апельсинов! Осталось только 10.
Конец дня 2 Запасы: {'яблоки': 10, 'бананы': 10, 'апельсины': 10}
День 3 Проверка запасов:
Проверка яблок...
Оповещение о низком уровне яблок! Осталось только 0.
Проверка бананов...
Оповещение о низком уровне бананов! Осталось только 0.
Проверка апельсинов...
Оповещение о низком уровне апельсинов! Осталось только 0.
Конец дня 3 Запасы: {'яблоки': 0, 'бананы': 0, 'апельсины': 0}
В этом примере:
- Внешний цикл
while
симулирует проверку запасов на 3 дня. - Мы используем цикл
for
, чтобы перебрать каждый фрукт в запасах. - Внутренний цикл
while
симулирует проверку и продажу каждого фрукта до тех пор, пока запасы не станут низкими или не исчерпаны. - Мы используем
break
, чтобы прекратить проверку фрукта, если его количество снижается до 20 или ниже.
Заключение
Поздравляю! Вы только что овладели искусством вложенных циклов в Python. Помните, вложенные циклы - это мощные инструменты, но используйте их разумно. Они могут сделать ваш код медленнее, если использовать их неэффективно.
Как и с любым программным концептом, практика - это ключ к успеху. Попробуйте создать свои собственные сценарии с вложенными циклами - возможно, это шахматная доска или еженедельный расписание школы. Возможности безграничны!
Продолжайте программировать, учиться и, что самое важное, радуйтесь этим процессом! До встречи в следующий раз, это ваш добрый сосед-компьютерный учитель подписывается. Счастливого циклотирования!
Credits: Image by storyset