主要内容 #
- 综合应用:参照python -m turtledemo的clock模型,制作自己的时钟
1.时钟的钟盘(1) #
程序上在制作一个时钟的时候,我们首先要制作出时钟的钟盘和表针,然后再校准时间和设置表针的动画形式,最终完成时钟的制作。 在制作钟盘之前我们首先要了解turtle中的write()和mode()函数,mode()函数主要有两种模式,通过字符串’standard’, ‘logo’控制,’logo’模式画笔初始朝上,以往课程使用的是’standard’模式,画笔初始朝右(东)。import turtle turtle.mode('logo')#使用logo模式默认画笔朝上 turtle.pencolor('pink') turtle.pensize(7) for i in range(12): turtle.circle(-100,30)#顺时针画一个半径为100,角度为30度的圆弧 turtle.write('%d' % ((i-2)%12),align="center", font=("Courier", 18, "bold"))#类似于print()函数,为与下文保持一致采用格式化输出,直接写(i-2)%12也可 turtle.done()以上程序展示了一个非常简陋的钟盘制作过程,其中write()函数有三个参数,(i-2)%12取余是需要书写的内容,数字18控制字体的大小。 细心的同学可以发现,在书写钟盘点数的时候,点数总是位于画笔箭头的上方,因此在实际程序中要进行位置调整。
1.时钟的钟盘(2) #
import turtle ################## def mymove(x,y):#定义mymove函数,功能是让turtle画笔移动到指定位置 turtle.penup() turtle.goto(x,y) turtle.pendown() def frame(radius):#定义frame函数,该函数有一个参数表示钟盘的半径 turtle.mode('logo')#采用logo模式 num=[12]+[i for i in range(1,12)]#num列表,两个列表的链接表示钟盘的数字 turtle.pensize(7) for i in range(60):#实际钟盘有60个格子,我们使用60次循环完成绘制 turtle.penup();turtle.forward(radius);turtle.pendown()#每次循环开始我们先把画笔移动到钟盘半径处 if i % 5 == 0:#每绘制5个小格时到了整点数,我们做一个长度为20的标记 turtle.forward(20) if i//5<=4 or i//5>=8:#此层判断语句,是为了调整点数5,6,7的位置,可以尝试不加试一试效果 turtle.write('%d'%(num[i//5]),align='center',font=("Courier", 18, "bold")) else: turtle.penup();turtle.forward(25);turtle.pendown() turtle.write('%d'%(num[i//5]),align='center',font=("Courier", 18, "bold")) mymove(0,0) else: turtle.dot(5)#如果不是正点数,我们用一个直径为5的点表示 mymove(0,0)#每次做完标记回到时钟中心,这里的中心是(0,0) turtle.right(6)#每个小格代表360/60=6度,旋转6度完成下次循环中一个小格的绘制 ################## frame(100)#函数的调用绘制一个半径100的钟盘以上程序为我们提供了钟盘绘制函数frame(radius),通过传入不同的半径参数,能够得到不同大小的钟盘。因为钟表的开头0一般标注是12,所以我们通过num列表来表示它,注意num列表的连接和推导表达式的应用。
习题 #
- 在frame()函数num[i//5]列表的访问中,我们使用的下标是i//5,能换成i/5吗?为什么?
- 尝试修改一下frame(radius)函数,使函数frame(radius,x,y)有三个参数,能够在不同位置绘制钟盘
OJ训练题 #
1、打折优惠 – ★
2、元素插入有序数组 – ★
3、数组元素的删除 – ★
4、下载电影 – ★★
5、数字交换 – ★★★