Python3:Collatz 序列(考拉咨猜想)


編寫一個名為collatz()的函數,它有一個名為number的參數:

如果參數是偶數,那么collatz()就打印出number//2,並返回該值;

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

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

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

 

提示:如果number%2==0,整數number就是偶數,如果number%2==1,它就是奇數。

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

 
  1. Enter number: 3  
  2. 3  
  3. 10  
  4. 5  
  5. 16  
  6. 8  
  7. 4  
  8. 2  
  9. 1  

我的程序如下:
#-*- coding:utf-8 -*-
def collatz(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 

在上面的題目中添加try和except語句,檢測用戶是否輸入了一個非常整數的字符串。正常情況下,int()函數在傳入一個非整數字符串時,會產生ValueError錯誤,比如int('Happy')。在expect子句中,向用戶輸出一條信息,告訴他們必須輸入一個整數。

改進代碼如下:

# -*- coding:utf-8 -*-
def collatz(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執行結束。

 所以看到網上的人的做法,對我的代碼進行改進之后。

改進代碼如下:

 
  1. import sys  
  2. def collatz(number):  
  3.     print(number)  
  4.     if number == 1:  
  5.         sys.exit()  
  6.     elif number % 2 == 1 :  
  7.         t=number*3+1  
  8.         collatz(t)  
  9.     else:  
  10.         t=number//2  
  11.         collatz(t)  
  12.   
  13. if __name__=='__main__':  
  14.     n=input('Enter number: ')  
  15.     try:  
  16.         n=int(n)  
  17.         collatz(n)  
  18.     except ValueError as verror:  
  19.         print('ValueError: You need input digital.') (注:此處代碼是借鑒他人代碼。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM