Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Melaksanakan Input Pengguna Terhad Masa dalam Pengaturcaraan?

Bagaimanakah Saya Boleh Melaksanakan Input Pengguna Terhad Masa dalam Pengaturcaraan?

DDD
DDDasal
2024-11-26 17:22:13719semak imbas

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

Input dengan Sekatan Masa

Dalam pengaturcaraan, boleh memberi manfaat untuk mengenakan had masa pada input pengguna. Sebagai contoh, anda mungkin ingin bertanya kepada pengguna soalan dan memberikan mereka tempoh terhad untuk membalas, seperti:

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

Jika pengguna melebihi had masa, anda boleh memaparkan mesej seperti:

print('Sorry, times up.')

Penyelesaian untuk Input Terhad Masa

Untuk melaksanakan input terhad masa, pertimbangkan pilihan ini:

  • Menyekat Benang Utama: Jika boleh diterima untuk menyekat pelaksanaan kod anda semasa pengguna memberikan input, anda boleh menggunakan objek Pemasa:
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()
  • Input Tidak Menyekat (Windows): Kepada elakkan menyekat utas utama, anda boleh menggunakan kaedah berikut pada Windows (perhatikan bahawa pendekatan ini tidak diuji):
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
  • Input Bukan Penyekat (Unix): Sebagai alternatif, pada sistem berasaskan Unix, anda boleh menggunakan salah satu daripada yang berikut pendekatan:
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

Dengan melaksanakan kaedah ini, anda boleh menggunakan sekatan masa dengan berkesan pada input pengguna, meningkatkan pengalaman pengguna dan mengawal aliran program anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Input Pengguna Terhad Masa dalam Pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn