Python

Напишите пожалуйста скрипт на языке Python 3

написать скрипт, который содержит генератор списка нечетных чисел от 1 до 100. С комментариями
 # Создаем пустой список 
odd_numbers = []

# Используем цикл для генерации нечетных чисел от 1 до 100 и добавления их в список. А двойка отвечает за то что каждый второй элемень будет пропущен)
for i in range(1, 101, 2):
odd_numbers.append(i)

# Печатаем список
print(odd_numbers)
Администратор Интернет
Администратор Интернет
785
Лучший ответ
Прямо генератор нужен, или это просто для красного словца, а на самом деле - обычный школьный цикл?
С генератором это выглядит так:
 def oddgen(maxn):
for n in range(1, (maxn + 1) | 1, 2): yield n

# использовать так:
for k in oddgen(100): print(k)
# или так:
print(*oddgen(100), sep = '\n')
Можно генератор записать проще:
 def oddgen(maxn): return range(1, (maxn + 1) | 1, 2) 
Или даже так:
 oddgen = lambda maxn: range(1, (maxn + 1) | 1, 2) 

Пояснения:
 (maxn + 1) | 1  - это вычисление ближайшего нечётного числа, большего maxn
(нужно как верхняя граница цикла)
range(start, end, step) - генератор чисел, начиная со start, не доходя до end, и с шагом step
(для нечётных чисел, естественным образом, используем шаг 2)
Первый вариант функции в цикле обходит всё множество нечётных чисел и возвращает их в возрастающем порядке. Но поскольку это - то же самое, что делает range с нужными параметрами, второй вариант просто возвращает генератор, созданный range. Третий вариант делает то же самое, что и второй.

И естественно, можно указать в месте использования непосредственно range, без промежуточных функций:
 # использовать так:
for k in range(1, (maxn + 1) | 1, 2): print(k)
# или так:
print(*range(1, (maxn + 1) | 1, 2), sep = '\n')

И пара комментариев на тему решений, приведённых ниже:
1) Три из четырёх решений бегают по всему диапазону чисел, хотя заведомо нужно только каждое второе. Вместо того, чтобы передать шаг в range, они крутят лишние итерации. Так делать не надо.
2) Два из четырёх решений материализуют список, в который складывают все сгенерированные значения, хотя, единственное, что с ними надо сделать - это напечатать, а хранить их не требуется. Так делать тоже не надо, память - не резиновая.

Казалось бы, это мелочи, что там - лишние 50 чисел пробежать или лишние 49 сохранить, но из таких мелочей потом вырастают быдлосайты, у которых открываешь первую страничку - и броузер уже весит в памяти полгига и жёстко тупит. Он выполняет миллионы лишних вычислений и хранит сотни мегабайт лишних данных, потому что так реализованы ПТУшниками алгоритмы на этом сайте.
 # создаем функцию-генератор 
def odd_numbers():
# итерируемся по числам от 1 до 100
for num in range(1, 101):
# проверяем, является ли число нечетным
if num % 2 != 0:
# если да, то возвращаем его в качестве результата
yield num

# создаем список из нечетных чисел, используя нашу функцию-генератор
odd_nums_list = list(odd_numbers())

# выводим результат
print(odd_nums_list)
Комментарии к коду:

Сначала мы создаем функцию-генератор с именем odd_numbers().
Затем мы используем оператор for для итерации по числам от 1 до 100.
Внутри цикла мы проверяем, является ли текущее число нечетным, используя оператор % (остаток от деления).
Если число нечетное, мы используем оператор yield для возврата его в качестве результата функции-генератора.
В основном блоке кода мы вызываем функцию-генератор и преобразуем результат в список, используя встроенную функцию list().
Затем мы выводим список нечетных чисел на экран с помощью функции print().
Araik Manukyan
Araik Manukyan
56 728
Александр Бобрешов Здесь надо учредить особые призы. За самый дебильный алгоритм, например.
Вот на кой ляд ты бежить по ВСЕМ числам, когда тебе нужно только каждое второе?
# Создаем функцию-генератор
def odd_numbers():
# Используем цикл for для перебора чисел от 1 до 100
for i in range(1, 101):
# Проверяем, является ли число нечетным
if i % 2 != 0:
# Если число нечетное, то возвращаем его
yield i

# Создаем объект-генератор
numbers = odd_numbers()

# Используем цикл for для вывода всех нечетных чисел от 1 до 100
for number in numbers:
print(number)
Александр Бобрешов Нейросеть берёт себе в базу самые тупые образцы кода, которые только можно найти.
a = [i for i in range(1,100) if not i % 2 == 0] #если нужен именно ГЕНЕРАТОР

for i in range(1,100): #если нужен просто ЦИКЛ
if not i % 2 == 0:
print(i)
Александр Бобрешов Первый вариант - не генератор, а список.