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
输出显示内容:
作者:鱼丸粗面yuwan