2017-05-16 47 views
0

所以,我剛開始學習Python和思想簡單的考拉茲猜想計劃將是一個有趣的項目開始。這個想法是打印每一步,然後是所採取的總步驟。無限while循環Python,但只有1目標值

問題是,我不能阻止這個代碼進入一個無限循環,但只有當我使用「而X!= 1」。我可以用'while 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

因爲當代碼擊中第二'if',第一個'if'已經改變x'的'的值,反之亦然。當'x'爲1時,'if's將其值更改爲4,2,1,循環繼續 – kuro

回答

1

它不只是1,嘗試用x != 3取代它,你會發現相同的行爲。它發生在你使用奇數時。

每當它撞擊第一條件,的x值被改變,然後它再次撞擊第二條件。您可能想要將其放入else,以確保一次只能執行一個if

讓我們假設x = 5在第一。它擊中第二個條件,變爲16,然後點擊第一,成爲8,然後如圖4所示,然後如圖2所示,然後1.只是這一次,x = 1後,它也擊中第二條件,從而改變它的值返回至4。循環繼續。

0

當x = 1時,while循環將導致問題。爲什麼不嘗試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) 

但是,我會嘗試其他建議的方法。這個階段對我來說都很有價值。