프로그래밍에서 시간 제한이 있는 사용자 입력을 어떻게 구현할 수 있나요?

DDD
풀어 주다: 2024-11-26 17:22:13
원래의
656명이 탐색했습니다.

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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