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
Lepaskan: 2024-11-26 17:22:13
asal
717 orang telah melayarinya

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")
Salin selepas log masuk

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

print('Sorry, times up.')
Salin selepas log masuk

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()
Salin selepas log masuk
  • 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
Salin selepas log masuk
  • 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
Salin selepas log masuk
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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan