2017-01-15 105 views
1

我寫的東西叫做「項目歐拉」這個代碼基本上是一個在線數學/計算機科學的東西,鏈接,都可以找到here爲什麼我的Python腳本根本不工作?

所以無論如何,當我運行我的代碼是在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))' 

我試圖回答的問題是

通過考慮其值不超過4萬元斐波那契序列的條款,發現的總和偶數項。

該代碼旨在甚至將斐波納契數字增加到400萬列表,然後打印它們的總和,它們可以完美地回答問題,但它似乎不起作用。

+0

它不輸出任何內容,因爲您告訴它這樣做。你只能調用函數'fib()'(可能)400萬次,該函數只會設置一些未使用的變量。 –

+0

順便說一句:你似乎有一個關於'和'關鍵字的誤解,這是一個邏輯連接,而不是「連接」命令。 –

+0

老實說,你在這裏濫用「如果」,「和」關鍵字,而你的邏輯有點模糊,你可能想在研究如何編寫斐波那契算法之後重寫它。 – Xlee

回答

0

你已經在這裏創造一個無限循環:

while a and b and c < 4000000: 

這相當於「同時是truthy和b是truthy和c小於400萬」,這將永遠是True所以你的while循環永不終止。我的意思是「truthy」是:bool(value)返回True?如果是這樣,那麼value是「truthy」。因此,1,'hello',[]等是真實的,並且0,False,[]等等不是(它們是「假的」)。我不會評論你的所有邏輯,因爲你會從你自己解決問題中獲益更多。然而,這裏是應該讓你脫膠的一些技巧:如果你想檢查abc4000000所有,比你能做到這一點

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

    或更簡潔地:

    while all(i < 4000000 for i in [a, b, c]): 
    
  2. 爲了不CREA te無限循環,您需要確保a,bc在您的程序中的某個點通過引用其值而大於4000000。你ab做的數學和cfib()功能只操縱三個變量稱爲ab,並c是局部的功能;它不會更改該函數的以外的a,bc的值。

+0

非常感謝@elethan,我一定會考慮到這兩點! –

相關問題