Представляем первую команду управлением хода вычисления. Обычно компьютер начинает с первой строки и идет далее по порядку. Команды управления меняют порядок выполнения других команд или определяют, будут ли выполнены определенные команды. Следующая программа использует команду управления while:
a = 0
while a < 10:
a = a + 1
print a
А вот и поразительно интересный результат:
1 2 3 4 5 6 7 8 9 10
(После того как вы превратили свой компьютер в пятидолларовый калькулятор, вы думали, что хуже уже не будет?) Так что же эта программа делает? Сначала она выполняет команду a = 0 и записывает ноль в переменную a. Затем он выполняет: while a < 10: и проверяет, что a < 10. Первый раз, когда компьютер видит эту команду, a содержит ноль, поэтому она меньше десяти. Другими словами, пока a меньше десяти, компьютер будет выполнять команды, написанные с пробелами в начале строки.
А вот другой пример использования while:
a = 1
s = 0
print 'Enter Numbers to add to the sum.'
print 'Enter 0 to quit.'
while a != 0 :
print 'Current Sum:',s
a = input('Number? ')
s = s + a
print 'Total Sum =',s
Первый раз, когда я запустил эту программу, Python вывел:
File "sum.py", line 3
while a != 0
^
SyntaxError: invalid syntax
Оказалось, я забыл дописать : в конце строки while. Сообщение об ошибке указало на это и также отметило место где, по ее мнению, была ошибка, знаком ^. После того, как проблема была устранена, вот что я получил:
Enter Numbers to add to the sum. Enter 0 to quit. Current Sum: 0 Number? 200 Current Sum: 200 Number? -15.25 Current Sum: 184.75 Number? -151.85 Current Sum: 32.9 Number? 10.00 Current Sum: 42.9 Number? 0 Total Sum = 42.9
Обратите внимание, что print 'Total Sum =',s выполняется только один раз в конце. Команда while влияет только на команды, начинающиеся с пробелов (или знаков табуляции). Выражение != означает «не равно», поэтому while a != 0: означает: пока a не ноль, выполняйте последующие команды, начинающиеся с пробелов.
Теперь, когда мы знакомы с циклами while, возможно написать программы, которые никогда не завершаются. Следующая программа показывает простой способ сделать это:
while 1 == 1:
print "Help, I'm stuck in a loop."
Программа будет выводить "Help, I'm stuck in a loop." до конца света или пока вы ее не остановите. Остановить ее можно нажатием клавиш Control (Ctrl) и c (буква) одновременно. Это заставит программу остановиться. (Обратите внимание, иногда после нажатия этих двух клавиш надо нажать Enter).
Fibonnacci.py
#Программа находит числа Фибонначи
a = 0
b = 1
count = 0
max_count = 20
while count < max_count:
count = count + 1
#необходимо сохранить старое значение a,
# поскольку мы его меняем
old_a = a
old_b = b
a = old_b
b = old_a + old_b
#обратите внимание, что запятая в конце команды print
# не дает перевести позицию печати на новую строку
print old_a,
print
Результат:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
Password.py
# Ждет правильный пароль. Используйте Ctrl-C для
# завершения программы без пароля
#Обратите внимание, это должно отличаться от пароля,
# чтобы цикл while выполнился хотя бы один раз
password = "foobar"
#обратите внимание, что != значит «не равно»
while password != "unicorn":
password = raw_input("Password:")
print "Welcome in"
Пример работы программы:
Password:auo Password:y22 Password:password Password:open sesame Password:unicorn Welcome in