В серии: Библиотека alt м. В. Сысоева, И. В. Сысоев


Цикл обхода последовательности (for)


Download 0.87 Mb.
bet33/40
Sana23.04.2023
Hajmi0.87 Mb.
#1387407
TuriКнига
1   ...   29   30   31   32   33   34   35   36   ...   40
Bog'liq
Боши Лекция Парадигма и методы программирование

3.2 Цикл обхода последовательности (for)


Цикл while не единственный способ организации повторения группы выражений. Также широко применяется цикл for, который представляет собой цикл обхода заданного множества элементов (символов строки, объектов списка или словаря) и выполнения в своем теле различных операций над ними5.
Как правило, циклы for используются либо для повторения какой-либо последовательности действий заданное число раз, либо для изменения значения переменной в цикле от некоторого начального значения до некоторого конечного.
Для повторения цикла некоторое заданное число раз n можно использовать цикл for вместе с функцией range:
i (n):
Тело цикла
В качестве n может использоваться числовая константа, переменная или произвольное арифметическое выражение (например, 2**10). Если значение n равно нулю или отрицательное, то тело цикла не выполнится ни разу.
Если задать цикл таким образом:
i (a, b):
Тело цикла то индексная переменная i будет принимать значения от a до b - 1 включительно, то есть первый параметр функции range, вызываемой с двумя параметрами, задает начальное значение индексной переменной, а второй параметр — значение, которое индексная переменная принимать не будет. Например, для того, чтобы просуммировать значения чисел от 1 до n, можно воспользоваться следующей программой:
summa = 0 i (1, n+1): summa = summa + i
В этом примере переменная i принимает значения 1, 2, ..., n, и значение переменной summa последовательно увеличивается на указанные значения. Здесь опять видим прием накопления суммы.

3.2. Цикл обхода последовательности (for)


Наконец, чтобы организовать цикл, в котором индексная переменная будет уменьшаться (в Pascal цикл с downto, цикл с отрицательным приращением), необходимо использовать функцию range с тремя параметрами. Первый параметр задает начальное значение индексной переменной, второй параметр — значение, до которого будет изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной. Например, сделать цикл по всем нечетным числам от 1 до 99 можно при помощи функции range(1, 100, 2), а сделать цикл по всем числам от 100 до 1 можно при помощи range(100, 0, -1).
Более формально, цикл for i in range(a, b, d) при d > 0 задаёт значения индексной переменной i = a, i = a + d, i = a + 2 * d и так для всех значений, для которых i < b. Если же d < 0, то переменная цикла принимает все значения i > b.
Но в языке программирования Python цикл for имеет зачастую несколько иное применение. Например, список в Python относится к итерируемым объектам. Это значит, что его элементы можно обойти циклом for, причём переменная-счётчик будет на каждом шаге принимать значение очередного элемента цикла:
mylist = [12, 17.9, True, -8, False] j mylist:
(j)
Программа выведет все элементы списка mylist в столбик:
12
17.9
True
-8
False
Приведённый способ можно назвать обходом по значению, поскольку автоматически создаваемая переменная j на каждом шаге принимает значение очередного элемента списка. Есть ещё один способ обойти список — по индексам, когда такая же переменная будет принимать номер очередного элемента:
mylist = [12, 17.9, True, -8, False] j (0, (mylist), 1):
(j)
Вывод будет совсем другой:
0
1
2
3
4
Если написать:
mylist = [12, 17.9, True, -8, False] j (0, (mylist), 1):
(mylist[j])
то вывод будет такой же, как в первом примере.
На самом деле, механизм обоих подходов один и тот же, потому что во втором варианте фактически неявно создаётся новая последовательность range(0, len(mylist), 1), содержащая номера всех элементов списка mylist — диапазон от нуля до длины mylist с шагом 1, и этот новая последовательность обходится по значению.
Напишем с помощью цикла for вывод ряда Фибоначчи:
fib1 = 0 fib2 = 1 n = 10
summa = 0 i (n):
summa = fib1 + fib2
(summa) fib1 = fib2 fib2 = summa
В результате будет выведено следующее:
1
2
3
5
8
13
21
34
55
89
С помощью цикла for можно перебирать строки, если не пытаться их при этом изменять:
str1 = ’Привет’ i str1:
(i, end=’Ђ’)
Будет выведено:
П р и в е т
Здесь можно видеть, что у функции print есть параметр end. По умолчанию end = ’\n’ — неотображаемому символу новой строки. В предыдущем примере параметру end был присвоен символ пробел.
Цикл for используется и для работы со словарями:
dic = {’cat’:’кошка’, ’dog’:’пёс’,
’bird’:’птица’, ’mouse’:’мышь’} i dic:
dic[i] = dic[i] + ’_ru’
(dic)
Вывод программы:
{’bird’: ’птица_ru’, ’cat’: ’кошка_ru’, ’mouse’: ’мышь_ru’, ’dog’: ’пёс_ru’}
На практике часто не важно, каким образом вы решите задачу. Искать сразу оптимальное решение не следует, достаточно найти просто правильное (а их может быть множество). Как писал Дональд Кнут в своём фундаментальном труде «Искусство программирования», «преждевременная оптимизация — корень многих зол».

Download 0.87 Mb.

Do'stlaringiz bilan baham:
1   ...   29   30   31   32   33   34   35   36   ...   40




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling