Python 函数进入无限循环
Python Functions looping into a infinite loop
我正在尝试使用此程序从函数外部处理数字,但是当我 运行 该函数时,它将进入无限循环并且不会停止打印。
当我在打印命令后取出 inputNumber() 时它起作用了,但我需要它吗?
这是我的完整代码:
def inputNumber():
try:
print (userInput)
Number2 = ('%02d' % (int(userInput)))
print(Number2)
except ValueError:
print("Not an integer! Try again.")
inputNumber()
else:
if int(Number2)<=10:
#print("Correct")
if len(str(Number2))==2:
print("Number Is Good Continue")
else:
print("Try Again")
inputNumber()
else:
print("Score Must Be Within 01-10")
userInput = input("Input Score")
inputNumber()
不起作用的一点是当我输入整数以外的任何东西时它应该说 "Not an integer! Try again." 但它会循环这个。我怎么能解决这个问题,因为我看不出它会循环播放的任何原因。
我试过使用 break 但它不起作用,因为我认为它在 while 循环中?
编辑了您的代码:请参阅以下内容
def inputNumber():
userInput = input("Input Score: ")
try:
print (userInput)
Number2 = ('%02d' % (int(userInput)))
print(Number2)
except ValueError:
print("Not an integer! Try again.")
inputNumber()
else:
if int(Number2)<=10:
#print("Correct")
if len(str(Number2))==2:
print("Number Is Good Continue")
else:
print("Try Again")
inputNumber()
else:
print("Score Must Be Within 01-10")
inputNumber()
解决此问题的一种方法是绘制流程的 流程图,以了解循环发生的原因(如果您不打算这样做)。
有点简化,你有 inputNumber()-->inputNumber()
在您的 inputNumber()
函数中,函数本身可能被调用两次之一:
第 8 行
第 17 行
然后发生的是函数本身将重新启动。此外,一旦内部函数解析,解释器 returns 到函数调用结束的地方并继续到程序结束。
请参阅下面我的评论:
def inputNumber(): # Define what happens when you call inputNumber()
try:
print (userInput)
Number2 = ('%02d' % (int(userInput)))
print(Number2)
except ValueError:
print("Not an integer! Try again.")
inputNumber() # Call inputNumber()
else:
if int(Number2)<=10:
#print("Correct")
if len(str(Number2))==2:
print("Number Is Good Continue")
else:
print("Try Again")
inputNumber() # Call inputNumber()
else:
print("Score Must Be Within 01-10")
userInput = input("Input Score")
inputNumber() # Call inputNumber
这被称为递归,在某些内存限制下的特定上下文中可能是一个有用的应用程序,但它通常是一个应该在更高级的级别引入的概念 - 除非非常具体的问题需要递归。
不要用递归来代替循环; Python 不进行尾调用优化。只要循环直到输入可以转换为1到10之间的数字,此时你可以明确地跳出循环。
def input_number():
while True:
n = input("Input score: ")
try:
n = int(n)
except ValueError:
print("Not an integer! Try again.")
continue
if 1 <= n <= 10:
print("Correct")
break
print("Score must be between 1 and 10")
return '%02d' % (n,)
value = input_number()
我正在尝试使用此程序从函数外部处理数字,但是当我 运行 该函数时,它将进入无限循环并且不会停止打印。
当我在打印命令后取出 inputNumber() 时它起作用了,但我需要它吗?
这是我的完整代码:
def inputNumber():
try:
print (userInput)
Number2 = ('%02d' % (int(userInput)))
print(Number2)
except ValueError:
print("Not an integer! Try again.")
inputNumber()
else:
if int(Number2)<=10:
#print("Correct")
if len(str(Number2))==2:
print("Number Is Good Continue")
else:
print("Try Again")
inputNumber()
else:
print("Score Must Be Within 01-10")
userInput = input("Input Score")
inputNumber()
不起作用的一点是当我输入整数以外的任何东西时它应该说 "Not an integer! Try again." 但它会循环这个。我怎么能解决这个问题,因为我看不出它会循环播放的任何原因。
我试过使用 break 但它不起作用,因为我认为它在 while 循环中?
编辑了您的代码:请参阅以下内容
def inputNumber():
userInput = input("Input Score: ")
try:
print (userInput)
Number2 = ('%02d' % (int(userInput)))
print(Number2)
except ValueError:
print("Not an integer! Try again.")
inputNumber()
else:
if int(Number2)<=10:
#print("Correct")
if len(str(Number2))==2:
print("Number Is Good Continue")
else:
print("Try Again")
inputNumber()
else:
print("Score Must Be Within 01-10")
inputNumber()
解决此问题的一种方法是绘制流程的 流程图,以了解循环发生的原因(如果您不打算这样做)。
有点简化,你有 inputNumber()-->inputNumber()
在您的 inputNumber()
函数中,函数本身可能被调用两次之一:
第 8 行
第 17 行
然后发生的是函数本身将重新启动。此外,一旦内部函数解析,解释器 returns 到函数调用结束的地方并继续到程序结束。
请参阅下面我的评论:
def inputNumber(): # Define what happens when you call inputNumber()
try:
print (userInput)
Number2 = ('%02d' % (int(userInput)))
print(Number2)
except ValueError:
print("Not an integer! Try again.")
inputNumber() # Call inputNumber()
else:
if int(Number2)<=10:
#print("Correct")
if len(str(Number2))==2:
print("Number Is Good Continue")
else:
print("Try Again")
inputNumber() # Call inputNumber()
else:
print("Score Must Be Within 01-10")
userInput = input("Input Score")
inputNumber() # Call inputNumber
这被称为递归,在某些内存限制下的特定上下文中可能是一个有用的应用程序,但它通常是一个应该在更高级的级别引入的概念 - 除非非常具体的问题需要递归。
不要用递归来代替循环; Python 不进行尾调用优化。只要循环直到输入可以转换为1到10之间的数字,此时你可以明确地跳出循环。
def input_number():
while True:
n = input("Input score: ")
try:
n = int(n)
except ValueError:
print("Not an integer! Try again.")
continue
if 1 <= n <= 10:
print("Correct")
break
print("Score must be between 1 and 10")
return '%02d' % (n,)
value = input_number()