Python嵌套while循环失效问题求助(入门学习第三天)
嘿,刚学Python第三天就碰到这种循环坑太正常了!我帮你揪出代码里几个关键问题,这就是内层循环没法正常跑的原因~
问题1:A分支内层循环的错误处理没留“循环入口”
看你A分支里的这段内层循环:
while enter.isdigit(): att = at +"\n"+ enter at = att V = V + int(enter) enter = input(" Add anything else or Q for quiting : ") if enter.lower() == "q": print("items : \n-------\n ",att) print ( "Total = ",V) elif enter.isdigit() == False: print (" error try again ")
当你输入非数字也非Q的内容时,你只打印了错误提示,但没有重新获取输入让循环继续。这时候enter还是那个错误的非数字值,下一次while enter.isdigit()的条件直接不满足,循环就直接退出,跳回外层流程了。
修复方式
把输入逻辑调整到循环开头,用break和continue明确控制循环,逻辑会清晰很多:
# 改写A分支的内层循环 while True: enter = input(" Add anything else or Q for quiting : ") if enter.lower() == "q": print("items : \n-------\n ",att) print ( "Total = ",V) break # 主动退出循环 elif enter.isdigit(): att += "\n" + enter # 简化拼接写法 V += int(enter) else: print(" error try again ") # 这里不用额外操作,循环会自动回到开头重新获取输入
问题2:T分支里的while循环有语法错误
你这里写了while enter.isdigit——少了括号!isdigit()是字符串的方法,必须加括号调用才能得到布尔值。现在你写的enter.isdigit是把方法本身当成判断条件,Python里非空的方法对象会被视为True,要么无限循环,要么逻辑完全混乱,肯定没法正常工作。必须改成while enter.isdigit()。
而且T分支的错误处理和A分支犯了同样的问题:输入无效内容后没重新获取输入,直接导致循环退出。
问题3:外层循环的变量重置逻辑混乱
比如你在A分支输入错误后把enter设为"apple",外层循环的条件是enter == "",这时候条件不满足,外层循环也会直接退出。正确的做法是在退出内层循环或者处理无效输入后,把enter重置为空字符串,让外层循环能继续执行。
整理后的完整示例代码
我把关键问题都改好了,你可以参考着调试:
def total(W): print("ur total is : ", W) at = "" att = "" V = 0 enter = "" while enter == "": enter = input("choose A or T: ") if enter.lower().startswith("a"): while True: enter = input(" Enter An integer or 'Q' for quitting : ") if enter.lower() == "q": total(V) enter = "" # 重置让外层循环可以继续 break elif enter.isdigit(): att += "\n" + enter V += int(enter) else: print(" error try again ") elif enter.lower().startswith("t"): while True: enter = input(" Enter An integer or 'Q' for quitting : ") if enter.lower() == "q": print("total :", V) enter = "" # 重置让外层循环可以继续 break elif enter.isdigit(): V += int(enter) else: print(f"{enter} is invalid! ") else: print(f"{enter} is invalid ") enter = "" # 重置让外层循环继续
内容的提问来源于stack exchange,提问作者Mena__99
相关产品推荐
相关产品推荐

