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.') (注:此处代码是借鉴他人代码。)
posted @ 2017-02-20 15:48  Aaron帅  阅读(8746)  评论(4编辑  收藏  举报