我想從'自動化枯燥的東西與Python書',但已遇到一些問題編寫collatz程序。我正在使用python 3.5.2。以下是項目大綱:使用while循環和變量
編寫一個名爲collatz()的函數,該函數有一個名爲number的參數。如果數字是偶數,那麼collatz()應該打印數字// 2並返回該值。如果數字是奇數,那麼collatz()應該打印並返回3 *數字+1。然後編寫一個程序,讓用戶鍵入一個整數,並不斷調用該數字的collatz(),直到函數返回值1爲止。
我的代碼:
def collatz(number):
if number % 2 == 0: #its even
print(number // 2)
return number // 2
elif number % 2 == 1: #its odd
print(3*number+1)
return 3*number+1
print('Type an integer: ')
num=int(input())
while(True):
if collatz(num) == 1:
break
# Or even simpler:
# while(collatz(num) != 1):
# pass
輸出給了我一個無限循環:
Type an integer:
10
5
5
5
5
5
5
5
5
...
但是,當我打破它,並使用一個變量來存儲返回值,它的工作原理:
while(True):
num=collatz(num)
if num == 1:
break
輸出:
Type an integer:
5
16
8
4
2
1
爲什麼呢?我不明白爲什麼第一個程序不起作用。兩者都是相似的,但我只是選擇直接在我的原始程序中測試返回值,而不是使用變量。 我很感激任何幫助,謝謝。
你的無限循環版本永遠不會更新'num'的值。 – Blorgbeard
那麼這是我的一個非常愚蠢的錯誤。好吧,它發生..謝謝你。 – tadm123