Как написать скрипт, который одновременно показывает в терминале сколько осталось ил прошло времени, и , при этом всём, активно поле ввода для пользователя.
Пример работы:
1. Пользователю показывается пример, допустим 4 + 4
2. Далее показывается таймер с отчётом времени, начиная с 20 секунд и ждёт пока пользователь введёт и подтвердит ввод ответа в терминале, но если время вышло, то выходит из процесса и выводит сообщение, что время вышло
Пробовал делать используя Thread, но при таком использовании выводило только таймер и при обновлении строки через "\r" удаляло то, что вводит пользователь.
Есть ескейп последовательности, которые позволяют среди прочего и позиционировать курсор. Но не все консоли всех ОС поддерживают эти фишки или они могут различаться. В общем это отдельный квест, он еще и платформо зависимый.
Есть кросс-платформенные библиотеки, которые реализуют подобные возможности, например ncurses. В питоне, по моему, есть модуль curses.
from threading import Thread
import time
stop = False
def start():
for i in range(0,21):
while not stop:
print(i)
time.sleep(2)
break
thread = Thread(target=start)
thread.start()
while True:
p = input()
if p == 'да':
print(1)
stop = True
Нет, это работает не так как я описал. Так я могу сделать, а мне нужно "зафиксировать " таймер на одной строке и что бы именно она обновлялась, а поле ввода ответа "жило своей жизнью" и абсолютно не касалось таймера и ждало либо ответа пользователя, либо окончания таймера