[英]Python looping issue for short program
当我运行下面的程序时,它会正确地进行输入验证,并且可以很好地执行 Collatz 序列。 问题是它不会循环回到开头。 我尝试删除第二部分中的“中断”,我尝试移动第二个块和其他小东西,但我无法让它再次返回输入以重新开始。
#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.