秒表
程序说明
本项目我们尝试用Python语言设计一个计算机程序来模拟“秒表”游戏。程序的文件名称为Timer.py,程序将使用到import、def、if/elif、return等Python保留字,也会用到simplegui的create_timer方法,frame的add_button、set_draw_handler等方法,还会使用到变量、数学运算表达式、逻辑条件表达式、字符串运算表达式、自定义函数、代码格式、注释等Python语言的一些特性。
通过该项目你可以获得以下能力:
窥视计算机的工作原理
问题分解并分而治之的技巧
缜密的逻辑推理
具体问抽象化的过程
数学问题(数字转化时间的制式输出)的具体化和试验验证
局部与全局的关系
解决问题的步骤
我们希望你能设计一个函数,名为format(),该函数的主要作用是根据counter的值产生形如AB:CD.E的字符串(AB表示分钟,最大到59,CD表示秒钟,最大到59,E表示十分之一秒,最大到9)。该字符串由全局变量message1表示,另一个全局变量message2表示点击按钮的结果。
创建的定时器timer,每隔0.1秒触发。当点击“开始”按钮时,调用timer.start()启动定时器。timer启动后,每隔0.1秒其事件处理函数tick执行一次,在tick函数中递增全局变量counter的值。
点击“暂停”按钮后,pause()函数被触发执行,在其中可以利用timer.stop()停止定时器的定时。同时更新点击次数,并判断是否点在了整数秒上,如果点在了整数秒上还需要更新success_times全局变量。
当点击“复位”按钮时,reset()函数被触发执行,此时要停止定时并使所有数据回到初始值。
在绘制画布的draw函数中,在画布合适的位置上显示message1和message2的内容。
编码步骤
我们已经提供了一个基本的项目模板。请在提供的模板中按照以下步骤完成编码。
(1)编写draw()函数,在画布上正确显示message1和message2的内容。
(2)编写format()函数。
提示:以counter等于1000时为例,由于每0.1秒counter变量加1,所以此时的计时为100秒,画布上应该显示“01:40.0”,即1分40秒。为了得到分钟位置上的“1”应该用1000除以600取整(即1000 // 600)。除以600是因为每分钟有60秒,每秒有10个0.1秒。为了得到秒位置上的40应该用上一步除法的余数400(用1000 % 600得到)除以10取整。依此类推还可以得到小数位上的值。
(3)编写pause()函数,暂停正在变化的时间,增加记录器中的的总点击次数和恰好最后一位是0(整数秒)的情况,注意观察输出的结果是否符合逻辑。
(4)编写reset()函数,复位秒表,注意观察输出的结果是否符合逻辑。
项目模板
# “秒表”游戏
# 该程序的关键点是:
# 1.对时间按制式格式输出并能正确绘制在画布上
# 2.时间触发器的正确使用
import simpleguitk as simplegui
# 全局变量
message1 = "00:00.0"
message2 = "0/0"
counter = 0
success_times = 0
click_times = 0
# 辅助函数
def format():
# 利用字符串的连接制式输出
global message1, message2, success_times, click_times
# 步骤2 代码写在这里
pass
def start():
# 计时器开始计时
if not timer.is_running():
timer.start()
def pause():
# 计时器停止,根据最后一位数字改变点击次数和成功次数,最后按格式输出
global success_times, click_times, message1, counter
# 步骤3 代码写在这里
pass
def reset():
# 计时器停止,全局变量初始化
global counter, message1, message2, success_times, click_times
# 步骤4 代码写在这里
pass
# 定义间隔0.1秒定时器事件函数
def tick():
# 每隔0.1秒增加1
global counter
counter += 1
format()
# 定义绘制画布函数
def draw(canvas):
global message1, message2
# 步骤1 代码写在这里,在画布上绘制文本
pass
# 创建框架
frame = simplegui.create_frame("秒表", 600, 400)
# 创建计时器,每100毫秒(0.1秒)触发一次
timer = simplegui.create_timer(100, tick)
# 创建按钮
frame.add_button("开始", start, 150) # 框架上增加”秒表开始“按钮
frame.add_button("暂停", pause, 150) # 框架上增加”暂停“按钮
frame.add_button("复位", reset, 150) # 框架上增加”复位“按钮
frame.set_draw_handler(draw) # 执行画布绘制
# 框架开始执行
frame.start()