Проблемы с лямбда-выражением в python - PullRequest
0 голосов
/ 16 марта 2020

У меня следующий вопрос к решению проблемы

Пожалуйста, напишите программу, использующую генератор, для печати четных чисел от 0 до n в виде через запятую, когда n вводится через консоль.

Пример. Если в качестве входных данных для программы задано следующее n: 10 Тогда выходные данные программы должны быть: 0,2,4,6,8,10.

И ниже мой ответ

n=int(input("enter the number of even numbers needed:"))
eve=''
st=(lambda x:(for i in range(0,x))[(str(i)) if i%2==0 else (",")])(n)

Однако у меня проблема с третьей строкой, в которой есть лямбда

1 Ответ

0 голосов
/ 17 марта 2020

В полной мере используйте возможности Python 3 для создания генератора с использованием синтаксиса выражений генератора, а также выполняйте пошаговое добавление четных чисел к третьему параметру range().

Это было бы намного проще:

>>> n = 12
>>> 
>>> fn = lambda x: (f"{i}," for i in range(0, x + 1, 2))
>>> 
>>> ''.join(list(fn(n)))[:-1] + '.'
'0,2,4,6,8,10,12.'
>>> 
>>> fn(10)
<generator object <lambda>.<locals>.<genexpr> at 0x107f67660>

То, что похоже на понимание кортежей, на самом деле называется «генератором выражений». Обратите внимание, что в последней строке над интерпретатором указывается, что тип, возвращаемый лямбда-выражением, действительно является генератором.

Еще короче, вы можете сделать это следующим образом:

>>> fn = lambda x: ','.join(  (f"{i}" for i in range(0, x + 1, 2))  ) + '.'
>>> 
>>> fn(n)
'0,2,4,6,8,10,12.'
>>> 

Похоже Возможно, вы были на правильном пути в своем посте с вопросом.

Функция, которая использует ключевое слово yield, также создает генератор. Так что другой плакат прав в этом отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...