При написании программ часто возникает потребность делать одно и то же действие для нескольких объектов. Например, сохранить 5 пользователей:
user1.save() user2.save() user3.save() user4.save() user5.save()
Кода пока не очень много, но что будет, когда пользователей будет 20? А что если нужно обработать 3 миллиона пользователей вашего сайта? Помогут циклы.
Цикл по списку
Цикл — это запуск одного и того же кода для каждого элемента в списке. Вот как выглядит пример выше с использованием списка и циклов:
users = [user1, user2, user3, user4, user5] for user in users: user.save()
Каждый элемент списка users по очереди подставится в переменную user и для него запустится код с отступом.
Что, всё ещё копипастить пользователей в список? Нет, чаще всего такое не требуется и код выглядит так:
users = get_users_from_database() # возвращает список всех пользователей for user in users: user.do_something() # работа с каждым пользователем по очереди user.save()
Снова, каждый пользователь по очереди попадёт в переменную user , у него вызовется метод .do_something() , а затем метод .save() .
4 совета как ЛУЧШЕ писать циклы For на Python
Цикл по словарю
Словарь очень легко можно превратить в 2 списка:
capitals = «Russia»: «Moscow», «England»: «London», «China»: «Beijing», «Italy»: «Rome» >
Первый список — ключи словаря (первые элементы в парах):
print(capitals.keys()) # [‘Russia’, ‘England’, ‘China’, ‘Italy’]
Второй список — значения (вторые элементы в парах):
print(capitals.values()) # [‘Moscow’, ‘London’, ‘Beijing’, ‘Rome’]
По умолчанию, если передать в for словарь, он начнёт перебирать ключи:
for country in capitals: print(country) # Russia # England # China # Italy
Но так же через ключи словаря можно добраться и до значений:
for country in capitals: capital = capitals[country] print(«столица <> это <>».format(country,capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome
В Python есть ещё один способ добраться до значений словаря, использовать .items() . Этот метод превращает словарь в список кортежей:
print(capitals) # # «Russia»: «Moscow», # «England»: «London», # «China»: «Beijing», # «Italy»: «Rome» # > print(capitals.items()) # [ # (‘Russia’, ‘Moscow’), # (‘England’, ‘London’), # (‘China’, ‘Beijing’), # (‘Italy’, ‘Rome’) # ]
И теперь цикл сможет итерироваться сразу по двум переменным:
for country, capital in capitals.items(): print(«столица <> это <>».format(country, capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome
Выполнить код несколько раз
Что, если нужно выполнить код заранее известное количество раз? например, сгенерировать 10 случайных чисел и вывести на экран? По какому такому списку мне перебиать элементы?
Python. Вложенный цикл for
В таком случаевыручает функция range() .
Что она делает проще показать на примерах:
- range(5) — вернёт список из 5 элементов, начинаяс нуля: [0, 1, 2, 3, 4]
- range(2,10) — вернёт список из элементов от 2 до 10: [2, 3, 4, 5, 6, 7, 8, 9]
- range(2,10,3) — вернёт список из каждого третьего элемента от 2 до 10: [2, 5, 8]
Теперь, научившись генерировать списки нужной длины, можно сгенерировать 10 случайных чисел:
import random for number in range(10): print(random.randint(1,100))
В терминал выведется 10 случайных чисел от 1 до 100. Работает так же, как и ранее: range(10) — это список с числами от 0 до 9. Они по очереди подставятся в переменную number , но ни на что не повлияют, т.к. в коде «внутри for » переменная number не используется.
Строка — тоже “список”
Python запросто переводит одни типы данных в другие. Он может притвориться, что строка — это список из её символов:
text = «Девман» for letter in text: print(letter) # Д # е # в # м # а # н
Можно превратить строку в список более явно с помощью функции list() :
text = «Девман» my_list = list(text) print(my_list) # [‘Д’, ‘е’, ‘в’, ‘м’, ‘а’, ‘н’]
Что дальше
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Источник: dvmn.org
For Python. Циклы For
Основы
Автор Иван Душенко На чтение 11 мин Просмотров 6.8к. Опубликовано 18.10.2021
Одним из важнейших компонентов алгоритмического мышления, а значит, и языков программирования является цикл. Вы будете сталкиваться с ними множество раз в своей работе. С одним из видов циклов мы познакомим Вас в этом уроке.
Понятие циклов
Вы ежедневно сталкиваетесь с циклами в своей повседневной жизни. Это повторяющиеся однотипные события. К примеру, походы в школу. Весь цикл – это повторение походов в школу, один поход – это итерация.
У итерации есть «тело»: проснуться, умыться, одеться, почистить зубы, позавтракать, собрать портфель, дойти до школы и т. д. Итерация может прерваться – ученик почувствовал себя плохо и ушёл с уроков. Весь цикл тоже может быть прерван: ученик перешёл на домашнее обучение. В цикл могут быть вложены другие циклы: внутри итерации «поход в школу» есть цикл «посещение уроков».
Всё это есть и в программировании, в частности, в языке Python. В Питоне есть два вида циклов: for и while.
Базовый синтаксис
Цикл for в Пайтон используется для работы с последовательностями или если число итераций известно заранее. Синтаксис выглядит следующим образом:
Источник: pythoninfo.ru
Оператор цикла while
На этом занятии начнем знакомиться с еще одним ключевым элементом компьютерных программ – циклами. Вначале, давайте я на простом примере покажу, о чем идет речь. Представим, что нам нужно вычислить сумму целых чисел от 1 до N. Причем, N может быть сколько угодно большой: тысяча, миллион и так далее.
Понятно, что мы не можем здесь просто записать операторы сложения чисел друг за другом для вычисления этой последовательности. Тем более, что на момент написания программы, N может быть неизвестна. Вот в таких ситуациях нам на помощь, как раз, и приходят циклы.
Циклы позволяют реализовывать некие повторяющиеся действия. Например, предположим, что маленькие панды прыгают с горки в течение часа, пока мама-панда не позовет всех к столу – кушать. На уровне текста это можно записать, так:
цикл (пока не прошел час):
прыгаем с горки
То есть, пока истинно условие, цикл работает, как только условие становится ложным – прошел час, цикл завершается. Ровно так работает цикл while, о котором и пойдет речь на нашем занятии. Он имеет, следующее определение (синтаксис):
Вначале записывается ключевое слово while, затем, условие работы цикла, ставится двоеточие для определения блока операторов, работающих внутри этого цикла. Такой блок еще называют телом цикла, а ключевое слово while с условием – заголовком цикла.
Обратите внимание на форматирование. Здесь также, как и в условных операторах, набор операторов внутри тела цикла должны иметь одинаковые отступы относительно ключевого слова while.
Давайте вернемся к исходной задаче – вычисления суммы чисел от 1 до N и посмотрим, как здесь нам поможет цикл while. Вначале определим три вспомогательные переменные: N – значение последнего слагаемого; s – для хранения вычисленной суммы (начальное значение 0); i – значение текущего слагаемого (начинается с 1):
N = 1000 s = 0 i = 1
Далее, так как сумму нужно вычислять, пока слагаемое i не достигнет значения N, то условие цикла можно определить, следующим образом:
while i N:
А внутри цикла будем выполнять следующие действия:
s += i i += 1
Вначале i равна 1 и эта единица прибавляется к сумме s. После чего i увеличивается на 1 и становится равной 2. Затем, выполняется проверка условия цикла. Пока оно у нас истинно, поэтому снова попадаем внутрь тела цикла и к s прибавляется уже значение 2, а i опять увеличиваем на 1 и оно становится равным 3. И так до тех пор пока i не станет больше N. К этому моменты мы просуммируем все числа и результат будет храниться в переменной s. Вот принцип работы циклов, причем, во всех языках программирования, не только в Python.
Также однократное выполнение тела цикла в программировании называют итерацией. Я буду часто использовать этот термин, поэтому привел его, чтобы вы меня правильно понимали.
Давайте реализуем теперь эту программу на Python и посмотрим как она сработает.
Возможно, у вас возник вопрос: а какие условия можно прописывать в циклах? В действительности, все те же самые, что и в условных операторах. В том числе и составные. Например, давайте будем вычислять сумму пока не дойдем до слагаемого N или до значения 50. Так как цикл работает, пока истинно условие, то его следует записать, так:
while i N and i 50: .
Смотрите, мы здесь указали делать цикл пока i меньше или равна N и меньше или равна 50. Если хотя бы одно из этих подусловий окажется ложным, то и все составное условие также станет ложным и цикл завершится. В результате, i достигнет или N или 50. Вот это нужно хорошо себе представлять: в циклах прописываются условия их работы, а не завершения.
Используя этот же цикл, мы легко можем поменять условие задачи и вычислить сумму чисел, которые меняются через один:
Для этого достаточно счетчик i увеличивать не на 1, а сразу на два:
i += 2
При этом, условие цикла можно оставить прежним. Он завершится, как только i превысит N или 50. Здесь уже нет гарантии, что последнее слагаемое будет именно N или 50, но нам это и не нужно, мы лишь указываем завершить цикл, когда превысим одно из этих значений.
Конечно, внутри тела цикла можно записывать любые операторы, в том числе и функцию print(). Давайте, например, отобразим в консоли цифры от 0 до 9:
i = 0 while i 10: print(i) i += 1
Если нам нужно реализовать убывающую последовательность чисел, например:
то это делается аналогично, только с уменьшающимся счетчиком:
N = -10 i = -1 while i >= N: print(i) i -= 1
Вообще, счетчик в цикле можно менять произвольным образом, например, умножая на два:
i *= 2
Здесь нет никаких ограничений.
В заключение этого занятия приведу еще пару примеров с оператором цикла while. Предположим, что пользователь вводит пароль, до тех пор, пока не введет верно. Это можно сделать, следующим образом:
pass_true = ‘password’ ps = » while ps != pass_true: ps = input(«Введите пароль: «) print(«Вход в систему осуществлен»)
Вначале мы задаем пароль для проверки, затем, переменную ps, которая хранит введенный пользователем пароль и делаем цикл, пока пароли не совпадают. Обратите внимание, условие цикла – пока пароли не совпадают. Опять же, всегда следует помнить, что мы прописываем условие работы, а не остановки цикла. Поэтому здесь нам нужно проверять на несовпадение паролей и запрашивать у пользователя пароль, пока они не совпадут.
Наконец, внутри цикла while можно прописывать, например, и условные операторы. Давайте выведем все числа, кратные 3, которые нам встретятся при переборе целых значений от 1 до N:
N = 20 i = 1 while i N: if i % 3 == 0: print(i) i += 1
Как видите, все достаточно просто и очевидно.
Здесь главное не забывать о правильном форматировании текста программы: функция print() находится внутри условия if, поэтому перед ней необходимы отступы. А сам блок условия имеет отступы относительно оператора while. Так определяются вложенные блоки операторов в языке Python. И об этом всегда следует помнить.
На этом мы завершим первое знакомство с оператором цикла while. На следующем уроке продолжим эту тему. А для закрепления текущего материала не забудьте выполнить несколько практических заданий. До встречи на следующем уроке.
Источник: proproprogs.ru