Python3 Collatz 序列(考拉諮猜想)

2022-09-03 22:24:19 字數 2045 閱讀 4614

編寫乙個名為collatz()的函式,它有乙個名為number的引數:

如果引數是偶數,那麼collatz()就列印出number//2,並返回該值;

如果number是奇數,那麼collatz()就列印,並返回3*number+1。

然後編寫乙個程式,讓使用者輸入乙個整數,並不斷對這個數呼叫,collatz(),直到函式返回值1(讓人驚奇的是,這個序列對於任何整數都有效,利用這個序列,你遲早會得到1!奇數數學家也不能確定為什麼。你的程式在研究所謂的「collatz序列」,它有時候被稱為「最簡單的、不可能的數學問題」)。

注意:記得將input()的返回值用int()函式轉成乙個整數,否則它會是乙個字串。

這個程式的輸出看起來應該像這樣:

enter number: 3  

3  10  

5  16  

8  4  

2  1  

我的程式如下:

#

-*- coding:utf-8 -*-

defcollatz(number):

if number % 2 ==0:

return number//2

elif number % 2 == 1:

return number*3+1

else

:

print('

error')

while

true:

keyinput =int(input())

getnum =collatz(keyinput)

print

(getnum)

if getnum == 1:

break

改進**如下:

#

-*- coding:utf-8 -*-

defcollatz(number):

if number % 2 ==0:

return number//2

elif number % 2 == 1:

return number*3+1

else

:

print('

error')

while

true:

try:

keyinput =int(input())

getnum =collatz(keyinput)

print

(getnum)

if getnum == 1:

break

except

valueerror:

print('

you must input a int number

')

執行結果如下:

但有一點,不對的地方是collatz 序列是輸入乙個任意的整數,讓計算機去預設執行,不再輸入,知道出現1執行結束。

所以看到網上的人的做法,對我的**進行改進之後。

改進**如下:

import sys  

def collatz(number):  

print(number)  

if number == 1:  

sys.exit()  

elif number % 2 == 1 :  

t=number*3+1  

collatz(t)  

else:  

t=number//2  

collatz(t)  

if __name__=='__main__':  

n=input('enter number: ')  

try:  

n=int(n)  

collatz(n)  

except valueerror as verror:  

print('valueerror: you need input digital.') (注:此處**是借鑑他人**。)

Python學習筆記 Collatz 序列

python學習筆記 collatz 序列 編寫乙個名為 collatz 的函式,它有乙個名為 number 的引數。如果引數是偶數,那麼 collatz 就列印出 number 2,並返回該值。如果 number 是奇數,collatz 就打 印並返回 3 number 1。然後編寫乙個程式,讓使...

python學習 練習 Collatz 序列

根據自己的理解,編寫程式,如有不規範的python程式設計書寫,請多多指教 編寫名為collatz 的函式,有乙個名為number的引數。如果引數是偶數,那麼collatz 就列印出number 2,並返回該值。若果是奇數,就列印並返回3 number 1.編寫程式 使用者輸入乙個整數,並不斷對這個...

python實踐專案一 Collatz函式

要求1 編寫乙個名為 collatz 的函式,它有乙個名為 number 的引數。如果引數是偶數,那麼 collatz 就列印出 number 2,並返回該值。如果 number 是奇數,collatz 就列印並返回 3 number 1。然後編寫乙個程式,讓使用者輸入乙個整數,並不斷對這個數呼叫 ...