python项目之秒表

秒表

程序说明

本项目我们尝试用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()

项目实验代码获取

关注微信公众号地信小嘉,回复秒表,文章末即有详细的运行代码

在这里插入图片描述

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值