Вот мой код для генерации значений в последовательности fibonnacci ниже 10 000 000.
3 fibs = [1,1]
4 while((x = fibs[-1] + fibs[-2]) <= 10000000):
5 fibs.append(x)
Я попытался выполнить присвоение x в стиле x в условии цикла while. К сожалению, python сказал мне, что это синтаксическая ошибка. Какое самое простое решение?
В Python назначение не является выражением и поэтому не имеет значения.
Простейшим решением является выполнение задания в первой части цикла:
fibs=[1,1]
while fibs[-1] <= 10000000:
fibs.append(fibs[-1] + fibs[-2])
В принципе:
fibs = [1]
x = 1
while(x <= 10000000):
fibs.append(x)
# It is not possible for "fibs" not to have
# at least two elements by now
x = fibs[-1] + fibs[-2]
(На самом деле одна из целей дизайна Python заключалась в том, чтобы избежать смешивания выражений и назначений, таких как C, поэтому нет x++
, x--
, который также является полу-часто задаваемым вопросом.)
Причина не допускать назначение в выражениях Python является обычной, труднодоступной ошибкой на других языках, вызванной этой конструкцией.
Пожалуйста, проверьте http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
from functools import partial
from itertools import imap, islice, takewhile
import operator
fibs = [1, 1]
for x in takewhile(partial(operator.ge, 10000000),
imap(operator.add, fibs, islice(fibs, 1, None))):
fibs.append(x)
Ой, подождите, вы сказали "простейший"? Тогда Nevermind.