我正在为“项目Euler”编写代码,这基本上是在线上的数学/计算机科学,可以在这里找到其链接:
因此,无论如何,当我运行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))'
我想回答的问题是
通过考虑斐波那契数列中值不超过400万的项,找到偶值项的总和。
该代码旨在将甚至多达400万的斐波那契数加到列表中,然后打印它们的总和,这将完美地回答该问题,但似乎不起作用。
您在此处创建了一个无限循环:
while a and b and c < 4000000:
这表示“当a是真实的,而b是真实的,而c小于4000000”时,它将始终True
如此,因此while循环将永远不会终止。我所说的“真实”是指:bool(value)
回报True
吗?如果是这样,那value
就是“真实的”。所以1
,'hello'
,[]
等等,都是truthy,和0
,False
,[]
,等等,都没有(他们是“falsey”)。我不会评论您的所有逻辑,因为您将从自己解决问题中受益更多。但是,这里有一些技巧可以使您摆脱困境:
如果要检查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
将罪证它们的值大于400万在你的程序的一些点。你做数学题a
,b
和c
里面的fib()
函数只操纵三个变量叫a
,b
以及c
那些局部的功能; 它不会改变的值a
,b
和c
外面那个功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句