当前位置: 首页 > 知识库问答 >
问题:

如何在Python中循环输入?

党浩阔
2023-03-14

我一直在寻找如何弄清楚如何让一个输入或某些东西进入一个time循环。就像在,输入()命令不会停止我的秒表。我尝试过tkinter、pygame和其他几种方法,但它们都不起作用。如果有人能帮我,我更喜欢小而简单的东西,如果这是可能的话。具体来说,我想学习做什么,基本上是允许在按下任何键时立即停止(最好不按回车键)。谢谢,马鞍猪!

以下是我到目前为止的情况,没有任何东西可以激活停止:

    #Setup (Variables and stuff)
        hours = 0
        minutes = 0
        seconds = 0
        import time



    #Main Part of Code
    print("Welcome to PyWatch, a stopwatch coded in Python!")
    print("Press any key to start the stopwatch.")
    print("Then, press any key to stop it!")
    start = input("")

    while hours < 48:
        seconds = seconds + 1
        time.sleep(1)
        print(hours, "hours,", minutes, "minutes,", seconds, "seconds")



    #If Statements for getting seconds/minutes/hours
    if (seconds == 60):
        minutes = minutes + 1
        seconds = seconds - 60

    if (minutes == 60):
        hours =hours + 1
        minutes = minutes - 60

共有2个答案

张亦
2023-03-14

在Python中不能这样做。您正在请求键盘事件。键盘事件附带GUI。这个线程几乎解释了一切:PyQt中的QKeyPress事件

或者为操作系统使用一个外部应用程序,该应用程序可以将输出附加到Python程序在循环中读取的文件中。当检测到某个事件时,您可以执行一些操作。对于Linux,本文将解释:https://superuser.com/questions/248517/show-keys-pressed-in-linux

何涵衍
2023-03-14

线程是你想要的。

创建第二个线程,在第一个线程处理秒表代码时等待输入。看到:

 import threading, sys

 def halt():
     raw_input()

 threading.Thread(target=halt).start()


 while hours < 48 and threading.active_count() > 1:
     seconds = seconds + 1
     time.sleep(1)

     # copy and past what you had before

请允许我详细说明发生了什么:到目前为止,您编写的所有代码都是单线程的。这意味着一次只执行一行代码,只有一个执行线程。因此,您的脚本不能同时执行多任务,不能等待输入并同时打印时间。

所以当评估这条线时

threading.Thread(target=halt).start()

主线程创建第二个执行线程。与此同时,主线程继续运行并进入while循环。目标参数是线程的切入点,它是起点。它类似于如果__name__ == "__main__:"用于主线程。就像主线程在到达的末尾时终止一样,如果__name__ == "__main__:",我们的第二个线程将在到达的末尾时终止()

线程。active_count函数告诉您中有多少线程当前正在执行。

 类似资料:
  • 问题内容: 我正在谈论做类似的事情: 我可以想到一些在python中执行此操作的方法(使用和来创建和反转它的列表,…),但我想知道是否存在更优雅的方法。在那儿? 编辑:有人建议我使用xrange()而不是range(),因为range返回一个列表,而xrange返回一个迭代器。但是在Python 3(我碰巧使用过)中,range()返回一个迭代器,而xrange不存在。 问题答案: 并采用指定步骤

  • 我正在制作一个程序,它从用户那里获取一个字符串并用分隔符逐字分隔它,它几乎完成了。但是,在第一个完整循环之后,来自用户的下一个输入不会通过最后一个while循环。 下面是我要说的代码片段: 我想我需要在单词increment和print行周围再循环一次,并在输入中使用continue序列。hasNext()循环,因为这就是我使用int来运行类似程序的方式,但我不确定这将如何处理字符串。 有什么建议

  • 任何帮助都是非常感谢的

  • 问题内容: 如果两个模块相互导入会怎样? 为了概括这个问题,Python中的循环导入又如何呢? 问题答案: 导入确实非常简单。只要记住以下几点: 和是可执行语句。它们在运行的程序到达该行时执行。 如果模块不在中,则导入将在中创建新的模块条目,然后在模块中执行代码。在执行完成之前,它不会将控制权返回给调用模块。 如果中确实存在一个模块,则无论导入是否完成执行,导入都会简单地返回该模块。这就是循环导入

  • 对于这个问题,我需要用一个公式求出两个点之间的距离,给定两个点的坐标和值p。我让程序为一个输入行工作,但我希望用户能够输入多行,并让程序循环通过它们。例如: 1.0 1.0 2.0 2.0 1.0 我对java相当陌生,还在学习,所以我很感激我能得到的任何帮助。提前谢了。

  • 问题内容: 如果我在一个循环中有一个循环,并且一旦满足一条语句,我想中断主循环,那我应该怎么做? 这是我的代码: 问题答案: 使用标记的中断: 另请参阅 Java代码中的“循环:”。 这是什么,为什么会编译? 文献资料