我正在尝试使用这个程序来处理函数外部的数字,但是当我运行该函数时,它将进入无限循环而不会停止打印。
当我在打印命令后取出 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()
不能正常工作的是当我输入除整数之外的任何东西时,它应该说&#34;不是整数!再试一次。&#34; 但它会循环播放。我怎么能解决这个问题,因为我没有看到它会循环的原因。
我尝试过使用break但它不会工作,因为它在我认为的while循环中?
答案 0 :(得分:3)
不要使用递归来替换循环; 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()
答案 1 :(得分:0)
编辑您的代码:请参阅以下内容
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()
答案 2 :(得分:0)
解决此问题的一种方法是,为了理解循环发生的原因,当您打算不这样做时,是绘制流程的流程图。
有些简化,你有inputNumber() - &gt; inputNumber()
在inputNumber()
函数中,函数本身可能会被调用两次:
第8行
第17行
然后会发生的是该功能本身会重启。此外,一旦内部函数解析,解释器将返回函数调用结束的位置并继续到程序结束。
请参阅下面的评论:
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
这称为递归,在某些内存约束下可以在特定上下文中使用,但它通常是一个应该在更高级别引入的概念 - 除非非常具体的问题需要递归。