编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number// 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。然后编写一个程序,让用户输入一个正整数,并不断对这个数调用collatz(),直到函数返回值1
1. 考虑了0、负数、小数、字母
但是小数为啥会走到except,很费解(更新,见5)
2. 输错的话提示重新输入,并重新进入循环
一不小心开始了套娃..
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:
number = int(input())
while number != 1 and number > 1:
number = collatz(number)
if number == 1:
pass
if number < 1:
print("Enter a int and higher than 0")
inputNun()
except ValueError:
print("Enter a int and higher than 0")
inputNun()
inputNun()
print("Done")
3. 负数也有奇偶,所以当输入-2时走到异常里就不严谨,想了一下,可以用绝对值来处理负数
4. 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:
number = abs(int(input()))
while number != 1 and number != 0: #不能写成number !=1 and 0
number = collatz(number)
except ValueError:
print("Please enter a int:")
inputNun()
inputNun()
print("Done")
5. number = int(input())时,输入浮点数,会给出ValueError: invalid literal for int() with base 10: '3.14'的错误提示
在input外层加上eval或者float可以解决
但如果用eval,就需要吧指定的错误ValueEroor去掉,直接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:
number = abs(int(float(input())))
while number not in(0, 1):
number = collatz(number)
except:
print("Please enter a int:")
inputNun()
inputNun()
print("Done")