…·····if stuff == "q":
…·········break
…·····print(stuff.capitalize())
…
String to capitalize [type q to quit]: test
Test
String to capitalize [type q to quit]: hey, it works
Hey, it works
String to capitalize [type q to quit]: q
>>>
Пропускаем итерации с помощью continue
Иногда вам нужно не прерывать весь цикл, а только пропустить по какой-то причине одну итерацию. Рассмотрим воображаемый пример: считаем целое число, выведем на экран его значение в квадрате, если оно четное, и пропустим его, если оно нечетное. Мы даже добавим несколько комментариев. И вновь для выхода из цикла используем строку "q":
>>> while True:
…·····value = input("Integer, please [q to quit]: ")
…·····if value == 'q':······# выход
…·········break
…·····number = int(value)
…·····if number % 2 == 0:···# нечетное число
…········continue
…·····print(number, "squared is", number*number)
…
Integer, please [q to quit]: 1
1 squared is 1
Integer, please [q to quit]: 2
Integer, please [q to quit]: 3
3 squared is 9
Integer, please [q to quit]: 4
Integer, please [q to quit]: 5
5 squared is 25
Integer, please [q to quit]: q
>>>
Проверяем, завершился ли цикл заранее, с помощью else
Если цикл while завершился нормально (без вызова break), управление передается в опциональный блок else. Вы можете использовать его в цикле, где выполняете некоторую проверку и прерываете цикл, как только проверка успешно выполняется. Блок else выполнится в том случае, если цикл while будет пройден полностью, но искомый объект не будет найден:
>>> numbers = [1, 3, 5]
>>> position = 0
>>> while position < len(numbers):
…·····number = numbers[position]
…·····if number % 2 == 0:
…·········print('Found even number', number)
…·········break
…·····position += 1
… else:··# break not called
…·····print('No even number found')
…
No even number found
Такое использование ключевого слова else может оказаться нелогичным. Рассматривайте его как проверку на прерывание цикла.
Выполняем итерации с помощью for
В Python
Вполне возможно пройти по последовательности таким образом:
>>> rabbits = ['Flopsy', 'Mopsy', 'Cottontail', 'Peter']
>>> current = 0
>>> while current < len(rabbits):
…·····print(rabbits[current])
…·····current += 1
…
Flopsy
Mopsy
Cottontail
Peter
Однако существует более характерный для Python способ решения этой задачи:
>>> for rabbit in rabbits:
…·····print(rabbit)
…
Flopsy
Mopsy
Cottontail
Peter
Списки вроде rabbits являются одними из
>>> word = 'cat'
>>> for letter in word:
…·····print(letter)
…
c
a
t
Итерирование по словарю (или его функции keys()) возвращает ключи. В этом примере ключи являются типами карт в настольной игре Clue (за пределами Северной Америки она называется CluedoAmerica):
>>> accusation = {'room': 'ballroom', 'weapon': 'lead pipe',
··················'person': 'Col. Mustard'}