時間制限のある入力
プログラミングでは、ユーザー入力に時間制限を課すと有益な場合があります。たとえば、ユーザーに質問し、次のような制限時間を設けて回答することができます。
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
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 中国語 Web サイトの他の関連記事を参照してください。