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

Python记忆游戏开发 PyCharm提示局部变量d未被使用问题排查

问题产生原因

PyCharm的提示完全准确,你的代码存在作用域错误和多处逻辑bug,具体如下:

  • 你定义的main()函数全程没有被调用,函数内部属于独立的局部作用域,里面赋值的d=1、high_score=[0]是仅在函数内部生效的局部变量,且函数内除了赋值没有任何读取这两个变量的逻辑,函数本身从未执行过,内部定义的变量自然会被判定为“未被使用”。
  • 你在函数外部的print语句、分支逻辑里直接写d和high_score,和main()内部的同名变量没有任何关系,属于全局作用域下未定义的标识符,代码运行时会直接抛出NameError,并不是你以为的“已经在分支里调用了定义的变量”。
  • 额外的逻辑bug会导致程序即使绕过变量报错也无法正常运行:
    • main_menu()的return语句写在了while循环内部,第一次输入合法值(1-3)时根本不会触发return,函数会默认返回None,后续的选项判断完全失效。
    • difficulty()的循环逻辑错误,输入非法值时错误调用main_menu()且不接收返回值,用户第一次输入非法值后即使后续输入正确难度,也无法正确返回结果。
    • 选项1的分支里给d赋值后没有任何后续逻辑,设置完难度程序就直接结束,赋值的难度值根本不会被用到。
    • 变量类型混乱,difficulty()返回整数类型,开始游戏的分支里却把返回值转成字符串做判断,很容易出现类型不匹配导致关卡无法触发的问题。
修复方法

按照作用域规则调整变量位置,修正所有逻辑bug即可:

  1. 把需要跨逻辑使用的状态变量(当前难度、最高分)放到全局作用域初始化,或者把所有程序逻辑包进main()函数统一调用,不要把变量定义在永远不执行的空函数里。
  2. 修正main_menu()的返回逻辑:等用户输入合法选项后再返回结果,不要把return写在循环内部。
  3. 修正difficulty()的循环逻辑:输入非法值时只重输难度,不要随意跳转主菜单,拿到合法难度值直接返回。
  4. 统一变量类型,难度值全程用整数判断,不要随意做int/str转换。
  5. 加上主菜单循环,选完难度、打完关卡后回到主菜单,保证设置的难度值能被正确读取。

修复后的可运行参考代码:

# 假设level1、level2模块已正常实现
import level1
import level2

def main_menu():
    user_choice = int(input(" | Enter an option : "))
    # 输入非法则持续重输
    while user_choice > 3 or user_choice < 1:
        user_choice = int(input("Incorrect option, try again:"))
    # 拿到合法值再返回
    return user_choice

def difficulty():
    level = int(input("Please verify the level of difficulty [1-5]: "))
    while level > 5 or level < 1:
        level = int(input("Please enter a valid number [1-5]: "))
    return level

if __name__ == "__main__":
    # 全局状态初始化
    high_score = [0]
    current_d = 1
    # 主菜单循环
    while True:
        print("  ========== MEMO GAME ========== \n |                               | "
              "\n | 1. Choose level of difficulty | \n | 2. Start Game                 |"
              "\n | 3. Exit the Game              | \n |                               "
              f"\n | Current Difficulty: {current_d} \n | Highest score reached: {max(high_score)}")
        use = str(main_menu())
        if use == "1":
            # 更新当前难度
            current_d = difficulty()
        elif use == "2":
            if current_d == 1:
                p1 = level1.first_level()
                high_score.append(p1)
            elif current_d == 2:
                p2 = level2.second_level()
                high_score.append(p2)
            # 难度3-5的逻辑可自行补充
        elif use == "3":
            print("Exit game.")
            break

内容的提问来源于stack exchange,提问作者Liam Conroy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:36:33