zoukankan      html  css  js  c++  java
  • Collatz序列

    编写一个名为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")
  • 相关阅读:
    关于ADMM的研究(一)
    BAT染指影视制作 欲全面撬开互联网粉丝经济
    把安卓源代码中的system app独立出来,像开发普通app那样开发
    Java数学表示式解析工具- jeval
    android monkey
    tomcat URL简写案例:模拟站点www.baidu.com的訪问
    Ajax 跨域请求 jsonp获取json数据
    Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView
    iOS-获取UIView的全部层级结构
    定制属于自己的Chrome起始页
  • 原文地址:https://www.cnblogs.com/p36606jp/p/15113940.html
Copyright © 2011-2022 走看看