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

Создание секундомера с SimpleGUI

30.09.2014, 10:26. Показов 4407. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1. Создайте таймер с интервалом срабатывания 0.1 секунды, обработчик которого будет
увеличивать целое число, хранящееся в глобальной переменной. Это число будет
отслеживать время. Не забывайте, что функции create_timer() время задаётся в
миллисекундах (1мс – одна тысячная секунды).
Проверьте, что таймер работает правильно, печатая значение переменной времени в
консоли.
Не используйте для хранения времени числа с плавающей точкой. Скорее всего, такой
вариант можно будет заставить работать, но только с приложением больших усилий на
борьбу с погрешностями. Храните время с помощью целого числа, например 12 = 1.2
секунды.
2. Напишите обработчик рисования, который отобразит время в виде числа в центре холста.
Пока не задумывайтесь о красивом форматировании, просто используйте str() чтобы
преобразовать число в строку и вывести как есть.
3. Добавьте кнопки «Старт» и «Стоп», обработчики которых будут запускать и останавливать
таймер.
Затем добавьте кнопку «Сброс», которая останавливает таймер и сбрасывает время в 0.
При запуске программы секундомер должен быть остановлен.
4. Напишите вспомогательную функцию format(t), которая должна возвращать строку в
формате A:BC.D, где A – минуты, BС – секунды (B – цифра от 0 до 5), D – десятые доли
секунд.
Обратите внимание, чтобы возвращаемая функцией строка всегда содержала необходимые
ведущие нули:
format(0) = 0:00.0
format(11) = 0:01.1
format(321) = 0:32.1
format(613) = 1:01.3
Подсказка: используйте целочисленное деление (//) и остаток от деления (%) чтобы
получить значения A,B,C и D из исходного числа.
5. Добавьте вызов функции format() в обработчик рисования, чтобы получить законченный
секундомер.

Дополнительные расширения:
1. Превратите секундомер в тренажер реакции. Для этого добавьте к секундомеру два
счётчика, которые будут отслеживать, сколько раз секундомер был остановлен, и сколько
из них его удалось остановить в ровную секунду (1.0, 2.0, 3.0 и т.д.). Значение этих
счётчиков должно отображаться в верхней правой части холста в формате “x/y”, где y – общее число остановок секундомера, x – число остановок в ровную секунду.
2. Добавьте код, который не позволит увеличивать счётчики нажатием на кнопку «Стоп», если секундомер уже остановлен. Подсказка: для этого может быть полезно добавить булеву переменную, которая будет иметь значение True, если секундомер запущен, и False – если остановлен.
3. Модифицируйте обработчик кнопки «Сброс» так, чтобы он сбрасывал значения счётчиков в 0 при сбросе секундомера.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2014, 10:26
Ответы с готовыми решениями:

Создание секундомера
Напишите приложение секундомер. При нажатии на кнопку старт должен запускаться таймер. При этом...

Создание секундомера
Необходимо написать секундомер, который начинает работать с момента открытия формы (то есть после...

Создание класса секундомера
Создайте класс секундомера. Члены класса: переменные типа double для хранения начального и...

Создание точного секундомера
Доброго времени суток, уважаемые форумчане! Помогите, пожалуйста, начинающему дуболому. ...

8
26 / 26 / 5
Регистрация: 14.05.2014
Сообщений: 250
30.09.2014, 23:07 2
что конкретно не получается?
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
01.10.2014, 00:11 3
uppjke, Ты похоже разделом ошибся, тут помогают найти ошибку или разобраться, а просто так выполнять чужие лабы тут не будут.
Тебе в раздел по фрилансу.
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
01.10.2014, 08:02  [ТС] 4
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
import simplegui
 
message = 0
 
def start():
    global timer
    timer.start()
 
def stop():
    global timer
    timer.stop()
 
def reset():
    global message
    message = 0
    
def draw(canvas):
    canvas.draw_text(str(message), [50,112], 48, "Red")
 
def timer_handler():
    global message
    message += 1 
 
frame = simplegui.create_frame("Timer", 300, 200)
frame.add_button("Start", start)
frame.add_button("Stop", stop)
frame.add_button("Reset",reset)
frame.set_draw_handler(draw)
 
timer = simplegui.create_timer(1000, timer_handler)
 
frame.start()
не могу никак добавить форматирование
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
01.10.2014, 12:23 5
Лучший ответ Сообщение было отмечено uppjke как решение

Решение

Для форматирования строк используется метод строк format, пример есть тут http://pythonworld.ru/osnovy/f... ormat.html
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
02.10.2014, 23:09  [ТС] 6
В итоге получилось вот так:
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
55
56
57
58
59
#Programm - Stopwatch
import simplegui
time = '0:00.0'
t = 0
game_count = 0
win_count = 0
is_going = 0
 
def format(t):
    global time
    milliseconds = t % 10
    sec = (t - milliseconds) / 10
    minutes = sec // 60
    seconds = sec % 60
    if seconds >=10:
        time = str(minutes) + ':' + str(seconds) + '.' +str(milliseconds)
    else:
        time = str(minutes) + ':0' + str(seconds) + '.' +str(milliseconds)
 
def start_button():
    global is_going
    is_going = 1
    timer.start()
    
def stop_button():
    global game_count, win_count, is_going
    timer.stop()
    game_count = game_count + is_going
    if time[-1] == '0' and is_going:
        win_count = win_count + 1
    is_going = 0    
    
def reset_button():
    global t, time, game_count, win_count, is_going
    game_count = 0
    win_count = 0
    is_going = 0
    timer.stop()
    t = 0
    format(t)
 
def timer_handler():
    global t
    t = t + 1
    format(t)
 
def draw(canvas):
    canvas.draw_text(time, (100, 100), 32, "Red")
    canvas.draw_text(str(win_count) + '/' + str(game_count), 
                     (250, 20), 20, "Green")
frame = simplegui.create_frame("Stopwatch", 300, 200)
timer = simplegui.create_timer(100, timer_handler)
 
frame.set_draw_handler(draw)
frame.add_button("Start", start_button, 100)
frame.add_button("Stop", stop_button, 100)
frame.add_button("Reset", reset_button, 100)
 
frame.start()
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
02.10.2014, 23:40 7
uppjke, Ссылку присланную мной как вижу читать не стали, ну что же, выбор ваш.
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
05.10.2014, 13:19  [ТС] 8
ну как ни как всё работает идеально
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.10.2014, 14:02 9
Только правила хорошего тона не соблюли и выбрали не питонячий способ решения + если не ошибаюсь конкатенация строк более затратная операция чем форматирование.
0
05.10.2014, 14:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2014, 14:02
Помогаю со студенческими работами здесь

Создание секундомера на JavaScript
Добрый вечер Подскажите, пожалуйста, начинающему надо сделать таймер который посередине страницы...

Создание секундомера на 580 эмуляторе
Нужно создать на данном эмуляторе секундомер от 0 до 59,соответствующие файлы прилагаются

Таймер с функцией секундомера. Создание динамического таймера
Имеется Таймер(секундомер) который вызывается клавишей button2. Как реализовать так чтобы при...

М/с автономного секундомера
Возник вопрос, а есть ли что-то вроде DS1307, но чтобы в ней был еще и секундомер. Мне нужно, что...

Остановка секундомера
Привет всем, есть такой секундомер, и мне надо сделать так что бы когда было 1 минута, выводилась...

Два секундомера
Здравствуйте, нужна помощь. Суть программы в том, что на экран выводятся одновременно два...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru