简短程序的Python循环问题

问题描述 投票:0回答:1

当我运行以下程序时,它会正确输入验证,并且执行Collat​​z序列就很好。问题是它不会循环回到开始。我曾尝试删除第二部分中的“中断”,我曾尝试过移动第二个块以及其他小东西,但是我无法让它再次回到输入中重新开始。

#Collatz Sequence

import sys

#main part of input and processing number

print ('Collatz Sequence, Y\'all!')

try:
    while True:

        print ('Please type in an integer greater than 1. Type (q) to quit.')
        number = input()
        if number == 'q':
            print ('OK, see ya!')
            sys.exit() # quit the program

        if number.isdecimal() == True: #checks that input is a number
            number = int(number)
            break #breaks out of loop   

    print ('Please type in a number')




    while True:
        maybe = number%2
            #print ('DEBUG ' + 'maybe is ' + str (maybe) + ' number is ' + str (number))

        if number == 1:
            print (' ')
            print (' ')
            print ('Final answer is 1.')
            print (' ')
            print ('Let\'s do it again:')
            print (' ')
            break

        elif maybe == 0:
            print (' ')
            print (str(number) + ' is even.')
            number = number//2

        elif maybe == 1:
            print (' ')
            print (str(number) + ' is odd.')
            number = 3 * number + 1

        print ('Recalculating')

except KeyboardInterrupt:
    sys.exit()
python loops break
1个回答
1
投票

尝试简化您的逻辑,您会发现问题。您当前的逻辑是:

try:
    while True:
        <get number>
        if <want to quit>:  sys.exit()
        if <number is good>:  break        
    while True:
        if <done>:  break
        <step>
except KeyboardInterrupt:
    sys.exit()

听起来您想要更多类似的东西

try:
    while True:
        while True:
            <get number>
            if <want to quit>:  sys.exit()
            if <number is good>:  break
        while True:
            if <done>:  break
            <step>
except KeyboardInterrupt:
    sys.exit()

您将使用循环获取输入并计算路径与使用循环继续该过程这一事实混淆了。函数将使这一点更加明显。

© www.soinside.com 2019 - 2024. All rights reserved.