每个数学方程后如何清除屏幕?

问题描述 投票:0回答:1

我正在写一个小数学游戏,它做我想做的事,它随机输出一个数学问题,当答案正确时,一个点被添加到计数器。但是,在询问用户姓名并打印欢迎消息后,我希望清除屏幕。我首先写了一个屏幕清除测试,看看清除屏幕功能是否有效。

这是测试:

from os import system, name
from time import sleep
import sys

def clear():
    # for windows

    if name == 'nt':
        _ = system('cls')

def spreken():
    print("More to clear")
    sleep(3)
    clear()

def spreek():
    print("Another test to test clear")
    sleep(3)
    clear()
    a = input("Yes or No? ")
    if a == "Y":
        print("Go to next one")
        sleep(3)
        clear()
        spreken()
    if a == "N":
        sys.exit()

def test():

    print("Please, clear this text!")
    sleep(5)
    clear()
    spreek()

print("Let us test this, first a long line of tekst"
"you will have lots of fun! \n"
                                                        "Lets take on the computer! \n"
                                                        "Show the computer who's boss!")
sleep(3)
clear()

test()
print("Was it cleared?")
sleep(3)
clear()
print("Yes it was!")`

这很好用,但是,当我在我的数学游戏代码中实现它时,没有任何反应,屏幕一次也没有被清除。这是数学游戏代码(我相信它可以更好,但现在的重点是清晰的屏幕):


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

score = 0

def clear():


    if name == 'nt':
        _ = system('cls')

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"How much is {y} {z} {x}? "))
            counter += 1
        except ValueError:
            print("Number please")
            continue

        if z == "*" and b == y * x:
            clear()
            print("Correct")
            print(f"Very good {name}")
            print(f"Number of tries: {counter}")
            clear()
            score = score + 1
            break
        if z == "+" and b == y + x:
            clear()
            print("Correct!")
            print(f"Very good {name}")
            print(f"Number of tries {counter}")
            clear()
            score = score + 1
            break
        if z == "-" and b == y - x:
            clear()
            print("Correct")
            print(f"Very good {name}")
            print(f"Number of tries: {counter}")
            score = score + 1
            clear()
            break
        else:
            print(f"Try again {name}")
            continue
    while True:

        try:

                a = input("Another game? Y for Yes, N for no: ")

            except ValueError:
            print("Must be Y or N")

        if a == "Y":
            sleep(3)
            clear()
            math()
    if a == "N":
        print("Correct: ", score, "")
        sleep(5)
        sys.exit()

while True:

    name = input("What is your name?")

    if name.isdigit():
        print("No number")
        continue
    else:
        print(f"Welcome to the mathgame {name}!")
        break

sleep(3)
clear()
print("Screen got cleared")
sleep(3)
clear()

math()

我在所有可能的地方都使用了 clear,但它一次也没有清除屏幕。任何反馈将不胜感激。抱歉,如果这不是显示我的代码的正确方式,但这是我的第一个问题。

python pycharm
1个回答
0
投票

在你的 clear 函数中,你正在使用变量 name,你正在从 os 库导入。但是,稍后在您的代码中,当您询问用户的姓名时,您定义了另一个名为 name 的变量。所以,你的 name 变量值现在是用户输入的名字(比方说,“Bob”)。

在您的 clear 函数中,您正在检查所使用的操作系统,方法是将 name 变量与“nt”进行比较,以确保您使用的是 Windows。由于 name 现在是“Bob”,您将“Bob”与“nt”进行比较,这是 False,因此清除命令不起作用。

要解决这个问题,您可以:

  1. name 变量的名称更改为 smth,如 name_ 并在代码中的任何地方更改它(除了你的 clear 函数)

  2. 不是直接从 os 库导入名称,而是简单地写

    import os
    

    然后使用您的name变量作为

    os.name
    

我希望这个解释足够清楚,祝你在 Python 之旅中好运!

© www.soinside.com 2019 - 2024. All rights reserved.