美文网首页
一个数最终会回到1

一个数最终会回到1

作者: Callme_Agnes | 来源:发表于2018-06-21 10:32 被阅读0次

才开始学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里放的是数值的计算转化

  1. 一开始在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。

相关文章

  • 一个数最终会回到1

    才开始学python不久,今天看到了一个很有趣的作业,花费了一个多小时,终于把它写出来 。当我屁颠屁颠发给刘凯林时...

  • 回来,回到“来”

    我们最终会回到那个来的地方。

  • 选择排序

    【选择排序】:最值出现在起始端第1趟:在n个数中找到最小(大)数与第一个数交换位置第2趟:在剩下n-1个数中找到最...

  • Google Kickstart 2019 Round A 题解

    比赛题目 1. Training Problem:从N个数中挑选P个数,使得这P个数增大为全部相同的数所需的代价最...

  • 付于心,于是一辈子都交付了心

    这支舞叫圆舞,你最终会回到我身边来。

  • Object.assign()

    Object.assign()复制一个访问器属性最终会转换为一个数据属性 var receiver = {} va...

  • 回归生活的本意

    无论生活怎么走,最终会回到生活的本质上,一个没有任何动力的上午,无聊的看着打发时间的电影,电影里无厘头的搞怪,却最...

  • 算法-位图排序

    0. Thanks 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 从1亿个数字中取出最...

  • 62圆圈中最后剩下的数字

    0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最...

  • 一、位运算

    题目 1、求一个整数,二进制时1的个数 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:最...

网友评论

      本文标题:一个数最终会回到1

      本文链接:https://www.haomeiwen.com/subject/gxhqyftx.html