第四次课-python

7.1

# 导入需要的模块
import turtle  # 使用turtle库来绘制图形
import datetime  # 使用datetime库来获取当前日期和时间

def drawLine(draw):
    """ 绘制单段数码管 """
    # 根据传入的参数决定是否落笔绘制直线
    turtle.pendown() if draw else turtle.penup()  # 如果draw为True,则落笔;否则抬笔
    turtle.fd(40)  # 绘制直线,长度为40
    turtle.right(90)  # 向右转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):
    """ 绘制日期 """
    # 遍历日期中的每个数字,并调用drawDigit函数绘制七段数码管
    for i in date:
        drawDigit(eval(i))  # 通过eval()函数将数字字符转换为整数

def main():
    """ 主函数 """
    # 设置画布尺寸和位置
    turtle.setup(800, 350, 200, 200)
    turtle.penup()  # 抬笔
    turtle.fd(-300)  # 向左移动300像素
    turtle.pensize(5)  # 设置笔的粗细为5像素
    # 获取当前日期并绘制
    drawDate(datetime.datetime.now().strftime('%Y%m%d'))  # 格式化当前日期为字符串,并绘制
    turtle.hideturtle()  # 隐藏海龟图标

# 调用主函数
main()

7.2

# 导入需要的模块
import turtle  # 使用turtle库来绘制图形
import datetime  # 使用datetime库来获取当前日期和时间

def drawGap():
    """ 绘制数码管之间的间隔 """
    turtle.penup()  # 抬笔
    turtle.fd(5)  # 向前移动5个像素,用于创建间隔

def drawLine(draw):
    """ 绘制单段数码管 """
    drawGap()  # 绘制间隔
    turtle.pendown() if draw else turtle.penup()  # 如果draw为True,则落笔绘制;否则抬笔
    turtle.fd(40)  # 绘制直线,长度为40
    drawGap()  # 绘制间隔
    turtle.right(90)  # 向右转90度

def drawDigit(d):
    """ 根据数字绘制七段数码管 """
    drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if d in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if d 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("red")  # 设置画笔颜色为红色
    for i in date:
        if i == '-':  # 如果是'-',则代表年份的分隔符
            turtle.write('年',font=("Arial", 18, "normal"))  # 在画布上写入'年'字
            turtle.pencolor("green")  # 设置画笔颜色为绿色
            turtle.fd(40)  # 向前移动40个像素,为月份的数字预留位置
        elif i == '=':  # 如果是'=',则代表月份的分隔符
            turtle.write('月',font=("Arial", 18, "normal"))  # 在画布上写入'月'字
            turtle.pencolor("blue")  # 设置画笔颜色为蓝色
            turtle.fd(40)  # 向前移动40个像素,为日期的数字预留位置
        elif i == '+':  # 如果是'+',则代表日期的分隔符
            turtle.write('日',font=("Arial", 18, "normal"))  # 在画布上写入'日'字
        else:  # 否则是数字字符
            drawDigit(eval(i))  # 调用drawDigit函数绘制七段数码管

def main():
    """ 主函数 """
    turtle.setup(800, 350, 200, 200)  # 设置画布大小和位置
    turtle.penup()  # 抬笔
    turtle.fd(-350)  # 向左移动350个像素
    turtle.pensize(5)  # 设置笔的宽度为5像素
    drawDate(datetime.datetime.now().strftime('%Y-%m=%d+'))  # 获取当前日期并绘制
    turtle.hideturtle()  # 隐藏海龟图标

# 调用主函数
main()

3-21

# 夜阑专用捏
# 开发时间:2024/3/21 15:32}
def happy2(name):
    print("{}超棒!".format(name))
happy2("我")

#lambda函数 Python的有33个保留字,其中一个是lambda,该保留字用于定义一种特殊的函数——匿名函数,又称lambda函数。
#匿名函数并非没有名字,而是将函数名作为函数结果返回
f = lambda x, y : x + y
print(type(f),f(10, 12))



def dup(abc,times=3):#传参 定义默认值
    print(abc*times)
dup("下班!")
dup("下班!",10)

