Простой Python. Современный стиль программирования (Любанович) - страница 55

>>>> 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 являются одними из итерабельных объектов в Python наряду со строками, кортежами, словарями и некоторыми другими элементами. Итерирование по кортежу или списку возвращает один элемент за раз. Итерирование по строке возвращает один символ за раз, как показано здесь:

>>>> word = 'cat'

>>>> for letter in word:

>…·····print(letter)

>…

>c

>a

>t

Итерирование по словарю (или его функции keys()) возвращает ключи. В этом примере ключи являются типами карт в настольной игре Clue (за пределами Северной Америки она называется CluedoAmerica):