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

Python数学游戏中clear()函数无法清屏的问题求助

数学游戏清屏函数失效问题排查与修复

核心原因:命名冲突

你从os模块导入的name(用于判断操作系统类型),和全局作用域里存储用户名的name变量重名了。当执行name = input("What is your name?")后,原本代表系统名称的name被覆盖成了用户名,导致clear()函数里的if name == 'nt'条件永远不成立,清屏命令根本没被执行。

修复方案

1. 解决命名冲突

两种可选方式:

  • 给系统名称的name加别名:
    修改导入语句:
    from os import system, name as os_name
    
    然后更新clear()函数:
    def clear():
        if os_name == 'nt':
            _ = system('cls')
    
  • 重命名用户名变量:把存储用户名的name改成username,避免和系统的name冲突。

2. 修复代码语法错误

你的游戏代码还有两处缩进错误:

  • math()函数里的try-except块缩进混乱,except语句的缩进不正确
  • 末尾判断if a == "N"的缩进错误,应该放在while True循环内部

3. 可选:兼容多系统清屏

给clear()函数添加Linux/macOS的清屏支持:

def clear():
    if os_name == 'nt':
        _ = system('cls')
    else:
        # Linux/macOS系统清屏命令
        _ = system('clear')

修复后的完整代码

import random
import sys
from os import system, name as os_name
from time import sleep

score = 0

def clear():
    # 兼容Windows/Linux/macOS清屏
    if os_name == 'nt':
        _ = system('cls')
    else:
        _ = system('clear')

def math():
    clear()
    y = random.randint(1, 10)
    x = random.randint(1, y)
    maths = ["*", "+", "-"]
    z = random.choice(maths)

    counter = 0
    clear()

    while True:
        global score
        clear()
        try:
            b = int(input(f"{y} {z} {x}等于多少?"))
            counter += 1
        except ValueError:
            print("请输入数字!")
            continue

        if z == "*" and b == y * x:
            clear()
            print("正确!")
            print(f"做得好,{username}!")
            print(f"尝试次数:{counter}")
            sleep(2)  # 留时间让用户看反馈
            clear()
            score += 1
            break
        elif z == "+" and b == y + x:
            clear()
            print("正确!")
            print(f"做得好,{username}!")
            print(f"尝试次数:{counter}")
            sleep(2)
            clear()
            score += 1
            break
        elif z == "-" and b == y - x:
            clear()
            print("正确!")
            print(f"做得好,{username}!")
            print(f"尝试次数:{counter}")
            sleep(2)
            clear()
            score += 1
            break
        else:
            print(f"不对哦,再试一次,{username}!")
            continue
    
    while True:
        try:
            a = input("再来一局吗?Y是,N否:")
        except:
            print("请输入Y或N!")
            continue

        if a.upper() == "Y":  # 兼容小写y输入
            sleep(3)
            clear()
            math()
        elif a.upper() == "N":
            print(f"你总共答对了{score}题!")
            sleep(5)
            sys.exit()
        else:
            print("请输入Y或N!")

# 获取用户名
while True:
    username = input("请输入你的名字:")
    if username.isdigit():
        print("名字不能是数字哦!")
        continue
    else:
        print(f"欢迎来到数学小游戏,{username}!")
        break

sleep(3)
clear()
print("屏幕已清空")
sleep(3)
clear()

math()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:22:43