首頁 >後端開發 >Python教學 >如何在程式設計中實現限時用戶輸入?

如何在程式設計中實現限時用戶輸入?

DDD
DDD原創
2024-11-26 17:22:13662瀏覽

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.')

限時輸入解決方案

實現限時輸入,考慮以下選項:

  • 阻止主執行緒:
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()
阻止主執行緒:
  • 阻止主執行緒:
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
    阻止主執行緒:
  • 如果可以接受在使用者提供輸入時阻止程式碼的執行,則可以使用Timer 物件:
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
非阻塞輸入(Windows)

:為避免阻塞主線程,可以在Windows 上使用以下方法(注意此方法未經測試):

非阻塞輸入(Unix):或者,在基於Unix 的系統上,您可以使用以下其中一種方法:透過實作這些方法,您可以有效地對使用者輸入應用時間限制,增強使用者體驗並控製程式流程。

以上是如何在程式設計中實現限時用戶輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn