【问题标题】:Python: display dynamic information on user inputPython:显示用户输入的动态信息
【发布时间】:2017-12-11 19:18:37
【问题描述】:

我希望能够在 python 脚本中接收用户的命令行输入,同时向用户显示一些动态信息。 用户应该能够输入文本,但这不应该阻止信息的显示。

我的目标是创建一个游戏,在用户仍有时间输入答案时,我会向他们展示倒计时。

这可以实现吗?

【问题讨论】:

  • 是的,这是可以实现的。
  • 在没有任何解释或指导的情况下写这篇文章是没有帮助的。

标签: python command-line


【解决方案1】:

是的。要在控制台中创建倒计时,您可以执行以下操作:

from time import sleep
for num in reversed(range(0,11)):
    print(num)
    sleep(1.0)

from time import sleep
time = 10
while time != 0:
    print(time)
    time = time - 1
    sleep(1.0)

两者都会从 10 倒计时到 0,每个数字之间会有一秒。由于您可能希望用户能够像在达到 0 之前一样快或慢地输入答案......您可能希望考虑同时运行两个循环。 this thread 可能对此有所帮助。如果用户得到正确答案(并且出现表明他们得到正确答案的信息)或者用户时间用完,您将想弄清楚如何打破这两个循环。

【讨论】:

  • 但它会阻止命令行输入。我希望显示的倒计时更新到位,而不是:10 9 8 7 ...
  • 哦。我想你可能想看看“pygame”。 pygame.org
  • 谢谢。 pygame 是否适用于命令行界面?我认为它更多地用于 GUI 和 OpenGL 的东西。不过我会研究一下。
【解决方案2】:

听起来很有趣,所以我做了,很快就遇到了一些问题。

首先,我能够制作一个正在运行的计数器,但问题是,因为它是一个循环,所以下一层计数器循环将重置您在上一层回答的所有内容,除非您按下回车键输入答案(回答 + 输入,在那 1 秒内)。

如果您正在制作基于反射的东西,您只需要按单个键,您可能可以通过使用模块 getch 成功使用我的代码。

我可以使用几个模块来使计时器和程序同时运行,线程和多处理(使用线程可以获得更好的结果)。

如果您只是删除添加循环的计数器功能,这基本上是一个工作,但您不会看到计时器。

Pygame 可能是个不错的选择,我自己没用过,但我想是的。

这是我的代码

import time
import threading
import os


timel = 5

def question():
    q = input("",)
    print(q)
    if q == "2":
        print("\nCorrect")
    else:
        exit("\nFalse, You lose!!")

def counter():
    timel = 5
    for i in range(0, timel):
        print("How much is 1+1?", timel)
        timel -= 1
        time.sleep(1)
        os.system("cls")


def timer(seconds):
    time.sleep(seconds)
    exit("\nTIMES UP, You lose!!")

def exit(msg):
    print(msg)
    os._exit(1)

def main():
    thread = threading.Thread(target=timer, args=(int("{}".format(timel)),))
    thread2 = threading.Thread(target=counter)
    thread.start()
    thread2.start()
    question()

if __name__ == "__main__":
    main()

【讨论】:

  • 谢谢。不完全是这样。我也有我的工作实现,甚至允许我在时间过去时停止询问用户输入,但是就地显示倒计时的部分仍未解决。有许多在控制台中运行的应用程序(不一定是用 python 编写的),其中的东西是动态更新的(htop 是我的意思的一个很好的例子),我只是认为必须有一种方法可以用 Python 创建这样的接口。
猜你喜欢
  • 2019-03-26
  • 1970-01-01
  • 2020-09-05
  • 2017-04-21
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
相关资源
最近更新 更多