我正在编写这个代码,用于称为“项目Euler'这基本上是在线数学/计算机科学的东西,其中的链接可以找到here:
所以无论如何,当我运行Python 3.5中的代码时,除了光标位闪烁之外,它在shell中没有做任何事情。 以下是有问题的代码:
`mylist=[]
a=1
b=2
c=a+b
def fib():
a=1
b=2
c=a+b
a=b
b=c
c=a+b
if a%2==0:
mylist.append(a) and print(a)
elif b%2==0:
mylist.append(b) and print(b)
elif c%2==0:
mylist.append(c) and print(c)
else:
print(end='')
while a and b and c<4000000:
fib()
print(sum(mylist))'
我试图回答的问题是
通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。
该代码的目的是将最多400万的Fibonacci数字添加到列表中,然后打印它们的总和,这将完美地回答问题,但它似乎无法正常工作。
答案 0 :(得分:0)
你在这里创建了一个无限循环:
while a and b and c < 4000000:
这转换为&#34;而a是真实的,b是真实的,c小于4000000&#34;,这将永远是True
所以你的while循环永远不会终止。我的意思是&#34; truthy&#34;是:bool(value)
返回True
吗?如果是这样,那么value
就是&#34; truthy&#34;。因此,1
,'hello'
,[]
等是真实的,0
,False
,[]
等不是(他们是'假的&#34;)。我不会评论你的所有逻辑,因为你将从自己解决问题中获益更多。但是,这里有一些技巧可以让你解开:
如果您想检查a
,b
和c
是否所有小于4000000
,那么您可以这样做:
while a < 4000000 and b < 4000000 and c < 4000000:
或更简洁:
while all(i < 4000000 for i in [a, b, c]):
为了不创建无限循环,您需要确保a
,b
或c
在某个时刻的某个点上大于4000000你的程序通过控制他们的价值观。您在a
函数内b
,c
和fib()
内进行的数学运算只能处理三个名为a
的变量,{ {1}}和b
是该函数的本地;它不会更改该函数的c
,a
和b
之外的值。