Python:检测特定的按键并提示用户

标签 python keypress prompt

我需要每 10 秒打印一次“Hello World”。但是,如果用户选择“c”或“Enter”,程序应停止打印句子并提示用户提供另一个句子。检查用户提供的句子,如果该句子包含任何数字,则会显示一条消息:“不能包含数字”。否则会显示一条消息:“正确的句子”。在显示任何一条消息后,程序继续打印“Hello World”。

这是我已经制定的代码。将不胜感激任何关于如何继续的提示。 谢谢!

import threading

def looping():
    threading.Timer(10.0, looping).start()
    print("Hello World!")

looping()

最佳答案

根据我对您的作业说明的理解,您使用计时器打印“Hello World”似乎是在正确的轨道上!我想赞成 Irmen de Jong 对你关于“线程和控制台输入/输出不能很好地协同工作”这一说法的问题的评论,因为我自己在 C 编程中经历过这一点。

一旦计时器启动,它打印到屏幕上的文本就不会影响对键盘输入的响应。如果确实需要直接响应“c”的按键(不后跟“Enter”,因为在使用 input() 从键盘读取输入时通常必须这样做),我建议按照 Python method for reading keypress? 中的解决方案之一来计算说明您想如何实现。

编辑:使用基于线程的计时器实现解决方案比我想象的要棘手一些。

正如您在研究此问题时可能发现的那样,threading.Timer 对象同时具有 start()stop() 方法,如果您已将对计时器的引用保存在变量中 (例如执行 my_timer = threading.Timer(10.0, looping) 然后调用 my_timer.start() 启动定时器)。如果这样做,您可以调用 my_timer.stop() 来暂停循环,前提是您已正确引用需要在该时间点停止的当前计时器实例。

为了让事情更简单一些,我选择创建一个全局变量 PAUSE_LOOPING,当设置为 False 时,将在调用 looping 时停止启动新的计时器实例,从而停止该函数的所有进一步重复,直到 PAUSE_LOOPING 被调用设置回 True 并再次调用 looping():

import threading
from msvcrt import getch

PAUSE_LOOPING = False

def looping():
    global PAUSE_LOOPING
    if not PAUSE_LOOPING:
        threading.Timer(10.0, looping).start()
        print("Hello World!")

looping()

while True:
    # key = ord(getch())
    # if key == 13:  # Enter
    #     PAUSE_LOOPING = True
    input_string = input()
    if input_string == "":
        PAUSE_LOOPING = True
    else:
        PAUSE_LOOPING = False
        looping()

在最后一个代码块中注释掉的是一种直接获取按键的方法(无需按 input() 要求的“Enter”键),取 self 在回答的前面链接到的 stackoverflow 问题。只要您使用 Python for Windows(因此您安装了 MS VC++ 运行时库 msvcrt),这应该就可以工作,但是要在按“Enter”时停止脚本,您可以使用标准的 input() 函数。在我的示例中,在按“Enter”之前键入任何其他字符串将在暂停后恢复循环。

注意:请注意不要使用 Python 的 IDLE 来运行此代码。它不会工作。相反,您必须从命令行运行它。

关于Python:检测特定的按键并提示用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47145673/

相关文章:

python - 从函数返回多个值的最佳方法?

python - 创建没有特定数字的范围

javascript - jQuery 按键事件在按住键时重复触发 - 但不是在所有键上

javascript - 检测在 Mac 上键入的重音字符?

python - 函数调用之外的星号

python - 为什么我的python安装2.7.6后还是显示2.7.3

c# - 使用按键模拟短信样式打字

scripting - 在 Windows 10 上通过命令提示符运行 JS 脚本

javascript - JS提示背景

node.js - Oclif 提示测试