Ограничение времени работы программы
Я пытаюсь сделать проект, в котором человек должен угадывать 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())