2017-01-15 14 views
1
私は基本的にオンライン数学/コンピュータサイエンスの事である「プロジェクト・オイラー」と呼ばれる何かのために、このコードを書いている

のリンクがhereを見つけることができます:Pythonスクリプトがまったく動作しないのはなぜですか?

とにかく、私はである私のコードを実行するとPython 3.5では、カーソルビットを点滅させる以外はシェル内で何もしません。ここ は、問題のコードです:

`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万を超えていないフィボナッチ数列の項を考慮することにより

です偶数の項。

コードはリストに4百万までも、フィボナッチ数を追加し、完全に質問に答えるでしょう、それらの合計を印刷するためのものですが、動作するようには思えません。

+0

これを行うように指示しても、何も出力されません。関数 'fib()'(400万回)を呼び出すだけで、未使用の変数を設定するだけです。 –

+0

ところで:あなたは論理的な結合であり、 "連結"コマンドではない 'と'キーワードについて間違っているようです。 –

+0

正直なところ、 "if"、 "and"キーワードを誤って使用していて、あなたのロジックがわかりにくい場合は、最初にフィボナッチを書く方法を研究した上で書き直したいと思うかもしれません。 – Xlee

答えて

0

あなたがここに無限ループ作成しました:「truthyであり、bはtruthyであり、cが4000000未満である間」、これは常にTrueので、あなたのwhileループの意志になります。これは、に変換

while a and b and c < 4000000: 

を決して終わらない。私が「真実」を意味するのは:bool(value) return True?もしそうなら、valueは "真実"です。したがって、1,'hello'[]などは真実であり、0,False[]などはありません(「偽」です)。私はあなた自身の問題を解決することにより多くの利益を得ることができるので、あなたのすべての論理についてコメントするつもりはありません。

while a < 4000000 and b < 4000000 and c < 4000000: 
:あなたは ab、および cはあなたがこれを行うことができるよりも、 4000000より すべて以下であることを確認したい場合は

  1. :しかし、ここであなたが剥がれ取得する必要がありますいくつかのヒントがあります

    以上簡潔に:

    while all(i < 4000000 for i in [a, b, c]): 
    
  2. ないクレアのためには、無限ループの場合、プログラムのある時点でa,b、またはcのいずれかがその値を犯すことによって4000000より大きくなるようにする必要があります。あなたは内ab、およびcに行う数学はあなたのfib()関数は、その関数に対してローカルな3つのaと呼ばれる変数、b、およびcを操作します。 ab、およびcの値を変更しても、その機能のは変更されません。

+0

非常にありがとう@elethan、私は間違いなくアカウントに両方を取る! –

関連する問題