首页 > 后端开发 > Python教程 > 如何在编程中实现限时用户输入?

如何在编程中实现限时用户输入?

DDD
发布: 2024-11-26 17:22:13
原创
717 人浏览过

How Can I Implement Time-Limited User Input in Programming?

有时间限制的输入

在编程中,对用户输入施加时间限制是有益的。例如,您可能希望向用户询问问题并为他们提供有限的响应时间,例如:

print('some scenario')
prompt = input("You have 10 seconds to choose the correct answer...\n")
登录后复制

如果用户超过时间限制,您可以显示类似以下的消息:

print('Sorry, times up.')
登录后复制

限时输入解决方案

实现限时输入,考虑以下选项:

  • 阻塞主线程:如果可以接受在用户提供输入时阻塞代码的执行,则可以使用 Timer 对象:
from threading import Timer

timeout = 10
t = Timer(timeout, print, ['Sorry, times up'])
t.start()
prompt = "You have %d seconds to choose the correct answer...\n" % timeout
answer = input(prompt)
t.cancel()
登录后复制
  • 非阻塞输入(Windows):为避免阻塞主线程,可以在 Windows 上使用以下方法(注意此方法未经测试):
import msvcrt
import time

class TimeoutExpired(Exception):
    pass

def input_with_timeout(prompt, timeout, timer=time.monotonic):
    sys.stdout.write(prompt)
    sys.stdout.flush()
    endtime = timer() + timeout
    result = []
    while timer() < endtime:
        if msvcrt.kbhit():
            result.append(msvcrt.getwche())  # XXX can it block on multibyte characters?
            if result[-1] == '\r':
                return ''.join(result[:-1])
        time.sleep(0.04)  # just to yield to other processes/threads
    raise TimeoutExpired
登录后复制
  • 非阻塞输入 (Unix):或者,在基于 Unix 的系统上,您可以使用以下其中一种方法:
import select
import sys

def input_with_timeout(prompt, timeout):
    sys.stdout.write(prompt)
    sys.stdout.flush()
    ready, _, _ = select.select([sys.stdin], [],[], timeout)
    if ready:
        return sys.stdin.readline().rstrip('\n')  # expect stdin to be line-buffered
    raise TimeoutExpired
登录后复制
import signal

def alarm_handler(signum, frame):
    raise TimeoutExpired

def input_with_timeout(prompt, timeout):
    # set signal handler
    signal.signal(signal.SIGALRM, alarm_handler)
    signal.alarm(timeout)  # produce SIGALRM in `timeout` seconds

    try:
        return input(prompt)
    finally:
        signal.alarm(0)  # cancel alarm
登录后复制

通过实现这些方法,您可以有效地对用户输入应用时间限制,增强用户体验并控制程序流程。

以上是如何在编程中实现限时用户输入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板