#在函数定义时,可以设计可变数量参数,通过参数前增加星号(*)实现
def vfunc(a, *b):
    print(type(b))
    for n in b:
        a += n
    return a
vfunc(1, 2, 3, 4, 5)

#全局变量
n = 1    #n是全局变量
def func(a, b):
    global n
    n = b     #将局部变量b赋值给全局变量n
    return a*b
s = func("knock~", 2)
print(s, n)

from datetime import datetime#时间库
now = datetime.now()
now.strftime("%Y-%m-%d")
now.strftime("%A, %d. %B %Y %I:%M%p")
print("今天是{0:%Y}年{0:%m}月{0:%d}日,我掐指一算今天适合喝奶茶".format(now))
import tkinter as tk
import time
class DesktopClock(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Desktop Clock")
        self.geometry("200x100+0+0")  # 设置窗口大小和位置(左上角)

        self.date_label = tk.Label(self, font=("Arial", 14), bg="black", fg="white")
        self.date_label.pack(side=tk.TOP, fill=tk.X)

        self.time_label = tk.Label(self, font=("Arial", 24), bg="black", fg="white")
        self.time_label.pack(side=tk.BOTTOM, fill=tk.X)

        self.update_clock()
    def update_clock(self):
        current_date = time.strftime("%Y-%m-%d")
        current_time = time.strftime("%H:%M:%S")
        self.date_label.config(text=current_date)
        self.time_label.config(text=current_time)
        self.date_label.after(1000, self.update_clock)  # 每隔一秒更新一次时间
if __name__ == "__main__":
    clock = DesktopClock()
    clock.mainloop()
 

 

老师传的3-21文件

#print("Happy birthday to you!","\n","Happy birthday to you!","\n","Happy birthday,dear Mike!","\n","Happy birthday to you!")

# def happy():
#     print("Happy birthday to you!")
# def happy2(name):
#     print("Happy birthday,dear {}!".format(name))

# happy()
# happy()
# happy2("Lily")
# happy()


# f= lambda x,y:x+y

# print("f(10,20)=",f(10,20))


# def dup(str,times=3):
#     print(str*times)
# dup("knock~")

# dup("knock~",7)


# def myfunc(a,*b):
#     # print(type(b))
#     for n in b:
#         a += n
#     return a
# myfunc(1,2,3,4,5,6)

# print(myfunc(1,2,3,4,5,6))

# n=1
# def func(a,b):
#     global n
#     n=b
#     return a*b
# s=func("knock~",6)
# print(s,n)

# import datetime
# print(datetime.date.today())
# print(datetime.time())

# import datetime
# current_datetime = datetime.datetime.now()
# print(current_datetime)


# from datetime import datetime
# current_datetime = datetime.now()
# print(current_datetime)

from turtle import *
from datetime import *
import time

def skip(t:Turtle,step=5):
    # 这里定义了一个新的turtle操作,跳跃,默认画出小间隔
    # 确保之后小乌龟都是以pendown,然后白的靠跳
    t.penup()
    t.forward(step)
    t.pendown()
def digital_tuber(ignitor,t:Turtle):
    # 画出一个数码管(6边形),但是不注册它,颜色由外部控制
    # 小乌龟会在自己面朝的方向(正中)上画出一个数码管
    temp = t.pensize()
    t.pensize(2)
    skip(t)
    if ignitor:
        # ignitor用于控制是否进行画图,不然就是空白管
        t.pendown()
        t.begin_fill()
        t.begin_poly()
        for i in range(2):
            t.left(30)
            t.forward(5)
            t.right(30)
            t.forward(32)
            t.right(30)
            t.forward(5)
            t.right(150)
        t.end_poly()
        t.end_fill()
        skip(t,40)
    else:
        skip(t,40)
    skip(t)
    t.pensize(temp)
    # 还原
def digital_maker(digit:int,t:Turtle):
    # 画出数码管构成数字,然后在每次显示的时候对一个图像刷新
    # 用一个函数来实现所有数字
    t.left(90)    # 因为我们采取的是默认的模式,而不是logo
    t.pendown()
    # 画出管的实现
    digital_tuber(True,t) if digit in [0, 1, 4, 5, 6, 8, 9] else digital_tuber(False,t)
    t.right(90)
    digital_tuber(True,t) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else digital_tuber(False,t)
    t.right(90)
    digital_tuber(True,t) if digit in [0, 2, 3, 4, 7, 8, 9] else digital_tuber(False,t)
    digital_tuber(True,t) if digit in [0, 3, 4, 5, 6, 7, 8, 9] else digital_tuber(False,t)
    t.right(90)
    digital_tuber(True,t) if digit in [0, 2, 3, 5, 6, 8, 9] else digital_tuber(False,t)
    t.right(90)
    digital_tuber(True,t) if digit in [0, 1, 2, 6, 8,] else digital_tuber(False,t)
    t.right(90)
    digital_tuber(True,t) if digit in [2, 3, 4, 5, 6, 8, 9] else digital_tuber(False,t)
def show_number(n:int,t:Turtle):
    # 用于画出数字
    n = str(n)
    for i in n:
        digital_maker(int(i),t)
        skip(t,20)
def setframe():
    # 画出程序的外框,和文字
    t = Turtle()
    t.hideturtle()
    # 框架的画出不参与刷新,所以我们不需要外部turtle
    t.begin_poly()
    t.pensize(10)
    t.penup()
    t.goto(-450,250)
    t.pendown()
    t.goto(450,250)
    t.goto(450,-250)
    t.goto(-450,-250)
    t.goto(-450,250)
    t.penup()
    t.end_poly()
def drawDate(date,t:Turtle):
    # 日期处理,将我们得到的时间,如何以格式化输出
    t.penup()
    t.pendown()
    t.pencolor("red")
    for i in date:
        if i == "-":
            t.write("年",font=("Arial",18,"normal"))
            t.pencolor("green")
            skip(t,40)
        elif i == "=":
            t.write("月",font=("Arial",18,"normal"))
            t.pencolor("blue")
            skip(t,40)
        elif i == "+":
            t.write("日",font=("Arial",18,"normal"))
        elif i == ":":
            t.write(":", font=("Arial", 36, "normal"))
            skip(t,40)
        else:
            show_number(eval(i),t)
            # 将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果
def show_date(t:Turtle):
    t.reset()
    t.penup()
    t.goto(-325,100)
    t.pendown()
    # 用time模组得时间
    drawDate(time.strftime("%Y-%m=%d+",time.gmtime()),t)
def show_hours(t:Turtle):
    # 画出下方的精确时间的函数
    t.reset()
    t.penup()
    t.goto(-275, -100)
    t.pendown()
    temp = datetime.today()
    h = temp.hour
    m = temp.minute
    s = temp.second
    # 确保是两位数的格式
    if h <= 9:
        h = '0'+str(h)
    else:
        h = str(h)
    if m <= 9:
        m = '0' + str(m)
    else:
        m = str(m)
    if s <= 9:
        s = '0' + str(s)
    else:
        s = str(s)
    drawDate(h+':'+m+':'+s,t)
def defaultsetter():
    # 用于初始化我们的画图体系
    global dater, framer    # 在重置阶段就申明好乌龟,就不要多次申明了
    # 实际上我想做的优化就是让许多只小乌龟去画,就可以减少刷心负担
    tracer(0)
    screensize(1000, 600)
    framer = Turtle()
    framer.hideturtle()
    dater = Turtle()
    dater.hideturtle()
def resh_hour():
    # 两个大函数的递归调用,为了区别刷新频率
    dater.reset()
    show_hours(dater)
    ontimer(resh_hour,1000)
    # 刷新基础时间,间隔为一秒
def resh_date():
    framer.reset()
    show_date(framer)
    ontimer(resh_date,10000)
    # 刷新日期时间,间隔为10秒
def main():
    defaultsetter()
    setframe()
    resh_date()
    resh_hour()
    mainloop()
if __name__ == '__main__':
    main()

我的作业-示例 如需使用请修改细节

龙圆芝-3-21

 

 

版权声明:
作者:夜阑
链接:http://yelan.xyz/index.php/2024/03/21/%e7%ac%ac%e5%9b%9b%e6%ac%a1%e8%af%be-python/
来源:夜阑的小站
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>