Python中将input输入语句放在循环内部与外部有什么区别?
问题原因分析
- 当你把
pin = int(input('Please enter your 4 digit pin \n'))移动到外层while chances >= 0:循环外部时,pin的值只会在程序启动时获取一次,只要你第一次输入的是正确的1234,后续外层循环执行时pin的值永远为1234,不会再更新。 - 你的代码中没有在pin校验正确后修改
chances变量的逻辑,只要首次输入正确pin,chances会一直保持初始值3,永远满足chances >= 0的外层循环判断条件,外层循环会无限执行。 - 当你输入n触发内层循环break后,程序会回到外层循环的执行流程:因为pin一直是正确值,所以每次都会先执行
print('You have entered the correct pin'),此时restart已经被赋值为n,内层循环不会触发,外层循环又会重新判断条件进入下一轮,最终就会反复打印pin正确的提示,无法终止。
输入语句放在循环内外的差异
- 放在循环内部:每次外层循环都会要求用户重新输入pin,输错的场景下可以配合扣减chances的逻辑直到次数耗尽终止循环,输对的场景下完成操作后如果没有修改chances,也会回到输入pin的步骤,不会直接出现死循环打印正确提示的问题。
- 放在循环外部:pin值固定,只要首次输入正确,就会触发上述死循环问题。
修复方案参考
如果需要将pin输入放在循环外部,可以在pin校验正确的分支中新增修改chances的逻辑,比如添加chances = -1,让外层循环条件不再满足,即可避免重复执行:
restart = ('y') chances = 3 balance = 1000 # pin输入移到外层 pin = int(input('Please enter your 4 digit pin \n')) while chances >= 0 : if pin == (1234): # 新增该行,让外层循环执行一次后就终止 chances = -1 print('You have entered the correct pin') while restart not in ('N', 'n'): print ('Press 1 to check balance') print ('Press 2 to withdraw') option = int(input('Can you please enter your option \n')) if option == 1: print('Your balance is', balance, '\n') restart = input('Do you like to go back?') if restart in ('n', 'N'): print ('Thanks') break
内容的提问来源于stack exchange,提问作者Swetha Ravikrishnan
相关产品推荐
相关产品推荐

