我有一个学生给了我以下代码:
def addtwo():
numb=input("enter any number")
add=int(numb)+2
print(add)
inp = input("do you wish to enter again")
while inp=="yes":
addtwo()
第一次迭代后,如果用户输入的不是“yes”,那么while循环体不会执行,这是预期的。但如果我们输入“yes”,它将执行(同样是预期的),并提示“输入任何数字”,但在第二次迭代中,即使用户在“您是否希望再次输入”上输入了其他内容,while循环体仍然会执行。现在我对其进行了调试,并发现当执行第5行时,
inp
的值就会改变为'yes'
。在执行该行之前,根据调试器显示,inp
的值仍然是用户输入的任何内容。为什么会这样呢?我在这里查找了资料,但没有找到解释,尽管我在这里找到了一种方法,可以在while循环体中调用
addtwo()
之前添加一个返回(我在这里找到了它:Calling a function recursively for user input),但我不明白为什么inp
的值会在本地堆栈中更改,以及return
语句如何修复它?下面是可工作的代码:
def addtwo():
numb=input("enter any number")
add=int(numb)+2
print(add)
inp = input("do you wish to enter again")
while inp=="yes":
return addtwo()
而且增加了我的困惑,如果我们使用if
语句而不是while
语句,则代码可以正常工作。
inp=="yes"
,那么while
循环就是无限的。循环内部没有任何东西改变局部变量inp
的值。在第二个版本中,return
通过结束函数来退出无限循环。 - khelwood'myChoice ='y' while myChoice == 'y': myNumber = input('Please enter your number') print(int(myNumber)+2) myChoice = input('Do you want to add another number [y/n]')
- Umair Rafique