使用 Python The Collat​​z Sequence 分配 repet 自动化无聊的东西

Automate the Boring Stuff with Python The Collatz Sequence assignment repet

我知道有很多关于这项作业的帖子,它们都有很好的信息,但是,我正在努力将我的作业提升到一个新的水平。我已经为序列编写了代码,我已经编写了 try 和 except 函数并添加了 continues 这样程序将一直要求一个正整数直到它得到一个数字。现在我希望整个程序无限期地重复,然后我将编写一个 (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))

无限重复的例子如下

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

几乎所有你需要做的就是将第二个 while 循环移动到第一个并添加一个 "quit" 选项,尽管我在这里做了一些额外的事情来简化你的代码并给出给用户更多的反馈。

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

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

    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)