Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/270: Рейтинг темы: голосов - 270, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46

Таймер в Питоне 3.0

15.03.2017, 21:00. Показов 49470. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Ребят, подскажите пожалуйста, как пользоваться таймером в таких случаях:
Мне нужно сделать так, чтобы программа вывела например ,print("Hello World"), через несколько секунд, а не сразу?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2017, 21:00
Ответы с готовыми решениями:

Таймер на питоне
Я сделал таймер на питоне, обучаюсь ему около 2 недель. Подскажите как можно его привести в нормальный вид. Добавлено через 22 секунды...

Как открыть файл на питоне, чтобы внутри содержимый код работал при открытии на питоне?
Хочу открыть файл, чтобы внутри код работал на питоне: >>> a = open(r'F:\python\py\Madi Khasenov.txt') >>> a.read() "x...

[CoDeSys] На языке LD поставить параллельно обмотке таймер TON (включить таймер по условию)
Помогите поставить параллельно обмотке в CoDeSys таймер TON (как это сделать?)

19
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
15.03.2017, 21:06
Python
1
2
import time
time.sleep(ваше время в секундах)
1
1 / 1 / 3
Регистрация: 28.10.2016
Сообщений: 37
16.03.2017, 21:41
Лучший ответ Сообщение было отмечено Slanix как решение

Решение

Python
1
2
3
import time
time.sleep(2) # засыпаем на две секунды
print('Hello World')
1
76 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
16.03.2017, 22:01
Будет вестись обратный отсчёт.
Python
1
2
3
4
5
import time
for i in range(10, 0, -1):
    print(i)
    time.sleep(1)
print('Hello, world!')
1
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46
16.03.2017, 22:10  [ТС]
Спасибо! А не подскажете, как сделать ещё вот такой таймер:
Чтобы давалось, например 5 секунд, чтобы дать ответ. Если ответ дали, то выполнялось какое либо действие (например, if otvet == "8": print("Верно") else: print("Неверно")), а если нет ответа, то программа останавливалась (exit(0)), или повторялась с циклом while True. (Меня интересует только сам таймер, остальное я умею)
0
76 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
16.03.2017, 22:46
Что-то такое
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import time
from random import randint
while True:
    a = randint(1, 100)
    b = randint(1, 100)
    print(a, '+', b, '=')
    start = time.time()
    answer = int(input())
    if time.time() - start >= 5:
        print('Вы не успели')
    else:
        if answer == a + b:
            print('Верно')
        else:
            print('Неверно')
Чтобы показывало сам таймер во время работы, нужно создавать новый поток, в котором запускать таймер.
1
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46
17.03.2017, 19:32  [ТС]
Спасибо вам огромное! Очень помогли!
0
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,291
18.03.2017, 13:52
Kir-malishev,
Цитата Сообщение от Slanix Посмотреть сообщение
а если нет ответа, то программа останавливалась (exit(0)), или повторялась с циклом while True.
но ваш код будет ждать ввода до потери пульса.да он сработает если ответ введен за большее время чем задано
0
76 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
18.03.2017, 15:38
Semen-Semenich, ну да. Надо делать в отдельном потоке. Я с ними в Питоне не разбирался, если честно.
0
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46
18.03.2017, 23:25  [ТС]
Ну в общем то да, я и сам понял...

Добавлено через 7 минут
И мне ещё в процессе разработки этот код был не очень удобен, потому что после каждого варианта мне нужно было, чтобы программа продолжалась. Если можно сделать так, чтобы программа продолжалась во всех 3-ех случаях одинаково (за исключением, например того, что, когда ответ верный, даётся 1 очко) то скажите мне, пожалуйста, как это сделать (код очень длинный, и вставлять во все 3 случая неудобно, поэтому ищу другой способ)
+:
Незнаю, можно ли так делать, но мне интересно, можно, например запускать другой код через программу, и вообще, запускать другие приложения. А также, можно ли, например, сохранять переменные после закрытия программы?
0
76 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
19.03.2017, 00:47
Цитата Сообщение от Slanix Посмотреть сообщение
вставлять во все 3 случая неудобно
Slanix, чтобы не вставлять одинаковые куски кода несколько раз, нужно оформлять их как функции. Или ветвление организовать так, чтобы код попадал под несколько случаев.

Цитата Сообщение от Slanix Посмотреть сообщение
запускать другой код через программу
Можно с помощью модуля os:

Python
1
2
import os
os.system(r'setup.py')  # Относительный или абсолютный путь до файла
Произойдёт по сути открытие указанного файла. Если это текст или картинка, то откроется картинка в стандартном средстве просмотра. Если это .exe, он выполнится. Чтобы выполнить python-скрипт, т.е. файл с расширением .py, нужно указать как средство просмотра python.exe, а не, например, IDLE.

Цитата Сообщение от Slanix Посмотреть сообщение
можно ли, например, сохранять переменные после закрытия программы?
Сохранять значения переменных после закрытия программы удобнее всего в файле. Причём, если вам нужно сохранять несколько значений, стоит это делать в json-формате. Для этих целей подойдёт стандартный модуль json. Почитать о нём подробнее можно здесь. Допустим, у нас есть две переменные, age и name, значения которых нужно сохранить в файл data.txt:

Python
1
2
3
4
5
6
7
import json
age = 50
name = 'Alex'
json_data = json.dumps({'age': age, 'name': name})
file = open('data.txt', 'w')
file.write(json_data)
file.close()
Извлечь данные можно будет так:

Python
1
2
3
4
5
6
7
file = open('data.txt', 'r')
json_data = file.read()
file.close()
data = json.loads(json_data)
age = data['age']
name = data['name']
print(age, name)
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
19.03.2017, 15:25
С input всё не просто. Он блокирует поток и брякнуть его - дело не тривиальное. Проблема ещё в том, что в питоне нет легального способа укокошить (дочерний) поток (из главного) (хотя main-поток из дочернего зя, достаточно просто). И даже если смертоубийство свершится, вы "испортите" stdin. Поэтому поток в конкретно этом случае - не выход (впрочем, в Linux дело, кажется, не так безнадежно как в Windows). Ну, т.е. я такого способа не знаю. Брякнув stdin, его нужно как-то восстановить, а как, повторюсь, - не знаю. (Я даже пробовал эмулировать Ctrl+C, дабы корректно сообщить потоку, что пора бы и честь знать, но почему-то не получилось)


Могу предложить жуть с дочерним процессом (если у Вас Windows)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import multiprocessing
import threading
import queue
import sys
import os
 
 
def process_function(input_queue, fd, promt=''):
    sys.stdin = os.fdopen(fd)
    input_queue.put(input(promt), block=True)
 
 
def input_wait(promt='', timeout=None):
    ret = None
    
    fd = sys.stdin.fileno()
    input_queue = multiprocessing.Queue()
    process = multiprocessing.Process(target=process_function, args=(input_queue, fd, promt), daemon=True)
    process.start()
    
    try:
        ret = input_queue.get(block=True, timeout=timeout)
    except queue.Empty:
        process.terminate()
 
    return ret
 
 
 
if __name__ == '__main__':
    timeout = 10
    
    while True:
        answer = input_wait('Enter answer>', timeout)
        if answer is None:
            print('Time is up! Try again')
        elif answer == 'r':
            print("It's right answer!")
        elif answer == 'q':
            print('done...')
            break
        else:
            print('No! Try again')


- правда страшно?

Если Linux - python-nonblock
0
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46
10.04.2017, 20:07  [ТС]
А не подскажете, как сделать так, чтобы дочерний поток работал на ровне с основным? у меня не работает почему то.
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
10.04.2017, 20:42
А что Вы подразумеваете под "наравне"?
0
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46
11.04.2017, 09:05  [ТС]
Извините за ошибку, просто на телефоне писал). Наравне, в смысле, чтобы можно было давать ответ и при этом шёл таймер. У меня, если ответ поставить перед таймерном, то пока не даш ответ, таймер не заработает, если на оборот, таймер проходит, п Ротом просят ответ. Это было раньше. Сейчас, я как-то исправил, и вроде бы все работает, а нет. В общем, просит ответ и показывает "5 осталось", ты отвечаешь (неверно), и она снова просит ответ и показывает уже "4 осталось", и так далее, причем, это бесконечно(после 0 снова 5, хотя по коду (и если его отдельно проверить) после "0" идёт "вы не успели")
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
11.04.2017, 14:54
Покажите код
0
0 / 0 / 0
Регистрация: 24.02.2017
Сообщений: 46
11.04.2017, 20:48  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import threading
import time
def c(n):
    ti = '15'
    while True:
        time.sleep(1)
        print('осталось',int(ti) - 1,'секунд')
        ti = int(ti) - 1
        if int(ti) == 0:
            print('Время вышло!')
        else:
            continue
def ans(ans):
    ans = input()
    if ans == '10':
        print(' верно ')
    else:
        print(' неверно ')
o = threading.Thread(target=ans, args=(1, ))
t = threading.Thread(target=c, args=(15, ))
print('сколько будет 5 + 5?')
print('у вас есть 15 секунд')
o.start()
t.start()
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.04.2017, 17:49
Ну, не знаю... Вот Ваш код с чисто косметическими правками
код ТС
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import threading
import time
 
 
stop_c = False
 
