Содержание

Циклы

Содержание

Циклы

Циклы - основа любой автоматизации.

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

Цикл задаётся командой for (англ. для).

# Повтор команды в цикле
for i in range(5):
    print( 'растет в цикле: '+ str(i))

print('====')
print( 'Итого: {}'.format(i))
растет в цикле: 0
растет в цикле: 1
растет в цикле: 2
растет в цикле: 3
растет в цикле: 4
====
Итого: 4

В предыдущем блоке кода три команды print. Первая сдвинута вправо. Попробуйте сдвинуть также вторую и третью команды print, каждый раз выполняя код. Что означает смещение вправо после двоеточия?

for i in range(5):
    print( 'растет в цикле: '+ str(i))

    print('====')
print( 'Итого: {}'.format(i))
растет в цикле: 0
====
растет в цикле: 1
====
растет в цикле: 2
====
растет в цикле: 3
====
растет в цикле: 4
====
Итого: 4

Вывод: Цикл охватывает нижележащие команды до тех пор, пока код, который идет после двоеточия после for, сдвинут вправо.

Редактирование кода в ячейке сводится к тому, что

  1. Мы хотим что-то сделать.

  2. Мы делаем эту операцию.

  3. Сравниваем то, что получилось с тем, что мы хотели получить.

Если результат сошёлся с желаемым - идём дальше. Если нет, то исправляем ошибки, или возвращаем правки назад. Чтобы выполнить код и остаться в текущей ячейке используйте Ctrl-Enter. Чтобы вернуть назад сделанные изменения используйте Ctrl-Z - как в любом текстовом редакторе.

В цикле можно делать перебор составных структур - списков, которые задаются с помощью квадратных скобок с перечислением составных элементов через запятую.

spisok = [.1, -.2, 1, -1]
len(spisok) #длина
4
z=0
for element in spisok:
    print('прибавляем: {} + {}'.format(z,element))
    z += element
    
n = len(spisok)

print('====')
print( 'Сумма: {}'.format(z))
print( 'Среднее: {}'.format(z/n))
прибавляем: 0 + 0.1
прибавляем: 0.1 + -0.2
прибавляем: -0.1 + 1
прибавляем: 0.9 + -1
====
Сумма: -0.09999999999999998
Среднее: -0.024999999999999994

Проверьте себя, можете ли Вы объяснить,

  • что происходит в цикле?

  • сколько раз и какие команды выполнялись в цикле?

  • какие строки текста выведены какими командами print()?

  • почему итоговые значения именно такие?

Попробуйте изменить значения в списке. Как это скажется на результатах?

Попробуйте поменять оператор += на *=. Как будет правильно назвать итоговые значения, которые выводятся в конце цикла?

Справка

Если о предназначении команды print (англ. печатать) можно догадаться по названию, то команда range может вызвать вопросы. Если Вам в коде встречается незнакомая команда, то можно посмотреть справку.

С одной стороны range - это последовательность символов, а значит это переменная и мы можем присвоить этой переменной произвольное значение. С другой стороны, мы не задавали эту переменную - она задана изначально синтаксисом языка Python.

range
range

При попытке посмотреть «содержимое» этого объекта мы получаем тавтологию. Польза от этой переменной получается тогда, когда мы «вызываем» её, указав после нее скобки.

Функция - это программный объект, которые можно запустить на выполнение, указав в скобках определенный набор параметров (входящие аргументы функции). В результате вызова функция возвращает значение, которое можно присвоить какой-нибудь переменной или вывести на экран.

У каждой программной функции есть своя полезная функция, о которой можно прочитать в справке по этой функции.

range?
Init signature: range(self, /, *args, **kwargs)
Docstring:     
range(stop) -> range object
range(start, stop[, step]) -> range object

Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
These are exactly the valid indices for a list of 4 elements.
When step is given, it specifies the increment (or decrement).
Type:           type
Subclasses:     

Прочитайте справку по функции range(). Вот перевод на русский язык:

range(stop) -> объект range
range(start, stop[, step]) -> объект range

Возвращает объект, который производит последовательность целых чисел от start (включительно)
до stop (исключая) с заданным шагом. range(i, j) производит i, i+1, i+2, ..., j-1. 
start по умолчанию равен 0, а stop не указан! range(4) выдает 0, 1, 2, 3. 
Это в точности равно индексам списка из 4 элементов. 
Когда задан шаг, он определяет приращение (или убывание).

Из справки становится понятно, что квадратные скобки во второй строчке справки указывают, что третий аргумент step функции не обязателен.

Справку можно вызвать по месту, прямо в редакторе кода - надо поставить курсор после открывающей скобки функции и нажать Shift-Tab. Подробную справку можно получить, нажав на плюсик в окне справки или удерживая Shift дважды нажать на кнопку Tab.

Посмотрите самостоятельно справку по функции „len()“, с помощью которой мы смотрели длину списка.