繁体   English   中英

短程序的Python循环问题

[英]Python looping issue for short program

当我运行下面的程序时,它会正确地进行输入验证,并且可以很好地执行 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()

试着让你的逻辑更简单,你会看到你的问题。 您当前的逻辑是:

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()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM