owned this note
owned this note
Published
Linked with GitHub
# Цикл for
---
## Сам цикл
----
Этот цикл пробегается по набору значений, помещает каждое значение в переменную, и затем в цикле мы можем с этой переменной производить различные действия.
----
Формальное определение цикла for:
```
for переменная in набор_значений:
инструкции
```
----
После ключевого слова for идет название переменной, в которую будут помещаться значения. Затем после оператора in указывается набор значений и двоеточие.
А со следующей строки располагается блок инструкций цикла, которые также должны иметь отступы от начала цикла.
----
При выполнении цикла Python последовательно получает все значения из набора и передает их переменную. Когда все значения из набора будут перебраны, цикл завершает свою работу.
В качестве набора значений, например, можно рассматривать строку, которая по сути представляет набор символов.
----
Посмотрим на примере:
```
message = "Hello"
for c in message:
print(c)
```
----
В цикле определяется переменную c, после оператора in в качестве перебираемого набора указана переменная message, которая хранит строку "Hello". В итоге цикл for будет перебираеть последовательно все символы из строки message и помещать их в переменную c. Блок самого цикла состоит из одной инструкции, которая выводит значение переменной с на консоль.
----
Цикл for также может иметь дополнительный блок else, который выполняется после завершения цикла:
```
message = "Hello"
for c in message:
print(c)
else:
print(f"Последний символ: {c}. Цикл завершен");
print("Работа программы завершена") # инструкция не имеет отступа, поэтому не относится к else
```
Стоит отметить, что блок else имеет доступ ко всем переменным, которые определены в цикле for.
---
## Range()
----
Итак, как работает функция Python под названием range? Простыми словами, range() позволяет вам генерировать ряд чисел в рамках заданного диапазона.
----
В зависимости от того, как много аргументов вы передаете функции, вы можете решить, где этот ряд чисел начнется и закончится, а также насколько велика разница будет между двумя числами.
----
```
for i in range(3, 16, 3):
quotient = i / 3
print(f"{i} делится на 3, результат {int(quotient)}.")
```
----
В этом цикле вы просто можете создать ряд чисел, кратных трем, так что вам не нужно вводить каждое из них лично.
----
Есть три способа вызова range():
* range(стоп) берет один аргумент
* range(старт, стоп) берет два аргумента
* range(старт, стоп, шаг) берет три аргумента
----
Вызывая range() с одним аргументом, вы получите ряд чисел, начинающихся с 0 и включающих каждое число до, но не включая число, которое вы обозначили как конечное (стоп).
----
Как это выглядит на практике:
```
for i in range(3):
print(i)
```
----
Вызывая range() с двумя аргументами, вам нужно решить не только, где ряд чисел должен остановиться, но и где он должен начаться, так что вам не придется начинать с нуля каждый раз.
Вы можете использовать range() для генерации ряда чисел, начиная с А до Б, используя диапазон (А, Б).
----
Попробуем вызывать range() с двумя аргументами:
```
for i in range(1, 8):
print(i)
```
----
Вызывая range() с тремя аргументами, вы можете выбрать не только то, где ряд чисел начнется и остановится, но также то, на сколько велика будет разница между одним числом и следующим. Если вы не задаете этот «шаг», то range() автоматически будет вести себя так, как если бы шаг был бы равен 1.
----
Обратите внимание: шаг может быть положительным, или отрицательным числом, но он не может равняться нулю:
```
for i in range(3, 16, 3):
quotient = i / 3
print(f"{i} делится на 3, результат {int(quotient)}.")
```
----
Если вы хотите выполнить инкрементацию, то вам нужно, чтобы шаг был положительным числом. Чтобы понять, что под этим имеется ввиду, введите следующий код:
```
for i in range(3, 100, 25):
print(i)
```
----
Вы получили ряд чисел, каждое из которых больше предыдущего на 25, т.е., на заданный вами шаг.
----
Если ваш шаг положительный — то вы двигаетесь по ряду увеличивающихся чисел, это называется инкрементация. Если ваш шаг отрицательный, то вы двигаетесь по ряду убывающих чисел, это называется декрементация. Это позволяет вам идти вспять.
----
В следующем примере ваш шаг будет -2. Это значит, что декрементация будет равна 2 для каждого цикла:
```
for i in range(10, -6, -2):
print(i)
```
---
## Вложенные циклы
----
Одни циклы внутри себя могут содержать другие циклы. Рассмотрим на примере вывода таблицы умножения:
```
for i in range(1,11):
for j in range(1,11):
print(i * j, end="\t")
j += 1
print("\n")
j = 1
i += 1
```
---
## Выход из цикла. break и continue
----
Для управления циклом мы можем использовать специальные операторы break и continue. Оператор break осуществляет выход из цикла. А оператор continue выполняет переход к следующей итерации цикла.
----
Оператор break может использоваться, если в цикле образуются условия, которые несовместимы с его дальнейшим выполнением.
----
Рассмотрим следующий пример:
```
for number in range(5):
if number == 3 : # если number = 3, выходим из цикла
break
print(f"number = {number}")
```
----
Здесь цикл for проверяет условие number < 5. И пока number не равно 5, предполагается, что значение number будет выводиться на консоль. Однако внутри цикла также проверяется другое условие: if number == 3. То есть, если значение number равно 3, то с помощью оператора break выходим из цикла.
----
В отличие от оператора break оператор continue выполняет переход к следующей итерации цикла без его завершения. Например, в предыдущем примере заменим break на continue:
```
for number in range(5):
if number == 3 : # если number = 3, выходим из цикла
continue
print(f"number = {number}")
```
---
## Random
----
Функция random() возвращает случайное число с плавающей точкой в промежутке от 0.0 до 1.0. Если же нам необходимо число из большего диапазона, скажем от 0 до 100, то мы можем соответственно умножить результат функции random на 100.
----
```
import random
number = random.random() # значение от 0.0 до 1.0
print(number)
number = random.random() * 100 # значение от 0.0 до 100.0
print(number)
```
----
Функция randint(min, max) возвращает случайное целое число в промежутке между двумя значениями min и max.
```
import random
number = random.randint(20, 35) # значение от 20 до 35
print(number)
```
----
Функция randrange() возвращает случайное целое число из определенного набора чисел. Она имеет три формы:
* randrange(stop)
* randrange(start, stop)
* randrange(start, stop, step)
----
```
import random
number = random.randrange(10) # значение от 0 до 10
print(number)
number = random.randrange(2, 10) # значение в диапазоне 2, 3, 4, 5, 6, 7, 8, 9
print(number)
number = random.randrange(2, 10, 2) # значение в диапазоне 2, 4, 6, 8
print(number)
```
---
## Задачи
----
1. Дано 10 целых чисел. Вычислите их сумму. Напишите программу, использующую наименьшее число переменных.
----
2. Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел `N`, затем вводится ровно `N` целых чисел. Какое наименьшее число переменных нужно для решения этой задачи?
----
3. По данному натуральному `n` вычислите сумму $1^3+2^3+3^3+…+n^3$.
----
4. Даны два целых числа `A` и `B` (при этом `A ≤ B`). Выведите все числа от `A` до `B` включительно.
----
5. Даны два целых числа `A` и `В`. Выведите все числа от `A` до `B` включительно, в порядке возрастания, если `A < B`, или в порядке убывания в противном случае.
----
6. Даны два целых числа `A` и `В`, `A>B`. Выведите все нечётные числа от `A` до `B` включительно, в порядке убывания. В этой задаче можно обойтись без инструкции `if`.
----
7. Дано `N` чисел: сначала вводится число `N`, затем вводится ровно `N` целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество. Вам нужно подсчитать количество чисел, равных нулю, а не количество цифр.
----
8. Факториалом числа `n` называется произведение `1⋅2⋅…⋅n`. Обозначение: `n!` По данному натуральному `n` вычислите значение `n!`. Пользоваться математической библиотекой `math` в этой задаче запрещено.
----
9. По данному натуральному `n` вычислите сумму `1!+2!+3!+...+n!` В решении этой задачи можно использовать только один цикл. Пользоваться математической библиотекой `math` в этой задаче запрещено.
----
10. Для настольной игры используются карточки с номерами от `1` до `N`. Одна карточка потерялась. Найдите ее, зная номера оставшихся карточек. Дано число `N`, далее `N − 1` номер оставшихся карточек (различные числа от `1` до `N`). Программа должна вывести номер потерянной карточки. Для самых умных: массивами и аналогичными структурами данных пользоваться нельзя.
----
11. По данному натуральному `n ≤ 9` выведите лесенку из `n` ступенек, `i`-я ступенька состоит из чисел от `1` до `i` без пробелов.