python数码管显示日期

编程入门 行业动态 更新时间:2024-10-26 20:26:36

python数码管显示<a href=https://www.elefans.com/category/jswz/34/1771397.html style=日期"/>

python数码管显示日期

Hello,大家好,今年这个暑假大家全国各地时不时还爆发着疫情,也不敢出去玩,呆在家里就是surfing the Internet。鉴于大一刚刚结束,上课期间也学习了C语言,就想着暑假自学Python,这也就是题图上的那个小代码的诞生历程。y1s1,这个看上去是不是有点炫酷的亚子。

狠人话不多,先上一个动态的视频,看看效果~知乎视频​www.zhihu

是不是挺好玩的呀~(不要你觉得,我觉得好玩就行♪(^∀^●)ノ

咳咳~言归正传,现在就来讲一波这个代码的实现过程吧

在开始写代码之前,我们要先来分析一下这个问题需要用到的知识,当思路清晰之后,我们再去写代码,可以做到事半功倍的效果。

我们可以把这个工作分成两个大的模块:为了能在屏幕中画出来数码管的形式,我们需要引入绘图标准库——turtle库

在实现绘图功能之后,我们还需要能够获得系统的时间

我们接下来写代码就从这两方面下手

import turtle

import time

这两行相信即使是编程小白也是可以看懂的,就是引入了两个模块,分别是turtle海龟库和时间库。

Python语言中我们要在开始引入我们需要用到的标准库的时候的语法是:

import

def drawGap():

turtle.penup()

turtle.fd(5)

这里定义了一个函数,Python语言中定义函数的格式是:

def ():

我们这个函数是为了绘制数码管之间的间隙,所以命名是drawGap()

在这里先介绍几个turtle库中的常用函数:

turtle.setup(650,350,200,200)

#启动窗口的大小和位置(注意这里参数的数值是指像素)

#(参数:窗口宽度,窗口高度(窗口大小参数),x坐标,y坐标(位置))

turtle.penup()

#海龟飞行 画笔抬起。将海龟从画布上抬起,接下来画笔的移动轨迹不会不会画在画布上

turtle.pendown()

#海龟爬行 画笔放下。将飞起的海龟重新放回画布,这样移动轨迹就留在了画布上

(上面这两个函数是一对函数,分别是抬起和放下,我们要绘制移动轨迹,就要turtle是在画布上爬行,要是不绘制轨迹,就要turtle飞起哦~~~

turtle.fd(k)

#海龟直线前进k个像素

turtle.circle(r,angle)

#海龟从当前位置以半径为r,行走一个angle角度的弧线,其中angle为正数则逆时针行走,负数则顺时针行走

turtle.pensize(d) =turtle.width(d)

#海龟腰围 画笔的宽度为d个像素

ps:与函数width()功能完全一样

turtle.pencolor("purple")

#海龟变色 画笔颜色

'''

pencolor()

参数可以有三种形式

1.颜色字符串 "purple"

2.RGB小数值 0.63,0.13.0.94

3.RGB的元组值 (0.63,0.13.0.94)

系统默认使用0-1的小数值来刻画RGB

.colormode(mode)可以改变小数值或整数值来表示RGB

1.0代表小数值模式

255代表整数值模式

'''

turtle.seth(-40)

#方向控制函数

seth()将海龟当前方向转变成绝对坐标下的角度(就按照我们的平面直角坐标系看就可以了)

此外还有两种海龟坐标转向的方法分别是:

turtlre.left(angle)

turtle.right(angle)

他们的作用就是看着在海龟当前行进方向下左转或右转一个角度。

这三个函数我们可以想象生活中的实例,seth()就像是我们知道的东南西北,不管我们人想那个方向走,这四个方向是不会变的。然后left()和right()就是我们自己行走过程的←和→,这方向是随着我们发生变化的。

好啦,turtle的函数就介绍到这里喽~

我们来看一下数码管怎么画:

首先要会绘制一条线,一条线包括两端的Gap()段和中间的实线段

def drawLine(draw):

drawGap()

turtle.pendown() if draw else turtle.penup()

turtle.fd(40)

drawGap()

turtle.right(90)

这里就是画线段的函数drawLine()

其中 turtle.pendown() if draw else turtle.penup()是而语句分支结构的紧凑形式,

表达的就是如果draw是True,我们就将turtle放到画布上,如果是False,我们将turtle抬起,那么我们走的路径就不会出现在画布上。

到这一步我们就可以实现七段数码管的任意段数的绘制,下面我们就画各种数字(0-9):

def drawDigit(digit):

drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,6,8] else drawLine(False)

turtle.left(90)

drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)

drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)

turtle.left(180)

turtle.penup()

turtle.fd(20)

这个地方需要我们对着各个数字,按照上面那个图片的1-7的顺序来绘制每个数字。

经过上面的三个函数,我们就实现了数字的绘制,我们的第一个任务就完成了,到这可以小小庆祝一波,我们已经完成了50%的工作♪(^∀^●)ノ

今天先到这里了有点小累,明天再继续,我先把源代码奉上:

import turtle

import time

def drawGap():

turtle.penup()

turtle.fd(5)

def drawLine(draw):

drawGap()

turtle.pendown() if draw else turtle.penup()

turtle.fd(40)

drawGap()

turtle.right(90)

def drawDigit(digit):

drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,6,8] else drawLine(False)

turtle.left(90)

drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)

drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)

turtle.left(180)

turtle.penup()

turtle.fd(20)

def drawDate(date):

turtle.pencolor("gold") if date[-1]=='@' else turtle.pencolor("red")

for i in date:

if i=='-':

turtle.right(90)

turtle.fd(18)

turtle.left(90)

turtle.write('年',font=("Arial",18,"normal"))

turtle.pencolor("green")

turtle.left(90)

turtle.fd(18)

turtle.right(90)

turtle.fd(40)

elif i=='=':

turtle.right(90)

turtle.fd(18)

turtle.left(90)

turtle.write('月',font=("Arial",18,"normal"))

turtle.pencolor("blue")

turtle.left(90)

turtle.fd(18)

turtle.right(90)

turtle.fd(40)

elif i== '+':

turtle.right(90)

turtle.fd(18)

turtle.left(90)

turtle.write('日',font=("Arial",18,"normal"))

turtle.pencolor("brown")

turtle.left(90)

turtle.fd(18)

turtle.right(90)

turtle.fd(40)

elif i== '

turtle.right(90)

turtle.fd(18)

turtle.left(90)

turtle.write('时',font=("Arial",18,"normal"))

turtle.pencolor("purple")

turtle.left(90)

turtle.fd(18)

turtle.right(90)

turtle.fd(40)

elif i== '>':

turtle.right(90)

turtle.fd(18)

turtle.left(90)

turtle.write('分',font=("Arial",18,"normal"))

turtle.left(90)

turtle.fd(18)

turtle.right(90)

turtle.fd(40)

elif i== '@':

turtle.pencolor("gold")

turtle.right(90)

turtle.fd(18)

turtle.left(90)

turtle.write('秒',font=("Arial",18,"normal"))

turtle.left(90)

turtle.fd(18)

turtle.right(90)

else:

drawDigit(eval(i))

def main():

turtle.setup(1600,350,200,200)

turtle.speed("fastest")

turtle.penup()

turtle.fd(-600)

turtle.pensize(5)

drawDate(time.strftime('%Y-%m=%d+%H',time.localtime()))

drawDate(time.strftime('%S@',time.localtime()))

turtle.hideturtle()

turtle.done()

main()

你的赞同和喜欢可以留下一个嘛 (≧▽≦)

更多推荐

python数码管显示日期

本文发布于:2024-03-07 17:16:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718420.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:日期   数码管   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!