Saisie avec restriction de temps
En programmation, il peut être avantageux d'imposer une limite de temps à la saisie de l'utilisateur. Par exemple, vous souhaiterez peut-être poser une question aux utilisateurs et leur accorder une durée limitée pour répondre, par exemple :
print('some scenario') prompt = input("You have 10 seconds to choose the correct answer...\n")
Si l'utilisateur dépasse le délai imparti, vous pouvez afficher un message du type :
print('Sorry, times up.')
Solutions pour une saisie limitée dans le temps
Pour mettre en œuvre une saisie limitée dans le temps, considérez ces options :
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
En mettant en œuvre ces méthodes, vous pouvez appliquer efficacement restrictions de temps pour la saisie de l'utilisateur, améliorant l'expérience utilisateur et contrôlant le flux de votre programme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!