Как отобразить сообщение, когда подсказка не введена? - PullRequest
0 голосов
/ 18 мая 2019

Я возвращаюсь к программированию, поэтому я запустил проект, который бросает матрицу на основе количества сторон, введенных пользователем, и количества раз, когда пользователь хочет, чтобы матрица была брошена.У меня проблемы с частью программы, связанной со временем.Когда пользователь не вводит данные в течение десяти секунд после запроса, я хочу, чтобы сообщение отображалось.Если ничего не вводится в течение следующих десяти секунд, должно отображаться сообщение, и так далее, и так далее.Я использую python.

Сейчас большая часть программы работает, но время проверяется только после ввода данных.Таким образом, пользователь может бесконечно сидеть на экране ввода и не получать подсказки.Я действительно застрял в том, как одновременно ожидать ввода, проверяя количество времени, прошедшее с момента запроса ввода.

def roll(x, y):
    rvalues = []
    while(y > 0):
        y -= 1
        rvalues.append(random.randint(1, x))
    return rvalues

def waitingInput():
    # used to track the time it takes for user to input
    start = time.time()
    sides = int(input("How many sides does the die have? "))
    times = int(input("How many times should the die be rolled? "))
    tElapsed = time.time() - start
    if tElapsed <= 10:
        tElapsed = time.time() - start
        rInfo = roll(sides, times)
        print("Each side occurs the following number of times:")
        print(Counter(rInfo))
        waitingInput()
    else:
        print("I'm waiting...")
        waitingInput()

Буду признателен за любой совет.Я пытаюсь улучшить свое кодирование любым возможным способом, поэтому конструктивная критика в отношении несвязанного кода приветствуется.

1 Ответ

0 голосов
/ 18 мая 2019

Ситуации, подобные этому, вызывают потоковый класс таймера.Стандартная библиотека Python предоставляет один:

import threading

...

def waitingInput():
    # create and start the timer before asking for user input
    timer = threading.Timer(10, print, ("I'm waiting...",))
    timer.start()

    sides = int(input("How many sides does the die have? "))
    times = int(input("How many times should the die be rolled? "))

    # once the user has provided input, stop the timer
    timer.cancel()  

    rInfo = roll(sides, times)
    print("Each side occurs the following number of times:")
    print(Counter(rInfo))
...