作为实践,请编写程序完成下列任务。
3.11.1 Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number是奇数,collatz()就打印并返回3 * number+1。
提示:如果number% 2 == 0,整数number就是偶数,如果number% 2 == 1,它就是奇数。
然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。
记得将input()的返回值用int()函数转成一个整数,否则它会是一个字符串。
3.11.2 输入验证
在前面的项目中添加try和except语句,检测用户是否输入了一个非整数的字符串。正常情况下,int()函数在传入一个非整数字符串时,会产生ValueError错误,比如int(' puppy' )。在except子句中,向用户输出一条信息,告诉他们必须输入一个整数。
程序如下:
def collatz(number): #定义collatz()的函数,它有一个名为number的参数
global i #定义i为全局变量
if number% 2 == 0: #判断number是不是偶数
i=number//2
print(i)
else:
i=3 * number+1
print(i)
try: #一直不知道try应该加在哪里,直到看到输入验证里的说明,我才知道是这里产生错误,以后应直接在交互式环境中输入表达式来验证是哪一句出现错误。
collatz(int(input())) #输入一下整数,如果输入的不是整数,就会报错。
#i=collatz(input()) #一开始是想法返回值赋值给i然后通过i进行接下去的判定的
#if i!=1: #一开始使用的是if语句,后来发现if不能循环,还需要加一个循环语句
# collatz(i)
#else:
# print('OK')
while i!=1: #直接使用用while语句进行循环判定
collatz(i) #循环调用collatz()函数
except ValueError: #输入的不是整数,就直接跳到这里
print('请输入整数')
以上程序经过验证,完全正确运行。
重要的概念:
奇偶判断
如果number% 2 == 0,整数number就是偶数,如果number% 2 == 1,它就是奇数。