На этом шаге мы рассмотрим неформальное введение цикла.
Компьютеры великолепно подходят для многократного выполнения однотипных задач - они не размышляют и производят вычисления намного быстрее, чем это удается делать людям с помощью калькуляторов!
Посмотрим, сможем ли мы заставить компьютер вывести квадраты первых десяти натуральных чисел, начиная с нуля: 0 в квадрате, 1 в квадрате, 2 в квадрате и т.д. Мы ожидаем получить следующий ряд чисел: 0, 1, 4, 9, 16, 25 и т.д.
Мы могли бы самостоятельно произвести все эти вычисления, а затем просто использовать инструкции вывода print(0), print(1), print(4) и т.д. Это сработает, но ведь наша цель заключается в том, чтобы всю вычислительную работу вместо нас выполнил компьютер. Более того, при этом мы упустили бы возможность создать типовой набор инструкций, позволяющий выводить квадраты чисел в любом заданном диапазоне. Для этого нам нужно сначала вооружиться несколькими новыми идеями, к освоению которых мы сейчас и приступим.
Введите в очередную пустую ячейку следующий код:
list(range(10))
Вы должны получить список из десяти чисел от 0 до 9. Это просто замечательно: мы заставили компьютер выполнить всю работу по созданию списка, дав ему соответствующее поручение. Теперь мы хозяева, а компьютер - наш слуга!
Рис.1. Созданный список
Вероятно, вы удивлены тем, что список содержит числа от 0 до 9, а не от 1 до 10. Это не случайно. Многое из того, что связано с компьютерами, начинается с 0, а не с 1. Упорядоченные списки широко используются в качестве счетчиков при многократном выполнении некоторых вычислений и, в частности, когда используются итеративные функции.
Возможно, вы заметили, что мы опустили ключевое слово print, которое использовали при выводе фразы "Hello World!", как, впрочем, обошлись без него и при вычислении произведения 2*3. Использование ключевого слова print не является обязательным при работе с Python в интерактивном режиме, поскольку оболочка знает, что мы хотим увидеть результат введенной инструкции.
Распространенным способом многократного выполнения вычислений с помощью компьютера является использование так называемых циклов. Слово "цикл" правильно передает суть происходящего, когда некоторые действия повторяются снова и снова, возможно, даже бесконечное число раз. Вместо того чтобы приводить формальное определение цикла, гораздо полезнее рассмотреть конкретный простой пример. Введите и выполните в новой ячейке следующий код.
for n in range(10): print(n) print("готово")
Здесь имеются три новых элемента, которые мы последовательно обсудим. Первая строка содержит выражение range(10), с которым вы уже знакомы. Оно создает список чисел от 0 до 9.
Конструкция for n in - это тот элемент, который создает цикл и заставляет выполнять некоторые действия для каждого числа из списка, организуя счетчик путем назначения текущего значения переменной п. Ранее мы уже обсуждали присваивание значений переменным, и здесь происходит то же самое: при первом проходе цикла выполняется присваивание n = 0, а при последующих - присваивание n = 1, n = 2 и так до тех пор, пока мы не дойдем до последнего элемента списка, для которого будет выполнено присваивание n = 9.
Вы, несомненно, сразу же поймете смысл инструкции print(n) в следующей строке, которая просто выводит текущее значение n. Но обратите внимание на отступ перед текстом print(n). В Python отступы играют важную роль, поскольку намеренно используются для того, чтобы показать подчиненность одних инструкций другим, в данном случае циклу, созданному с помощью конструкции for n in. Инструкция pass сигнализирует о конце цикла, и следующая строка, записанная с использованием обычного отступа, не является частью цикла. Это означает, что мы ожидаем, что слово "готово" будет выведено только один раз, а не десять. Представленный ниже результат подтверждает наши ожидания.
Рис.2. Результат выполнения цикла
Теперь вам должно быть понятно, что для получения квадратов чисел следует выводить на экран значения n*n. В действительности мы можем поступить еще лучше и выводить фразы наподобие "Квадрат числа 3 равен 9". Заметьте, что в инструкции переменные не заключаются в кавычки и поэтому вычисляются.
for n in range(10): print("Квадрат числа", n, "равен", n * n) print("готово")
Результат приведен ниже.
Квадрат числа 0 равен 0 Квадрат числа 1 равен 1 Квадрат числа 2 равен 4 Квадрат числа 3 равен 9 Квадрат числа 4 равен 16 Квадрат числа 5 равен 25 Квадрат числа 6 равен 36 Квадрат числа 7 равен 49 Квадрат числа 8 равен 64 Квадрат числа 9 равен 81 готово
Рис.3. Результат выполнения цикла
Это уже довольно сильный пример! Мы можем заставить компьютер очень быстро выполнить большой объем работы, используя минимальный набор инструкций. Точно так же мы, если бы захотели, легко могли бы увеличить число итераций до пятидесяти или даже тысячи с помощью выражений range(50) или range(1000). Попробуйте сделать это самостоятельно!
На следующем шаге мы рассмотрим комментарии.