## ++Тема 4++<br>Циклы с заданным количеством повторений (c) Яценко Р.Н., 2019-2020 --- ### 1. Цикл for ---- ### Цикл с параметром for - Цикл `for`, также называемый циклом со счетчиком, в языке Python богат возможностями - В цикле for указывается переменная и множество значений, которое будет принимать переменная - Множество значений может быть задано списком, строкой или диапазоном (например, от 1 до 10) ---- ### Синтаксис цикла for ```python for item in list: Тело цикла [else: Выражение] ``` - `item` -- параметр цикла - `list` -- имя последовательности (например, списка) или вызов функции range() ---- ### Пример 1. Цвета радуги ```python i = 1 # заголовок цикла for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet': # тело цикла print('#', i, ' color of rainbow is ', color, sep = '') i += 1 ``` ---- <iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=i%20%3D%201%0A%23%20%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA%20%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%0Afor%20color%20in%20'red',%20'orange',%20'yellow',%20'green',%20'cyan',%20'blue',%20'violet'%3A%0A%20%20%20%20%23%20%D1%82%D0%B5%D0%BB%D0%BE%20%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%0A%20%20%20%20print%28'%23',%20i,%20'%20color%20of%20rainbow%20is%20',%20color,%20sep%20%3D%20''%29%0A%20%20%20%20i%20%2B%3D%201&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe> ---- ### Пример 2. Список значений ```python for i in 1, 2, 3, 'one', 'two', 'three': print(i) ``` ``` 1 2 3 one two three ``` --- ## 2. Функция range ---- ### Заданное число раз - Как правило, циклы `for` используются либо для повторения какой-либо последовательности действий заданное число раз, либо для изменения значения переменной в цикле от некоторого начального значения до некоторого конечного - Для повторения цикла некоторое заданное число `n` раз можно использовать цикл `for` вместе с функцией `range` ---- ### Пример 3. Функция range ```python for i in range(4): # равносильно инструкции for i in 0, 1, 2, 3: # здесь можно выполнять циклические действия print(i) print(i ** 2) # цикл закончился, поскольку закончился блок с отступом ``` ---- <iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=for%20i%20in%20range%284%29%3A%0A%20%20%20%20print%28i%29%0A%20%20%20%20print%28i%20**%202%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe> ---- ### Диапазон значений - Функция `range` может также принимать не один, а два параметра - Вызов `range(a, b)` означает, что индексная переменная (счетчик) будеть принимать значения от `a` до `b - 1`: - первый параметр функции `range` задает начальное значение счетчика - второй параметр — первое значение, которое счетчик принимать **не будет** ---- ### Пример 4. Сумма чисел от 1 до n ```python sum = 0 n = 5 for i in range(1, n + 1): sum += i print(sum) ``` ---- <iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=sum%20%3D%200%0An%20%3D%205%0Afor%20i%20in%20range%281,%20n%20%2B%201%29%3A%0A%20%20%20%20sum%20%2B%3D%20i%0Aprint%28sum%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe> ---- ### Цикл с заданным шагом Чтобы организовать цикл, в котором счетчик будет изменяться на заданный шаг, необходимо использовать третий параметр функции `range` -- величину изменения счетчика ```python range(начальное значение, конечное значение + 1, шаг) ``` ---- ### Примеры циклов с заданным шагом - Цикл по всем числам от 100 до 1 `range(100, 0, -1)` - Цикл по всем нечетным числам от 1 до 99 `range(1, 100, 2)` ---- ### Пример 5. Использование функции range ```python print("Посчитаем:") for i in range(10): print(i, end=" ") print("Перечисли кратные пяти:") for i in range(0, 50, 5): print(i, end=" ") print("Посчитаем в обратном порядке:") for i in range(10, 0, -1): print(i, end=" ") ``` ``` Посчитаем: 0 1 2 3 4 5 6 7 8 9 Перечисли кратные пяти: 0 5 10 15 20 25 30 35 40 45 Посчитаем в обратном порядке: 10 9 8 7 6 5 4 3 2 1 ``` ---- ### Пример 6. Создать последовательность нечетных чисел от 1 до n, включительно, если n нечетное ```python n = int(input('n = ')) for j in range(1, n, 2): print(j, end=' ') else: if n % 2: print(n) ``` ---- <iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=n%20%3D%20int%28input%28'n%20%3D%20'%29%29%20%23%20n%20%3D%2025%0Afor%20j%20in%20range%281,%20n,%202%29%3A%0A%20%20%20%20print%28j,%20end%3D'%20'%29%0Aelse%3A%0A%20%20%20%20if%20n%20%25%202%3A%0A%20%20%20%20%20%20%20%20print%28n%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe> --- ## 3. Случайные числа ---- ### Импорт модуля random *Модули* -- это библиотеки, содержащие код, пригодный для использования в других программах. Так, модуль `random` содержит функции, связанные с генерацией случайных чисел и получением случайных результатов В начале программы пишем ```python import random ``` ---- ### Случайное число Функция `random.randint(a, b)` возвращает случайное целое число от `a` до `b` : ```python # случайное число от 1 до 10 x = random.randint(1, 10) ``` ---- ### Пример 7. Кости ```python import random # создаем случайные числа из диапазона 1 - 6 die1 = random.randint(1, 6) die2 = random.randint(1, 6) total = die1 + die2 print("При вашем броске выпало", die1, "и", die2, "очков") print("В сумме", total) ``` ---- <iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=import%20random%0A%0A%23%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B5%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%20%D0%B8%D0%B7%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D0%B0%201%20-%206%0Adie1%20%3D%20random.randint%281,%206%29%20%0Adie2%20%3D%20random.randint%281,%206%29%20%0A%0Atotal%20%3D%20die1%20%2B%20die2%0A%0Aprint%28%22%D0%9F%D1%80%D0%B8%20%D0%B2%D0%B0%D1%88%D0%B5%D0%BC%20%D0%B1%D1%80%D0%BE%D1%81%D0%BA%D0%B5%20%D0%B2%D1%8B%D0%BF%D0%B0%D0%BB%D0%BE%22,%20die1,%20%22%D0%B8%22,%20die2,%20%22%D0%BE%D1%87%D0%BA%D0%BE%D0%B2%22%29%0Aprint%28%22%D0%92%20%D1%81%D1%83%D0%BC%D0%BC%D0%B5%22,%20total%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe> --- ## 4. Циклы for вложенные друг в друга ---- ### Вложенные циклы - Циклы for могут быть вложенными друг в друга - Глубина вложенности может быть сколько угодно большая, но допускать этого не следует, поскольку с увеличением глубины вложенности сложность программы возрастает и она становится плохо читаема ---- ### Пример 8. Таблица Пифагора ```python for j in range(1, 11): for k in range(1, 11): print('%4d' % (j * k), end='') print() ``` ``` 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 ``` ---- ### Пример 9. Уравнение Дано целое n. Вывести все тройки чисел $x$, $y$ и $z$ для которых $x^2+y^2+z^2=n$ ```python from math import sqrt n = int(input('n = ')) # n = 99 m = int(sqrt(n)) + 1 for x in range(m): for y in range(x, m): for z in range(y, m): if x * x + y * y + z * z == n: print('%4d%4d%4d' % (x, y, z)) ``` ---- <iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=from%20math%20import%20sqrt%0An%20%3D%20int%28input%28'n%20%3D%20'%29%29%20%23%20n%20%3D%2099%0Am%20%3D%20int%28sqrt%28n%29%29%20%2B%201%0Afor%20x%20in%20range%28m%29%3A%0A%20%20%20%20for%20y%20in%20range%28x,%20m%29%3A%0A%20%20%20%20%20%20%20%20for%20z%20in%20range%28y,%20m%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20x%20*%20x%20%2B%20y%20*%20y%20%2B%20z%20*%20z%20%3D%3D%20n%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print%28'%254d%254d%254d'%20%25%20%28x,%20y,%20z%29%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe> --- ## Спасибо за внимание! ![](https://i.imgur.com/gKDsna4.png) (c) Яценко Р.Н., 2019-2020
{"metaMigratedAt":"2023-06-15T13:20:09.193Z","metaMigratedFrom":"YAML","title":"Тема 4. Циклы с заданным количеством повторений","breaks":false,"slideOptions":"{\"allottedMinutes\":80,\"slideNumber\":\"c\",\"theme\":\"beige\",\"transition\":\"slide\",\"spotlight\":{\"enabled\":true}}","contributors":"[{\"id\":\"93a8c43f-1b5b-4461-9101-89b183ccbc1c\",\"add\":10808,\"del\":1324}]"}
    2590 views