为什么我的Python脚本根本不起作用?

时间:2017-01-15 16:49:38

标签: python-3.x loops fibonacci

我正在编写这个代码,用于称为“项目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数字添加到列表中,然后打印它们的总和,这将完美地回答问题,但它似乎无法正常工作。

1 个答案:

答案 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'[]等是真实的,0False[]等不是(他们是'假的&#34;)。我不会评论你的所有逻辑,因为你将从自己解决问题中获益更多。但是,这里有一些技巧可以让你解开:

  1. 如果您想检查abc是否所有小于4000000,那么您可以这样做:

    while a < 4000000 and b < 4000000 and c < 4000000:
    

    或更简洁:

    while all(i < 4000000 for i in [a, b, c]):
    
  2. 为了不创建无限循环,您需要确保abc在某个时刻的某个点上大于4000000你的程序通过控制他们的价值观。您在a函数内bcfib() 内进行的数学运算只能处理三个名为a的变量,{ {1}}和b是该函数的本地;它不会更改该函数的cab 之外的值。