Ограничение времени работы программы

Я пытаюсь сделать проект, в котором человек должен угадывать 5 чисел в течении 2 минут. ПО истечении 2 минут игра должна прекращаться, но у меня при использовании sleep() останавливается вся программа. Что мне делать, используя только блок time?

проблема в:

for i in range(Minute):
    Minute -= 1
    sleep(1)
from time import *
from random import *

print("Правила:")
print("1. Используйте полноэкранный режим.")
print("2. Введите числа и если они будут верны вы получите секрет.")
print("3. Отсчёт времени начинается с начала ввода данных (всего 2 минуты).")

RandNum1 = randint(0,9)
RandNum2 = randint(0,9)
RandNum3 = randint(0,9)
RandNum4 = randint(0,9)
RandNum5 = randint(0,9)

InNum1 = int(input("Введите первое число"))
InNum2 = int(input("Введите второе число"))
InNum3 = int(input("Введите третье число"))
InNum4 = int(input("Введите четвёртое число"))
InNum5 = int(input("Введите пятое число"))

Minute = 120

while Minute != 0:
    if InNum1 == RandNum1:
        print('1 верно')
    if InNum2 == RandNum2:
        print('2 верно')
    if InNum3 == RandNum3:
        print('3 верно')
    if InNum4 == RandNum4:
        print('4 верно')
    if InNum5 == RandNum5:
        print('5 верно')
    
    timing = time()

    for i in range(Minute):
        Minute -= 1
        sleep(1)

    if InNum1 == RandNum1 and InNum2 == RandNum2 and InNum3 == RandNum3 and InNum4 == RandNum4 and InNum5 == RandNum5: 
        print("ACCESS ALLOWED")
        print("SECRET_MASSAGE:")
        print("000000000000000")

    InNum1 = int(input("Введите первое число"))
    InNum2 = int(input("Введите второе число"))
    InNum3 = int(input("Введите третье число"))
    InNum4 = int(input("Введите четвёртое число"))
    InNum5 = int(input("Введите пятое число"))

Ответы (2 шт):

Автор решения: Amgarak

Вот простой пример, цикл будет крутится ~нужное время:

import time

start_time = time.time()
while time.time() - start_time < 120:  # Пока прошло менее 2 минут (120 секунд)
    # Что-то делаем

Второй пример:

import sys
import select

print("Где детонатор?! У тебя 5 секунд:")

rlist, _, _ = select.select([sys.stdin], [], [], 5)

if rlist:
    user_input = sys.stdin.readline().strip()
    print(f"Детонатор спрятан: {user_input}")
else:
    print("Бабах! 1.")
→ Ссылка
Автор решения: Alexey Trukhanov

Считаю, что первый пример, который описал Amgarak является верным, так как в условии задачи сказано "используя только блок time". Однако, напишу ответ с асинхронностью/многопоточностью, который закроет программу по истечении времени, даже если пользователь не ввел данные.

from random import *
import asyncio
import os

def game():

    print("Правила:")
    print("1. Используйте полноэкранный режим.")
    print("2. Введите числа и если они будут верны вы получите секрет.")
    print("3. Отсчёт времени начинается с начала ввода данных (всего 2 минуты).")

    RandNum1 = randint(0, 9)
    RandNum2 = randint(0, 9)
    RandNum3 = randint(0, 9)
    RandNum4 = randint(0, 9)
    RandNum5 = randint(0, 9)

    while True:

        InNum1 = int(input("Введите первое число"))
        InNum2 = int(input("Введите второе число"))
        InNum3 = int(input("Введите третье число"))
        InNum4 = int(input("Введите четвёртое число"))
        InNum5 = int(input("Введите пятое число"))

        if InNum1 == RandNum1:
            print('1 верно')
        if InNum2 == RandNum2:
            print('2 верно')
        if InNum3 == RandNum3:
            print('3 верно')
        if InNum4 == RandNum4:
            print('4 верно')
        if InNum5 == RandNum5:
            print('5 верно')

        if InNum1 == RandNum1 and InNum2 == RandNum2 and InNum3 == RandNum3 and InNum4 == RandNum4 and InNum5 == RandNum5:
            print("ACCESS ALLOWED")
            print("SECRET_MASSAGE:")
            print("000000000000000")
            os._exit(0)

async def timer(timer_time):
    await asyncio.sleep(timer_time)
    print('\nВремя вышло')
    os._exit(0)

async def main():
    timer_time = 120
    async with asyncio.TaskGroup() as tg:
        tg.create_task(asyncio.to_thread(game))
        tg.create_task(timer(timer_time))

asyncio.run(main())
→ Ссылка