2017-05-16 6 views
0

私はPythonを学び始めたばかりで、簡単なCollat​​z推測プログラムはまずは楽しいプロジェクトになると思いました。アイデアは、すべてのステップを印刷し、続いて実行されたステップの総数を印刷することです。Pythonの無限ループですが、1が目標値の場合のみ

問題は、このコードが無限ループにならないようにすることはできませんが、「while x!= 1」を使用する場合にのみ問題になります。私は 'x!= 2'の間に置き換えて、それから期待通りに2で停止します。私はここで第1号がとても特別なことを理解するのに苦労しています。

ありがとうございます。

x=int(input("Enter a number: ")) 
steps=int(0) 

while x!=1: 

    if x%2==0: 
     x=int(x/2) 
     steps=(steps+1) 
     print(x) 

    if x%2!=0: 
     x=((x*3)+1) 
     steps=(steps+1) 
     print(x) 

print("Steps:",steps) 
+5

あなたは 'else'を使っているはずです。 - 開始時に' x == 2 'ならば、ループの繰り返しを通る流れを考えてください。紙に書いてください。あなたの頭の中でそれを視覚化できない場合はhttp://www.pythontutor.com/ – jonrsharpe

+0

それはちょうど1ではなく、 'x!= 3'で置き換えてみてください。同じ動作をします。奇数を使用しているときはいつでも発生します。 – Antimony

+0

コードが2番目の 'if'にヒットすると、最初の' if'は 'x'の値を変更し、その逆も同様です。 'x'が1のとき、 'if'sはその値を4,2,1に変更し、ループは継続する – kuro

答えて

1

それはちょうど1、x != 3とそれを交換してみて、あなたが同じ行動を見つけるでしょうではありません。ここではこれまでのコードです。奇数を使用しているときはいつでも発生します。

最初の条件に達するたびに、xの値が変更され、再び2番目の条件にヒットします。一度に1つだけifが実行されることを確かめるために、それをelseに入れたいと思うでしょう!

最初にx = 5としましょう。 2番目の条件に当たって16になった後、最初にヒットして8になり、次に4に続いて2に続いて1になります。x = 1の後のこの時間だけが値を4に戻します。そしてループは続く。

0

whileループは、x = 1のときに問題を引き起こします。なぜforループを試してループ番号を追跡するのかを列挙してみませんか?たとえば

x = int(input('enter your number')) 

for n, i in enumerate(range(x)): 

    print('x: {}'.format(x)) 

    if x % 2 == 0: 
     x /= 2 

    else: 
     x = x * 3 + 1 

    if x == 1: 
     break 

print('steps: {}, x: {}'.format(n, x)) 
0

コードを変更しました。たとえば、入力セクションに12を書き込むと、9ステップ後のxの値は「1」に等しくなり、ループはx = 1のときに終了します。あなたの応答のための

x = int(input("Enter a number: ")) 
steps = int(0) 
while x>1: 
    if x!=1: 
     if x % 2 == 0: 
      x = int(x/2) 
      steps = (steps + 1) 
      print(x) 
     else: 
      x = ((x * 3) + 1) 
      steps = (steps + 1) 
      print(x) 
print("Steps:",steps) 
0

みんなありがとう、私は他の奇数(そのため特にダム感じ)をテストするか「他」が「の場合」に従うことを考えていませんでした。ここでの答えのいくつかに基づいて、私は実際のプログラムを手に入れました:

x=int(input("Enter a number: ")) 
steps=int(0) 

while x!=1: 

    if x%2==0: 
     x=int(x/2) 

    else: x=((x*3)+1) 

    steps=(steps+1) 
    print(x) 

print("Steps:",steps) 

しかし、私は提案されている他の方法を試しています。この段階で私にとって貴重なことです。

関連する問題