【问题标题】:Automate the Boring Stuff with Python The Collatz Sequence assignment repet用 Python 自动化无聊的东西 Collat​​z Sequence assignment repet
【发布时间】:2020-03-17 22:23:35
【问题描述】:

我知道有很多关于这个作业的帖子,而且它们都有很好的信息,但是,我正在努力将我的作业提升到一个新的水平。我已经为序列编写了代码,我已经编写了 try 和 except 函数并添加了 continue ,因此程序将继续要求一个正整数,直到它得到一个数字。现在我希望整个程序无限重复,然后我将编写一个 (Q)uit 选项。我尝试将问题提出到全球范围内,但这是错误的,有人可以给我一个提示,我会继续努力。这是我的代码;

def collatz(number):
    if number % 2 == 0:
        print(number // 2)
        return number // 2
    elif number % 2 == 1:
        result = 3 * number + 1
        return result
while True:
    try:
        n = int(input("Give me a positive number: "))
        if n <= 0:
            continue
        break
    except ValueError:
        continue
while n != 1:
    n = collatz(int(n))

【问题讨论】:

  • 欢迎来到 Stack Overflow!查看tour。 SO 不是代码编写服务,但如果您发布了您的最佳尝试,我们可以帮助您修复它。请更一般地阅读How do I ask and answer homework questions?How to Ask编辑再想一想,这不是太多的努力。我会给你写一个答案。

标签: python collatz


【解决方案1】:

一个无限重复的例子如下。

def collatz(number):
     " No element of Collatz can be simplified to this one liner "
    return 3 * number + 1 if number % 2 else number // 2

while True:
    # Will loop indefinitely until q is entered
    try:
        n = input("Give me a positive number: ")
        # String returned from input
        if n.lower() == "q":  # check for quit (i.e. q)
            break
        else:
            n = int(n)        # assume int, so convert (will jump to exception if not)

            while n > 1:      # loops and prints through collatz sequence
                n = collatz(n)
                print(n)

    except ValueError:
            continue

【讨论】:

    【解决方案2】:

    您所需要做的几乎就是将第二个while 循环移到第一个循环中并添加一个“退出”选项,尽管我在这里做了一些额外的事情来简化您的代码并向用户提供更多反馈。

    def collatz(number):
        if number % 2 == 0:
            # Removed "print" here - should be done in the calling scope
            return number // 2
        else:  # Removed "elif" - You already know "number" is not divisible by two
            return 3 * number + 1
    
    while True:
        s = input("Give me a positive number, or 'q' to quit: ")
        if s == 'q':
            print('Quit')
            break
    
        try:
            # Put as little code as possible in a "try" block
            n = int(s)
        except ValueError:
            print("Invalid number, try again")
            continue
    
        if n <= 0:
            print("Number must be greater than 0")
            continue
    
        print(n)
        while n != 1:
            n = collatz(n)
            print(n)
    

    示例运行:

    Give me a positive number, or 'q' to quit: a
    Invalid number, try again
    Give me a positive number, or 'q' to quit: 0
    Number must be greater than 0
    Give me a positive number, or 'q' to quit: 2
    2
    1
    Give me a positive number, or 'q' to quit: 3
    3
    10
    5
    16
    8
    4
    2
    1
    Give me a positive number, or 'q' to quit: q
    Quit
    

    【讨论】:

      【解决方案3】:

      谢谢你的建议很棒!这是我完成的代码;

          def collatz(number):
        while number != 1:
          if number % 2 == 0:
              number = number // 2
              print(number)
          else:
              number = 3 * number + 1
              print(number)
      while True:
          try:
              n = input("Give me a positive number or (q)uit: ")
              if n == "q":
                  print('Quit')
                  break
              n = int(n)    
          except ValueError:
              continue
          collatz (n)
      

      【讨论】:

        猜你喜欢
        • 2020-08-30
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多