python大作业——利用turtle实现七段数码管(个人整理总结)

一、大作业内容要求:

        (1)读取文件中的学生信息并利用turtle输出文件中的学生学号

        (2)利用random随机生成四位验证码写入文件

        (3)turtle库绘制显示学生信息以及日期****年*月*日

*注:前两个功能实现为一个.py文件,后一个功能实现为一个.py文件

二、代码及实现

(1)、读取文件信息并修改输出学生信息


# 绘制学生信息
def draw_student_info(student_info):
    turtle.penup()
    turtle.goto(-100, 0)
    turtle.pendown()
    turtle.write(student_info, align='left', font=('Arial', 16, 'normal'))

# 读取学生信息
def read_student_info():
    with open('student_info.txt', 'r') as file:
        return file.read()

# 写入学生信息
def write_student_info(student_info):
    with open('student_info.txt', 'w') as file:
        file.write(student_info)

# 修改学生信息
def modify_student_info():
    student_info = read_student_info()
    new_info = input("请输入新的学生信息:")
    write_student_info(new_info)
    return new_info
#

输出显示内容:

(2)、利用random库实现验证码并随机输出,同时读取文件中的学生信息


# 生成验证码
# 引用random库随机生成验证码
import random
def generate_verification_code(length):
    characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    code = ''
    for i in range(length):
        code += random.choice(characters)
    return code
#

输出显示内容:

(3)、turtle画笔绘制数码管

主代码:

import turtle
import time
import re


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):
    # data为日期,格式为'%Y-%m=%d+'
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('年', font=("Arial", 18, "normal"))
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=':
            turtle.write('月', font=("Arial", 18, "normal"))

            turtle.fd(40)
        elif i == '+':
            turtle.write('日', font=("Arial", 18, "normal"))
            turtle.pencolor("blue")
            turtle.fd(40)
        else:
            drawDigit(eval(i))


# 画学生信息
def draw_other():
    # 打开txt文件
    with open('SY.txt', 'r', encoding='utf-8') as f:
        content = f.read()
    # 正则表达式匹配数字和汉字(网上的方法)
    num_list = re.findall(r'\d+', content)
    chn_list = re.findall(r'[\u4e00-\u9fa5]+', content)
    # 画学号那一行
    turtle.pencolor("cyan")  # 天蓝色
    turtle.penup()
    turtle.goto(-600, 200)
    turtle.pendown()
    turtle.write("学号:", font=("Arial", 60, "normal"))
    turtle.penup()
    turtle.goto(-340, 240)
    turtle.pendown()
    drawDate(num_list[0])

    # 画姓名那一行
    turtle.pencolor("black")
    turtle.penup()
    turtle.goto(-620, 60)
    turtle.pendown()
    turtle.write("姓名:", font=("Arial", 60, "normal"))
    turtle.penup()
    turtle.goto(-340, 60)
    turtle.pendown()
    turtle.write(chn_list[0], font=("Arial", 60, "normal"))

    # 画班级那一行
    turtle.pencolor("blue")
    turtle.penup()
    turtle.goto(-40, 60)
    turtle.pendown()
    turtle.write("专业:", font=("Arial", 60, "normal"))
    turtle.penup()
    turtle.goto(240, 60)
    turtle.pendown()
    turtle.write(chn_list[1], font=("Arial", 60, "normal"))
    turtle.penup()
    turtle.goto(50, 100)

    # 时间那一行
    turtle.pendown()
    turtle.pencolor("gold")
    turtle.penup()
    turtle.goto(-600, -100)
    turtle.pendown()
    turtle.write("时间:", font=("Arial", 60, "normal"))
    turtle.penup()
    turtle.goto(-600, -180)
    turtle.pendown()
    drawDate(time.strftime('%Y-%m=%d+', time.gmtime()))


def main():
    turtle.setup(900, 400, 200, 200)
    turtle.speed(0)
    turtle.pensize(5)
    draw_other()
    turtle.penup()  # 抬起画笔
    turtle.goto(-480, -200)  # 移动到起始点
    turtle.pendown()  # 放下画笔
    turtle.pensize(4)
    # drawDate(time.strftime('%Y-%m=%d+%H*%M/%S!',time.gmtime()))
    # 加上会循环显示时间
    turtle.hideturtle()  # 隐藏画笔标志
    turtle.exitonclick()
    turtle.done()  # 保留绘图界面,直到手动关闭


main()

SY_txt(内含的学生个人信息为提前预设,验证码为random自动生成并写入)

202334829183,巴拉巴拉,计科
验证码:
9623

输出显示内容:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值