Модуль 10.1 (Выражения-генераторы). В этом занятии поговорим о выражениях-генераторах
, которые очень похожие на генераторы списков. Их основное отличие в том, что выражение заключается не в квадратных скобках, а в круглых.
Сколько раз можно итерироваться по значениям генератора?
Один
В переменной
d
хранится следующее выражение-генераторfrom random import randint d = (randint(1, 20) for i in range(7))Какие функции можно выполнять над переменной
d
?
sorted(d)
max(d)
min(d)
sum(d)
В переменной
d
хранится следующее выражение-генераторfrom random import randint d = (randint(1, 20) for i in range(7))Какие преобразования допустимо делать с переменной
d
?
set(d)
list(d)
tuple(d)
Какое значение будет храниться в переменной
b
после выполнения данного кода?d = (i**2 for i in range(1, 6)) a = list(d) b = tuple(d)
()
Какое значение будет храниться в переменной
b
после выполнения данного кода?d = (i**2 for i in range(1, 6)) a = max(d) b = min(d)
произойдет ошибка
Что выведет данная программа?
d = (i ** 2 for i in range(1, 6)) print(9 in d, 4 in d)
True False
Что выведет данная программа?
d = (i ** 2 for i in range(1, 6)) print(4 in d, 9 in d)
True True
Что выведет данная программа?
d = (i ** 2 for i in range(1, 6)) print(7 in d, 4 in d)
False False
Ниже представлен код, который вам нужно будет дописать.
В переменную
from_10_to_20
при помощи генератора-выражения сохраните последовательность от 10 до 20 включительноЗатем при помощи функции next выведите первые три элемента
И остается вывести оставшиеся элементы в цикле
# Создайте генератор from_10_to_20 = (i for i in range(10, 21)) # Распечатайте три первых значения print(next(from_10_to_20)) print(next(from_10_to_20)) print(next(from_10_to_20)) # выведите все оставшиеся for value in from_10_to_20: print(value)
Перед вами список
words
Необходимо сохранить в переменной
lens
генератор-выражение, который генерирует длины слов спискаwords
по порядку.Больше от вас в этой задаче ничего не требуется.
words = ['feel', 'graduate', 'movie', 'fashionable', 'bacon', 'drop', 'produce', 'acquisition', 'cheap', 'strength', 'master', 'perception', 'noise', 'strange', 'am'] lens = (len(i) for i in words) #создаем генератор который создает последовательность из длин слов из списка for i in lens: print(i)
Давайте напишем выражение-генератор, который будет генерировать кортеж состоящий из двух элементов: названия дня недели и номер дня в году.
За начало отсчета возьмем наш «любимый» 2022 год. Он начался в субботу, потом воскресенье, понедельник, вторник, …, пятница, суббота и далее по кругу и далее по кругу
Результат выражения-генератор сохраните в переменную
days
Названия дней недели должны совпадать с этими значениями:
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']Значит при первой итерации генератор должен вернуть кортеж
(1, 'Saturday')При второй итерации вернется значение
(2, 'Sunday')Ваша задача распечатать на удачу 77 первых дней 2022 года. Выводить на экран нужно сами кортежи и первые десять значений в выводе должны выглядеть вот так:
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы
import datetime
import types
start_date = datetime.date(2022, 1, 1)
def generate_days():
for i in range(1, 78):
yield (i, (start_date + datetime.timedelta(days=i-1)).strftime(‘%A’))
days = generate_days()
for day in days:
print(day)
if day[0] == 77:
break
assert isinstance(days, types.GeneratorType), ‘Вы не создали генератор в переменной days’