Как показать обратный отсчет времени в python при запуске другого потока?

#python #multithreading #time #timer

Вопрос:

Я делаю простую игру с таблицей умножения на python просто для практики, и до сих пор она работала нормально. Сама игра-это просто случайно сгенерированный a x b, в котором у вас есть определенное количество времени, чтобы ответить на него, пока вы не введете неправильный ответ или время не закончится. Я просто не знаю, как я мог бы добавить обратный отсчет таймера, который отображается и обновляется каждую секунду. Вот мой код:

 import random
import time
from threading import Timer

def timeout():
    print('nnO tempo acabou!nnttGAME OVER!')

def newTimer(seconds):
    global t
    t = Timer(seconds, timeout)

# -------- Instructions --------
def instructions():
    print("Como funciona?n")
    print("Irão aparecer na tela várias contas da tabuada de 1 a 10. Você terá 3, 5 ou 7 segundos para responder.n")
    print("A cada resposta que você acertar você ganhará um ponto. Quanto mais você acertar em sequêncian")
    print("mais pontos fará! Se errar ou acabar o tempo, GAME OVER! Boa sorte!nn")
    print("ATENÇÃO: Para digitar as respostas e selecionar opções no menu digite o número e aperte ENTER.n")
    input("Aperte ENTER para continuar ...")
# ----------------------------

# ----------- Menu -----------
def main():
    opt1 = '0'
    opt2 = '0'
    right = 0
    points = 0
    best = 0
    seconds = 5

    while opt1 < '1' or opt1 > '5':
        print("33c")

        print('tJOGO DA TABUADAn')
        print('Menu')
        if best != 0:
            print('ttMelhor pontuação: {}'.format(best))
        print('nDigite a opção: (escreva o numero)n')    
        print('1 - Jogarn') 
        print('2 - Instruçõesn') 
        print('3 - Escolher tempo de respostan')     
        print('4 - Zerar pontosn') 
        print('5 - Sairn')

        opt1 = input('')

        if opt1 < '1' or opt1 > '5':
            print('opção inválidan')
            input("Aperte ENTER para continuar ...")
        else:
            if opt1 == '3':
                while opt2 < '1' or opt2 > '3':
                    print("33c")
                    print('Selecione o tempo:')    
                    print('1 - 3 segundos') 
                    print('2 - 5 segundos')     
                    print('3 - 7 segundos') 
                    opt2 = input('')
                    if opt2 < '1' or opt2 > '3':
                        print('opção inválida')
                    else:
                        if opt2 == '1':
                            seconds = 3
                        if opt2 == '2':
                            seconds = 5
                        if opt2 == '3':
                            seconds = 7

            elif opt1 == '4':
                best = 0

        # ------ actual game -------
            elif opt1 == '1':   
                print("33c")
                points = 0
                print('Você tem {} segundos para responder!!n'.format(seconds))
                print('Se prepare!')
                time.sleep(2)
                print("33c")
                right = 0

                while right == 0:
                    a = random.randint(1, 10)
                    b = random.randint(1, 10)

                    answer = None

                    newTimer(seconds)
                    t.start()

                    answer = input('{} x {} = '.format(a, b))

                    t.cancel()

                    if answer != str(a * b):
                        if answer == '':
                            if points == 1:
                                print('nVocê fez {} ponto!n'.format(points))
                            else:
                                print('nVocê fez {} pontos!n'.format(points))
                            input("Aperte ENTER para continuar ...")
                            break
                        right = 1
                        print('Resposta errada!nnttGAME OVER!')
                        if points == 1:
                            print('nVocê fez {} ponto!n'.format(points))
                        else:
                            print('nVocê fez {} pontos!n'.format(points))
                        input("Aperte ENTER para continuar ...")
                        break

                    else:
                        points  = 1

                if points > best:
                    best = points

            elif opt1 == '2':
                print("33c")
                instructions()

            else:
                exit()

        opt1 = '0'
        opt2 = '0'

instructions()
main() 
 

Язык-португальский, но все переменные на английском. Заранее спасибо