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")
  • 相关阅读:
    vue禁止用户复制文案
    html2canvas.js + jspdf.js 实现html转pdf / html转图片
    Vue.js +pdf.js 处理响应pdf文件流数据,前端转图片预览不可下载
    JavaScript处理后端返回PDF文件流,在线预览下载PDF文件
    多线程并发工具类01-CountDownLatch 线程工具类
    线程池01-线程池基础知识
    网络基础知识01-协议分层与TCP/IP协议簇
    网络基础知识02-HTTP协议
    jquery-i18n 多语言切换
    springboot-01 springboot 启动 enviroment环境加载
  • 原文地址:https://www.cnblogs.com/p36606jp/p/15113940.html
Copyright © 2011-2022 走看看