def c(n):
    ti = n
    while not stop_c:
        time.sleep(1)
        ti -= 1
        print('осталось', ti, 'секунд')
        
        if ti == 0:
            print('Время вышло!')
            ti = n
        else:
            continue
 
 
def ans(ans):
    global stop_c
    ans = input()
    if ans == '10':
        print(' верно ')
    else:
        print(' неверно ')
    stop_c = True
 
 
o = threading.Thread(target=ans, args=(1, ))
t = threading.Thread(target=c, args=(15, ))
print('сколько будет 5 + 5?')
print('у вас есть 15 секунд')
o.start()
t.start()

Он, кстати, демонстрирует одну из трудностей поставленной задачи: смешивает ввод пользователя и вывод таймера. Не гуд...

Основная трудность, как я уже пытался намекнуть в посте #12, заключается в бряке input'а - это не просто (позволю себе сказать - крайне не просто). Без бряка, работать будет вот так
небрякнутый input в отдельном потоке
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import threading
import queue
 
 
def thread_input(input_queue, prompt=''):
    input_queue.put(input(prompt))
 
 
def input_wait(prompt, timeout):
    input_queue = queue.Queue()
    work_thread = threading.Thread(target=thread_input, daemon=True, 
                                   args=(input_queue, prompt))
    work_thread.start()
    try:
        answer = input_queue.get(timeout=timeout)
    except queue.Empty:
        answer = None
    return answer
 
 
 
timeout = 10
prompt = 'Enter answer: '
 
print('Сколько будет 5 + 5?')
print('у вас есть 10 секунд')
 
while True:
    answer = input_wait(prompt, timeout)
    if answer is None:
        print('\nTime is up!')
    elif answer == '10':
        print("It's right answer!")
    elif answer == 'q':
        print('done...')
        break
    else:
        print("No! Try again.")

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

И последнее, ходульно-ходульное решение на потоках, с самопальным input'ом (работает только в Windows)
очередная жуть, на потоках (Windows)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import msvcrt
import time
 
 
def input_wait(prompt='', timeout=1000, *, _delay=0.02):
    inpute_line = str()
    start = time.time()
 
    while time.time() - start < timeout:
        prompt_t = '\r{:.1f}| {}{}'.format(timeout - time.time() + start,
                                           prompt, inpute_line)
        print(prompt_t, end='')
        
        if msvcrt.kbhit():
            char = msvcrt.getwch()
            if char == '\r':
                msvcrt.putwch('\n')
                break
            elif char == '\000' or char == '\xe0':
                msvcrt.getwch()
                pass
            elif ord(char) == 8: # backspace
                print('\r{}'.format(' ' * len(prompt_t)), end='')
                inpute_line = inpute_line[:-1]
            else:
                inpute_line += char
        else:
            time.sleep(_delay)
    else:
        inpute_line = None
    
    return inpute_line
 
 
 
timeout = 10
prompt = 'Enter answer: '
 
print('Сколько будет 5 + 5?')
print('у вас есть 10 секунд')
 
while True:
    answer = input_wait(prompt, timeout=timeout)
    
    if answer is None:
        print('\nTime is up')
    else:
        if answer == '10':
            print("It's right answer!")
        elif answer == 'q':
            print('exit...')
            break        
        else:
            print("No! Try again.")

работает как надобно (однако же я бы не стал это использовать не в личных целях).

Всё сказаное относится к Windows. Для Linux есть вполне себе работающие решения nonblocking input/reading (пример одного из них в том же #12).
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
14.04.2017, 12:47
Код (от alex925) в клоне темы.
0
1 / 1 / 0
Регистрация: 19.06.2017
Сообщений: 32
03.08.2017, 14:59
Python
1
2
3
4
5
6
import time
boom=59
while boom >0:
    time.sleep(1)
    print(boom)
    boom -=1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.08.2017, 14:59
Помогаю со студенческими работами здесь

Таймер должен через время положить файл на БД. [Таймер]
Мне нужен таймер, а я не знаю как его делать именно, чтоб в конкретное время он сохранял информацию в файл. Чтобы он в конкретный период...

Поясните за таймер!) Или таймер на формах наследниках
Доброго. В проге есть основная форма и в процессе работы создается 1-2-3-4-5 форм наследников все одного типа, но вот в чем загвоздка, на...

Таймер похожий на таймер в delphi
Добрый всем)В общем хочу создать класс таймера похожий на класс таймера на delphi.Суть в том,что я хочу включать и выключать таймер за счет...

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

Звук и таймер - реализовать классы: "зв. сигал", "таймер" и "секундомер-сигнализатор"
Подскажите пожалуйста, дано задание реализовать классы: &quot;зв. сигал&quot;, &quot;таймер&quot; и &quot;секундомер-сигнализатор&quot;. Какие библиотеки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru