You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:06:07