2016-08-09 18 views
0

だから私はこのコードを持っている:なぜこのif文は常にTrueを返しますか?

steps = 0 
biggestSteps = 0 
startY = 2 
y = startY 

def process(x): 
    global steps 
    steps = steps + 1 
    if x % 2 == 0: 
     return x/2 
    else: 
     return (3*x)+1 

while True: 
    y = process(y) 
    if y == 1 or y == 4: 
     if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 

私はこのコードを実行しようとすると、

if steps > biggestSteps: 

がalawysはTrueを返します、そして、それは番号ごと

print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps") 

、その意志私は確かに欲しくない。

数値が最大ステップ数に達したときにのみ印刷するようにするにはどうすればよいですか?

EDIT:

私は、whileループで

global 

を追加してみました(かなり確信して、それは何も変化しない)

steps = 0 
biggestSteps = 0 
startY = 2 
y = startY 

def process(x): 
    global steps 
    steps = steps + 1 
    if x % 2 == 0: 
     return x/2 
    else: 
     return (3*x)+1 

while True: 
    global steps 
    global biggestSteps 
    global startY 
    global y 
    y = process(y) 
    if y == 1 or y == 4: 
     if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(biggestSteps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 
+0

あなたはCollat​​z推測ビデオを見ましたか? :) – DeepSpace

+0

おそらく、 'while'の中で' global steps'を使うつもりです。 – DeepSpace

+0

ええ。私は実際にProcessing.pyで作業していましたが、私はそれを偶発的に閉じてしまったので、通常のPythonでやってみました。私は基本的にコピーしたコードをコピーします。それがなぜ機能しないのか分かりません。 – Zobody

答えて

0

私はコピーか何かするときIDLEがミスをしたと思います、なぜならin

if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(biggestSteps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 

   startY += 1 
       y = startY 

このif文にはコードの一部を入れてはいけません。

関連する問題