Python程序开发基础 课件 任务3 模拟时钟_第1页
Python程序开发基础 课件 任务3 模拟时钟_第2页
Python程序开发基础 课件 任务3 模拟时钟_第3页
Python程序开发基础 课件 任务3 模拟时钟_第4页
Python程序开发基础 课件 任务3 模拟时钟_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

time库——模拟时钟任务描述

钟表是一种计时装置,其样式千变万化,但用来显示时间的表盘却相差无几。对于指针式钟表的表盘一般是由刻度、时针、分针和秒针、星期显示、日期显示组成。本任务要求编写程序,使用time模块绘制并控制所示时钟。

时间管理

在Python程序开发过程中根据时间来选择不同的处理场景的情况很多,譬如,动态时钟秒针的运动时间、游戏的防沉迷控制、外卖平台店铺的营业时间管理、数据的记录及日志的处理等。Python语言提供了两个与时间管理有关的库,它们是time库、datetime库。01time库02datetime库04任务实现time库01

time库time库是Python中最常用的与时间处理相关的库。中常用的time库函数如表所示。函数说明time()获取当前时间,结果为实数,单位为秒。sleep(secs)进入休眠状态,时长由secs确定,单位为秒。strptime(string[,format])将一个年月日时间格式的字符串解析为时间元组。

localtime([secs])以struct_time类型输出本地时间。asctime([tuple])获取时间字符串,或将时间元组转换为字符串。mktime(tuple)将时间元组转换为秒数。strftime(format[,tuple])返回字符串表示的当地时间,格式由format决定。计算时间。时间是可以进行加减运算的,一般情况下,时间是以时间戳的形式来进行加减运算。本实例首先导入time库,获取系统的第一个当前时间,这个时间是以时间戳的形式表示。然后让系统等待几秒后,再获取系统的第二个当前时间,计算这两个时间的和和差,即完成时间的计算。

time实例其代码如下:importtimetime_1=time.time()time.sleep(3)time_2=time.time()print(time_1+time_2)print(time_1+time_2)Datetime库02

datetime库

以不同格式显示日期和时间是程序中最常用到的功能。datetime

库可以从系统中获得时间,并以用户选择的格式进行输出。常用的datetime库函数如表所示。函数说明date()获取当前的日期。time()获取当前的时间。datetime()获取当前的日期和时间。timedelta()获取两个时间的时间差。tzinfo()获取时区信息。

编程确定某天是该年的第几天。时间和日期是可以进行操作的。本实例首先导入datetime库,获取指定的日期,然后从这一年的1月1日起计算天数。

datetime实例其代码如下:importdatetimedefday_year(year,month,day):date1=datetime.date(year=int(year),month=int(month),day=int(day))date2=datetime.date(year=int(year),month=1,day=1)return(date1-date2).days+1y=input('请输入年份:')m=input('请输入月份:')d=input('请输入日期:')n=day_year(y,m,d)print(f'{y}年{m}月{d}日是这一年的第{n}天')任务实现——模拟时钟03

模拟时钟

根据题意,使用turtle模块绘制如下表盘(屏幕显示表盘)。表盘有三根指针:时针、分针、秒针。它们的一端被固定在表盘中心,另一端可以沿顺时针方向进行旋转。表盘中最顶端的刻度为12,它是所有指针的起始点,指针按顺时针刻度依次是1,2,3……59。这里,秒针旋转一周,分针移动一个刻度,同样,分针移动一周,时针移动一格刻度。它们是通过datetime模块控制时钟动态显示。

模拟时钟#模拟时钟fromturtleimport*fromdatetimeimport*defskip(step):'''

跳跃给定的距离'''penup()forward(step)pendown()defsetup_clock(radius):'''

建立钟表的外框'''reset()pensize(7) #设置画笔线条的粗细foriinrange(60):skip(radius) #在距离圆心为r的位置落笔ifi%5==0:#若能整除5,则画一条短直线forward(20)skip(-radius-20)else: #否则画点dot(5)skip(-radius)right(6)代码如下:

模拟时钟defmake_hand(name,length):'''

注册turtle形状,建立名字为name的形状'''reset()skip(-0.1*length)#开始记录多边形的顶点begin_poly()forward(1.1*length)#停止记录多边形的顶点,并与第一个顶点相连end_poly()#返回最后记录的多边形handForm=get_poly()#注册形状,命名为nameregister_shape(name,handForm)definit():globalsecHand,minHand,hurHand,printer#重置turtle指针向北mode("logo")#建立3个表示表针的Turtle对象并初始化secHand=Turtle()make_hand("secHand",130)#秒针secHand.shape("secHand")

代码如下:

模拟时钟minHand.shape("minHand")hurHand=Turtle()make_hand("hurHand",90)#时针hurHand.shape("hurHand")forhandinsecHand,minHand,hurHand:hand.shapesize(1,1,3)#调整3根指针的粗细hand.speed(0) #设置移动速度#建立并输出文字的Turtle对象printer=Turtle()printer.hideturtle()printer.penup()defweek(t):week=["星期一","星期二","星期三","星期四","星期五","星期六","星期七"]returnweek[t.weekday()]defday(t):return"%s%d%d"%(t.year,t.month,t.day)deftick():'''

绘制钟表的动态显示'''t=datetime.today()#获取本地当前的日期与时间#处理时间的秒数、分钟数、小时数

代码如下:

模拟时钟second=t.second+t.microsecond*0.000001minute=t.minute+t.second/60.0hour=t.hour+t.minute/60.0#将secHand、minHand和hurHand的方向设为指定的角度secHand.setheading(second*6)minHand.setheading(minute*6)hurHand.setheading(hour*30)tracer(False)printer.fd(70)#向前移动指定的距离#根据align(对齐方式)和font(字体),在当前位置写入文本printer.write(week(t),align="center",font=("Courier",14,"bold"))printer.back(130)printer.write(day(t),align="center",font=("Courier",14,"bold"))#调用home()方法将位置和方向恢复到初始状态,位置的初始坐标为(0,0),#初始方向有两种情况:若为"standard"模式,则初始方向为right,表示朝向东;#若为"logo"模式,则初始方向是up,表示朝向北

代码如下:

模拟时钟printer.home()tracer(True)#设置计时器,100ms后继续调用tick()函数ontimer(tick,100)defmain():#关闭绘画追踪,可以用于加速绘画复杂图形tracer(False)init()#画表框setup_clock(200)#开启动画

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论