这是我的代码,用于在低于10,000,000的fibonnacci序列中生成值。
3 fibs = [1,1]
4 while((x = fibs[-1] + fibs[-2]) <= 10000000):
5 fibs.append(x)
我尝试在while循环的条件下进行x样式的C样式赋值。不幸的是,python告诉我这是一个语法错误。什么是最简单的解决方案?
答案 0 :(得分:9)
In Python, assignment is not an expression, and therefore has no value.
最简单的解决方案是在循环的第一部分进行赋值:
fibs=[1,1]
while fibs[-1] <= 10000000:
fibs.append(fibs[-1] + fibs[-2])
答案 1 :(得分:3)
基本上:
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--
,这也是一个半常见问题解答。 )
答案 2 :(得分:2)
不允许在Python表达式中赋值的原因是由此构造引起的其他语言中常见的,难以发现的错误。
请检查 http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
答案 3 :(得分:1)
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)
等等,你说“最简单”?没关系。