Следующая: , Предыдущая: boolop, Вверх: Top


7 Цикл с параметром

Когда необходимо в программе несколько раз выполнить одну и ту же последовательность инструкций, используются циклы. В этом листочке мы рассмотрим цикл for, также называется цикл с параметром. Параметром является переменная, также называемая счетчиком, которая принимает значения из заданного списка. Тело цикла будет выполнено столько раз, сколько элементов содержит заданный список.

Инструкция for

Синтаксис инструкции for такой:

     for переменная in список:
         инструкция 1
         инструкция 2
         ...
         инструкция n

где переменная — идентификатор переменной, которая будет изменяться внутри цикла, список — список значений, которые будет принимать переменная. Список заключается в квадратные скобки, элементы списка разделяются запятыми. Затем идет блок инструкций, выполняемых в цикле. Как и в случае с условной инструкцией, блок должен быть выделен отступом. Пример:

     for number in ["раз","два","три","четыре","пять"]:
         print number, ","
     print "Вышел зайчик погулять"

В этом примере number — это переменная, которая изменяется в цикле. Она принимает значения из списка, в котором пять элементов: текстовые строки "раз", "два", "три", "четыре" и "пять" (текстовые строки необходимо заключаются в кавычки). Тело цикла состоит из одной инструкции print и эта инструкция будет выполнена пять раз, при каждом выполнении переменная number будет принимать очередное значение из заданного списка. После выполнения цикла будет выполнена инструкция print для вывода строки "Вышел зайчик погулять".

Списки

Список — это специальный тип данных, состоящий из нескольких элементов. Элементами списка могут быть данные произвольных типов: целые и действительные числа, строки и даже другие списки. Простейший способ задать список в программе: перечислить его элементы в квадратных скобках через запятую. Например:

     A=[1,2,3,4,5]
     B=["У лукоморья","дуб зеленый"]
     C=["one",1,1.0,"1"]

В этом примере переменная A — это список из 5 элементов, являющихся целыми числами, B — это список из двух элементов, являющихся строками, а C — это список из 4 элементов: строки "one", целого числа 1, действительного числа 1.0 и строки "1" (и все это — различные объекты).

Во многом списки похожи на множества в математике, их главное отличие в том, что списки могут содержать повторяющиеся элементы и элементы списка упорядочены. Можно задать и пустой список, не содержащий элементов: A=[].

Пользователь может вводить список с клавиатуры, перечислив его элементы через запятую в квадратных скобках. Также списки можно выводить на экран инструкцией print.

Воспользуемся списком для решения задачи нахождения суммы большого количества чисел:

     A=input("Введите список чисел: ")
     S=0
     for f in A:
         S=S+f
     print "Сумма элементов списка", A, "равна", S

Эта программа сначала просит пользователя ввести список чисел, затем переменной S присваивается значение 0. В эту переменную мы будем осуществлять суммирование всех элементов списка, организовав цикл по переменной f, принимающей все значение из введенного списка и увеличивая внутри списка значение переменной S на f.

Как мы видим, список, значения из которого принимает переменная, меняющаяся в цикле, можно задавать как в строке, содержащей инструкцию for, так и раньше (а в инструкции for тогда следует указать идентификатор переменной, хранящей список).

Во многих языках программирования структуры данных, наиболее близкие спискам в Питоне, называются массивами.

Функция range

Часто переменная в цикле должна принимать значения, являющиеся элементами арифметической прогрессии, например, все значения от 1 до n или значения 1, 3, 5, ..., 99. В этом случае для задания списка значений для переменной, изменяющейся в цикле, следует использовать функцию range. Эта функция генерирует список, элементы которого являются последовательными членами арифметической прогрессии. Полученный список можно присвоить переменной при помощи оператора присваивания, вывести на экран при помощи инструкции print или сразу же использовать в инструкции for.

У функции range может быть один, два или три параметра. Рассмотрим функцию range с одним параметром. Следующая программа

     print range(5)
     print range(8)

выведет на экран два списка: [0, 1, 2, 3, 4] и [0, 1, 2, 3, 4, 5, 6, 7]. Таким образом, функция range(n) возвращает список из n целых чисел от 0 до n-1.

Рассмотрим функцию range c двумя параметрами. Программа

     print range(-1,5)
     print range(4,8)

напечатает списки [-1, 0, 1, 2, 3, 4] и [4, 5, 6, 7], значит, функция range(k,n) возвращает список из n-k целых чисел от k до n-1. Если же k≥n, то функция range(k,n) возвращает пустой список (равно как и функция range(n) если n≤0).

Теперь рассмотрим функцию range с тремя параметрами. Программа

     print range(-3,10,2)
     print range(7,-10,-3)

выведет на экран списки [-3, -1, 1, 3, 5, 7, 9] и [7, 4, 1, -2, -5, -8]. Таким образом, функция range(k,n,d) в случае положительного d возвращает арифметическую последовательность, в которой первый член равен k, разность равна d, а последний член — это наибольший член, который меньше n. Если же d<0, то последний член последовательности — это наименьший член, который больше n.

Параметрами функции range могут быть только целые числа. При подстановке в функцию range действительных чисел у них отбрасывается дробная часть.

Список, сгенерированный функцией range, можно использовать по-разному: вывести на экран (как это делается выше), присвоить переменной или использовать в инструкции for. Следующая программа по введенному пользователю числу n выводит на экран ровно n звездочек:

     n=input("Введите натуральное число ")
     for i in range(n):                        # Тело цикла будет
         print "*",                            # выполнено n раз

Следующая программа находит сумму всех целых чисел от 1 до n:

     n=input("Введите натуральное число ")
     S=0
     for i in range(1,n+1):       # i будет принимать значения 1, 2, 3, ...,n
         S=S+n

Упражнения

  1. Задайте список, содержащий все натуральные четные числа, меньшие 100.
  2. Задайте список, содержащий все натуральные числа, не превосходящие 1000, которые дают остаток 2 при делении на 7.
  3. Задайте список, содержащий все отрицательные целые числа, не превосходящие по абсолютной величине 5000, которые дают остаток 14 при делении на 192.
  4. По данному числу n вычислите число n!.
  5. По данным числам n и k вычислите Cnk

    (число сочетаний из n элементов по k).

  6. По данным целым числам a и b найдите сумму квадратов всех чисел от a до b (включительно).
  7. Нарисуйте "тоннель", уходящий вдаль: последовательность вложенных квадратов.
  8. По данному числу n нарисуйте черепашкой сетку шахматной доски размером n×n

    (не раскрашивая клетки).

  9. По данному списку (введенному пользователем с клавиатуры) определите, сколько он содержит нечетных чисел. (Указание. Используйте условную инструкцию внутри цикла)
  10. Найдите все двузначные числа, которые равны удвоенному произведению своих цифр. (Указание. Сделайте цикл по списку, содержащему все двузначные числа).
  11. Для данного числа n определите число его натуральных делителей.