如何给用户一定的时间,让用户在超时后立即回复并打印消息? (Python)

How to give the user certain amount of time to answer and print a message as soon as the time expires? (Python)

我尝试过使用多线程来限制用户的输入时间,但是这段代码似乎不起作用。

# giving the user less than 5 seconds to enter a number

import time
from threading import Thread


def ask():
    start_time = time.time()
    a = float(input("Enter a number:\n"))
    time.sleep(0.001)


def timing():
    if time.time() - start_time > 5: 
        print("Time's Up")
        quit()
    time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
t1.join()
t2.join()

您需要将计时功能设置为无限模式。因为它 运行 只有一次。

试试下面的代码:

import time
import os
from threading import Thread

start_time = time.time()
a = None

def ask():
    global start_time
    start_time = time.time()
    global a
    a = float(input("Enter a number:\n"))
    time.sleep(0.001)


def timing():
    while True:
        global a
        if a is not None:
            break
        if time.time() - start_time > 5: 
            print("Time's Up")
            os._exit(1)
        time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
t1.join()
t2.join()

我不喜欢全局变量,但以下代码似乎可以满足您的需要:

import time
from threading import Thread
import sys

start_time = 0
timeUp = False

def ask():
    global start_time, timeUp
    start_time = time.time()
    a = float(input("Enter a number:\n"))
    time.sleep(0.001)
    if a and (not timeUp):
        print('This is a: ', a)

def timing():
    global timeUp
    while True:
        if time.time() - start_time > 5: 
            print("Time's Up")
            timeUp = True
            sys.exit()
        time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
t1.join()
t2.join()