今天是Andy学Python的第32 天哦!
大家好,我是Andy。
今天练习了《Python编程快速上手——让繁琐工作自动化》第3章实践项目: Collatz序列。
01.项目需求
# 编写一个名为collatz()的函数,它有一个名为number的参数。
# 如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。
# 如果参数是奇数,collatz()就打印并返回3 * number + 1。
# 然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1。
(令人惊奇的是,这个序列对于任何正整数都有效,利用这个序列, 你迟早会得到 1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz 序列”,它有时候被称为“最简单的、不可能的数学问题”)
02.py001
# 定义collatz函数
def collatz(number):
if number % 2 == 0:
number = number // 2
print(number)
return number
else:
number = 3 * number + 1
print(number)
return number
number = int(input("请输入一个整数:\n"))
while True:
number = collatz(number)
if number == 1:
break
出现了三种状况:
2.1输入正整数
2.2输入字母
2.3输入负整数
出现了死循环,程序进入忙碌状态。
需优化部分:
一是if...else中出现重复的return number,可精简;
二是输入任意字母,ValueError,用except排除。
三是负整数死循环,可在while循环中定义条件number <= 1 时跳出;
顺带提一下,为中止死循环,我采用了ctrl+c,好像没什么用,Jupyter右上角的小圆圈还是实心的。点击“停止服务”的小方块,没反应,停一会儿,就出现了网页打不开,提示内存不足,刷新页面,再次打开,还是同样情况。关机重启,再次打开,重复以上步骤,还是不行。最后在Home Page将文档(后缀名*.ipynb)删除,新建一个文档,idle状态仍是忙碌,多次点击“停止服务”的小方块,终于将状态调整为空闲。
03.py002
# 定义collatz函数
def collatz(number):
if number % 2 == 0:
number = number // 2
print(number)
else:
number = 3 * number + 1
print(number)
return number
try:
number = int(input("请输入一个整数:"))
while True:
number = collatz(number)
if number <= 1:
break
except ValueError:
print("请重新输入一个整数")
运行结果:
51Day Day up!
向上向善,日进一步!
每天学习,努力成长!
定个小目标,开启成长的旅程,遇见更好的自己。
这是我们和自己的约定,许诺自己不负韶华。
路虽远,行则将至;事虽难,做则必成。
成长的最好时机,就是当下。
网友评论