MIT OCW Python编程练习:错误次数达上限提前终止问题求助
问题分析与修复方案
哥们儿,我来帮你拆解下你的程序为啥只跑2次就停,再给你把代码改对~
为啥程序提前终止?
你的代码里有好几个逻辑坑:
- 条件判断写废了:第一个
if n == "left" or "Left"完全不对!or的两边得是完整的比较表达式,你这么写相当于(n == "left") or ("Left"),而"Left"是非空字符串,永远为真——也就是说,不管你输入啥(除了right/Right),都会直接触发成功提示。但如果输入right,进入while循环后,你又把存字符串的n拿来做n +=1,这会直接报错(字符串和整数没法相加),程序直接崩了或者提前终止。 - 变量乱用:你用
n既存用户输入的方向,又想用来计数,完全把变量的用途搞混了,逻辑直接乱套。 - 那个for循环纯摆设:最后
for n in range(max_guesses): break一进去就break,直接打印Game Over,不管你有没有用完3次机会,这等于白写。
修复后的代码
我重新给你写了逻辑清晰的版本,注释也标清楚了:
max_guesses = 3 guess_count = 0 # 专门用来计数,和用户输入分开 while guess_count < max_guesses: # 根据次数显示不同场景 if guess_count == 0: scene = """You are in the Lost Forest **************** **************** :) **************** **************** """ else: scene = """You are in the Lost Forest **************** ****** *** :( **************** **************** """ # 处理输入:去掉前后空格,转小写,兼容各种输入格式 direction = input(scene + "Go left or right? ").strip().lower() if direction == "left": print("You're out of Lost Forest!") break # 成功逃出,直接结束循环 elif direction == "right": guess_count += 1 # 次数到上限时,提示游戏结束 if guess_count == max_guesses: print("Game over! You ran out of your lives") else: print("Invalid input! Please enter 'left' or 'right'.")
关于新手提问的问题
当然可以在这里提所有编程相关的问题啊!不过提问的时候尽量把信息给全:比如你遇到的具体报错、预期和实际的差异、完整代码、你试过的解决方法,这样大家能更快帮你定位问题~
内容的提问来源于stack exchange,提问作者PyotrVanNostrand




