You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MIT OCW Python编程练习:错误次数达上限提前终止问题求助

问题分析与修复方案

哥们儿,我来帮你拆解下你的程序为啥只跑2次就停,再给你把代码改对~

为啥程序提前终止?

你的代码里有好几个逻辑坑:

  1. 条件判断写废了:第一个if n == "left" or "Left"完全不对!or的两边得是完整的比较表达式,你这么写相当于(n == "left") or ("Left"),而"Left"是非空字符串,永远为真——也就是说,不管你输入啥(除了right/Right),都会直接触发成功提示。但如果输入right,进入while循环后,你又把存字符串的n拿来做n +=1,这会直接报错(字符串和整数没法相加),程序直接崩了或者提前终止。
  2. 变量乱用:你用n既存用户输入的方向,又想用来计数,完全把变量的用途搞混了,逻辑直接乱套。
  3. 那个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

火山引擎 最新活动