Введение в Python #3: циклы

Введение в Python #3: циклы

Vladislav Z - создатель канала x[code] & fullstack dev Python |

Привет будущие коллеги! В этом уроке мы продолжаем работать с алгоритмами и основными инструментами которые помогают нам упростить некоторые задачи в программировании, а так же сделать наши программы более наполненными с точки зрения смысла. Во втором уроке мы прошли с вами условные конструкции, как вы уже поняли условные конструкции помогают нам сделать более ответвленной нашу программу, представляя условия конечному пользователю. Какая еще есть незаменимая конструкция, которая будет нас постоянно выручать? Давайте смоделируем ситуацию, у нас есть список гостей из тысячи человек, нам нужно из нашей таблицы вытянуть каждое поле и проверить есть ли у этого человека, допустим номер телефона.. и как нам решать эту задачу? Неужели придется перебирать каждое поле отдельно? Вот еще пример, допустим у какой-то друг фотограф, хочет отсортировать все свои фотографии, и разбить их папкам дат и времени? Ох сложно будет брать каждое фото, смотреть на дату и перемещать ее в другую папку, а еще есть риск человеческого фактора, что спустя трех часов такой работы, есть вероятность, что какие-то файлы полетят не в ту папку. Что есть схожее в этих двух процессах? Правильно, повторение определенных действий N количество раз. Надеюсь основной смысл, вам понятен, теперь рассмотрим это всё более детально.

Цикл - это управляющая конструкция в высокоуровневых языках программирования предназначенная для многократного выполнения какого-то участка кода при определенных условиях. Зачастую это звучит так: выполняй эти команды пока ЭТО истинно или выполни эти действия N количество раз. Есть несколько классических типов функций:

  • цикл с предусловием
  • цикл с постусловием
  • цикл со счетчиком

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

Цикл со счётчиком используется очень часто, для повторений определенных действий конкретное количество раз, при этом доступен счётчик - номер текущей итерации.

while условие:
команды

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

Блок команд в Python не может быть пустым, потому если такая необходимость возникает мы должны воспользоваться оператором pass, который не делает ничего.

Блок команд выполняется до тех пор пока условие истинно, если условие изначально ложно, то команды не выполняться ни разу.

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

while True:
response = input(’Введите команду’)
if response == ’exit’:
break
else:
print("Вы ввели: ", response)

Цикл будет выполняться пока мы не введем exit с клавиатуры, а иначе будет выполняться функция print.

Так же бывают случаи когда необходимо завершить текущую итерацию(шаг) и перейти сразу к следующей вне зависимости, оттого что у нас будет происходить дальше, например:

x = 0
while x < 10:
x += 1
if x == 5:
continue
print("Этот текст вы никогда не увидите :) ")
print(’Текущее число равно’, x)

Что у нас тут происходит: сначала мы объявляем x = 0 чтобы мы могли составить условие в цикле while, после чего мы используем такую команду так как инкремент x +=1, что равносильно x = x + 1, после этого мы создали условие где используем команда continue если текущее значение x будет равно 5. Попробуйте эту программу запустить у себя.

Цикл for - это цикл в котором переменная - счётчик итераций(повторений) изменяет своё значение от начального до конечного с определенным шагом.

  • for переменная in range(конечное_значение):
    операторы
  • for переменная in range(начальное_значение, конечное_значение):
    операторы
  • for переменная in range(начальное_значение, конечное_значение, шаг):
    операторы

Начальное значение включается в диапазон, конечное – нет, то если начальное значение будет 1, а конечное 10, то вывод счётчика будет такой 1, 2, 3, 4, 5, 6, 7, 8, 9. Проще говоря конечное число не включительно. Такое правило нужно запомнить, иначе могут возникнуть недопонимания в некоторых ситуациях. Пример:

for x in range(10):
print(x)

Попробуйте запустить у себя на компьютере.

Если вы обратили внимание, у нас принимается еще значение ШАГ, которое собственное и определяет ШАГ для нашего обхода, проще это показать чем объяснять:

for x in range(1,10, 2):
print(x)

Результатом будет:

1
3
5
7
9

Удобно правда?


Так же допускается использование вложенности циклов, когда нужно построить более сложную структуру для перебора, например:

for i in range(10):
for j in range(10):
print("*", end='')
print()

Попробуйте ввести этот код, и увидите интересный результат, не бойтесь изменять значения, чтобы понять как это работает.

Вопросики:

  • Что такое цикл?
  • Какие типы циклов вы знаете?
  • Какие типы циклов существуют в языке Python?
  • Охарактеризуйте цикл с предусловием. Как реализовать его на Python?
  • Охарактеризуйте цикл со счётчиком. Как реализовать его на Python?
  • Как завершить выполнение цикла из его тела?
  • Как пропустить итерацию в цикле?
  • Что такое вложенные циклы?

Задашки:

  1. Создайте программу которая нарисует на экране прямоугольник из звездочек, а потом квадрат.
  2. Даны числа a и b (a<b). Выведете сумму всех чисел от a до b. Включительно.
    Например a = 10, b = 100
  3. Вспомним математику? Факториал числа n называется n! = 1 * 2 * 3 * ... * n. Создайте программу которая вычисляет факториал введенного пользователем числа.
  4. Используя вложенные циклы и функции print("*", end=''), print(" ", end="") и print() выведите на экран прямоугольный треугольник. Вот так:

    *
    **
    ***
    ****
    *****
    ******
    *******
    ********


Что-то не понятно? Ментор по программированию на Python: https://t.me/xdev_monad


Report Page