Python Collatz序列 入门脚本编程

编写一个名为collatz()的函数,它有一个名为number的参数

如果参数是偶数,那么collatz()就打印出number//2,并返回该值

如果number是奇数,collatz()就打印并返回3*number+1

然后编写一个程序,让用户输入一个数,并不断对这个数调用collatz(),直到函数返回值1

  • 如果number%2==0,整数number就是偶数
  • 如果number%2==1,整数number就是奇数
def collatz(number):
    if number%2==0:       #偶数
        print(number//2)
        return number//2
    elif number%2==1:     #奇数
        print(number*3+1)
        return number*3+1

def inputNun():
    try:                      
        print('Enter number')
        xin=int(input())      
        while xin!=1 and xin>1:  
            xin=collatz(xin)
        if xin==1: 
            pass
        if xin<1: 
            print('Enter a int and higher than 0')
            inputNun()
    except ValueError:  
        print('Enter a int and higher than 0')
        inputNun()

inputNun()
print('Done')

但如果输入值是负数该怎么办呢,可考虑加入abs()函数,取绝对值

0会无限循环,1不需要参加运算,所以0和1都不需要进入collatz函数

def collatz(number):
    if number%2==0:   #偶数
        print(number//2)
        return number//2
    elif number%2==1:    #奇数
        print(3*number+1)
        return 3*number+1

def inputNun():
    try:
        print('Enter number')
        xin=abs(int(input()))   #输入值取整数型,负数取绝对值
        while xin!=1 and xin!=0:
            xin=collatz(xin)
        if xin==1:
            pass
    except ValueError:
        print('Please enter a int:')
        inputNun()

inputNun()
print('Done')

0、负数、浮点、字母都考虑了

但浮点还是走到了except,并重新进入循环

def collatz(number):
    if number%2==0:
        print(number//2)
        return number//2
    elif number%2==1:
        print(3*number+1)
        return 3*number+1

def inputNun():
    try:
        print('Enter number')
        xin=abs(int(float(input())))
        while xin not in(0,1):
            xin=collatz(xin)
        if xin==1:
            pass
    except ValueError:
        print('Please enter a int:')
        inputNun()

inputNun()
print('Done')

好啦,浮点、0、负数、字母都考虑完成了,o啦~

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章