zoukankan      html  css  js  c++  java
  • 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.') (注:此处代码是借鉴他人代码。)
  • 相关阅读:
    第七次上机练习
    第六次作业
    第六次上机练习
    第五次作业
    第五次上机练习
    第四次作业
    第四次上机练习
    第三次上机练习
    第三次作业
    第十一周上机练习
  • 原文地址:https://www.cnblogs.com/xuexiaohun/p/6419887.html
Copyright © 2011-2022 走看看