才开始学python不久,今天看到了一个很有趣的作业,花费了一个多小时,终于把它写出来 。当我屁颠屁颠发给刘凯林时候,他问我,你做笔记了吗?我楞了一下,什么是笔记?他说,一个好的程序员,应该要把你学到的记录下来,方便以后翻阅,而不是每当完成一个作品,就自高自大地炫耀,过后什么都忘掉。好吧,那我一直都很自高自大呢。听说简书不错,这段话就当啰嗦的开场白吧。
以下是看到的一个练习:
image.png
使用python写,对于老手应该很简单,不用几句就可以写出来,我也是新手,不简单,用了很多句,也写出来了,如下:
#一个数最后终究会回到1
while(True):
print('please input a int number:')
guess = input() #这里的guess接收输入的任何字符
def collatz(number): #传入的guess即是number
x=number%2
if x == 0:
number = number//2
else :
number = 3*number+1
print(+number)
return number
while(True):
try:
guess = int(guess) #将guess做int处理,如果不是int类型,会报错
if (guess) == 1: #判断传入的guess是否为1,是的话直接打印跳出
print("The final is:" +str(guess) )
break
else:
guess = collatz(guess) #不是1的话调用函数执行,函数将number返回,继续当做guess使用
except ValueError: #异常处理,注意跳出,不然会一直在while函数
print('Wrong!please input a int number!')
break
一开始总是报错,主要报错点有以下几点:
1.不知道在哪里加入try和except,如何判断输入的数是整数
2.不知道把input函数放哪里
3.参数传递的时候,不懂设置循环调用,如何触发跳出循环
对于以上几点的解决方法:
1.A.按照练习要求,如果用户输入非整数,那么会提示报错。。所以输入的字符类型判断必须在try语句里,当字符类型判断出错,直接跳到except的ValueError的异常。在这里使用了guess=int(guess),括号里面的guess的包含所有类型的用户输入,将之转成int类型,成为一个新的guess,而如果转化不了成int类型,说明用户输入的字符类型不是数字,那么就会直接异常进入ValueError(有点像if else)
B.整个代码的主体计算在于:如果判断输入属于整数,根据奇偶数进行计算。所以我把try except放在主函数里了,而没有放在函数collatz里,在collatz里放的是数值的计算转化
- 一开始在try后面跟着是这一句 guess = int(input()) ,虽然一开始就在输入时候对数据类型进行转化,但是由于try是存在在循环的while里面的,这样每一次循环,guess都要重新输入,计算出来的guess会被输入的guess代替,达不到不停调用不停计算的结果(你想啊你输入一个44就只能计算到22了,不会再往下),没意义。因此先把input放在外面,在里面再对输入的值做处理。
3.参数传递时候,使用:guess = collatz(guess)。括号的guess传给number,number计算后再将值给到前面新的guess,这个guess再作为一个新的值,重新回到括号里传给number,达到不停循环调用的效果。当guess==1或者输入的字符不为数字,直接break出循环,回到外围大圈重新再来一遍(外围的大循环是一个死循环)
运行结果部分截图如下:
please input a int number:
1
The final is:1
please input a int number:
23
70
35
106
53
160
80
40
20
10
5
16
8
4
2
1
The final is:1
一个数最终会回到1,这是一个数学家都解释不了的问题。这让我不仅想到,一个人无论多有成就多有辉煌,最终还是会回归尘土的吧。
那如果我把这个1定为,回归自然逻辑,世界万物真理的尘土,无论我现在如何挣扎仰望,我终究会走到那一步的吧。写代码没那么难的,当理解了之后,很多都会融会贯通。你们说对吧,对吧,加油啊Agnes。
网友评论