python123第五周作业12题
import turtle
import time
import datetime
COLORS = {
'year': 'red',
'month': 'blue',
'day': 'green',
'hour': 'purple',
'minute': 'orange'
}
DIGIT_SEGMENTS = [
[(0, 100), (40, 100)], # 上横
[(40, 100), (40, 60)], # 右上竖
[(40, 60), (40, 20)], # 右下竖
[(0, 20), (40, 20)], # 下横
[(0, 60), (0, 20)], # 左下竖
[(0, 100), (0, 60)], # 左上竖
[(0, 60), (40, 60)] # 中横
]
DIGIT_MAP = {
'0': [1, 1, 1, 1, 1, 1, 0],
'1': [0, 1, 1, 0, 0, 0, 0],
'2': [1, 1, 0, 1, 1, 0, 1],
'3': [1, 1, 1, 1, 0, 0, 1],
'4': [0, 1, 1, 0, 0, 1, 1],
'5': [1, 0, 1, 1, 0, 1, 1],
'6': [1, 0, 1, 1, 1, 1, 1],
'7': [1, 1, 1, 0, 0, 0, 0],
'8': [1, 1, 1, 1, 1, 1, 1],
'9': [1, 1, 1, 1, 0, 1, 1],
':': [0, 0, 0, 0, 0, 0, 1]
}
def draw_segment(start, end, color):
"""绘制单个数码管段"""
turtle.penup()
turtle.goto(start)
turtle.pendown()
turtle.color(color)
turtle.pensize(5)
turtle.goto(end)
def draw_digit(digit, position, color):
"""绘制一个数字"""
x_offset, y_offset = position
segments = DIGIT_MAP.get(digit, [0]*7)
for i, segment in enumerate(segments):
if segment:
start = (DIGIT_SEGMENTS[i][0][0] + x_offset, DIGIT_SEGMENTS[i][0][1] + y_offset)
end = (DIGIT_SEGMENTS[i][1][0] + x_offset, DIGIT_SEGMENTS[i][1][1] + y_offset)
draw_segment(start, end, color)
def draw_colon(position, color):
"""绘制冒号"""
x_offset, y_offset = position
# 上点
turtle.penup()
turtle.goto(x_offset + 20, y_offset + 80)
turtle.pendown()
turtle.color(color)
turtle.dot(8)
# 下点
turtle.penup()
turtle.goto(x_offset + 20, y_offset + 40)
turtle.pendown()
turtle.dot(8)
def draw_time():
"""绘制当前时间"""
turtle.clear()
now = datetime.datetime.now()
year_str = str(now.year) + "年"
month_str = str(now.month).zfill(2) + "月"
day_str = str(now.day).zfill(2) + "日"
hour_str = str(now.hour).zfill(2)
minute_str = str(now.minute).zfill(2)
x_pos = -200
for i, char in enumerate(year_str):
if char.isdigit():
draw_digit(char, (x_pos + i*50, 150), COLORS['year'])
else:
turtle.penup()
turtle.goto(x_pos + i*50 + 10, 130)
turtle.pendown()
turtle.color(COLORS['year'])
turtle.write(char, font=("Arial", 16, "normal"))
x_pos = -200
for i, char in enumerate(month_str):
if char.isdigit():
draw_digit(char, (x_pos + i*50, 50), COLORS['month'])
else:
turtle.penup()
turtle.goto(x_pos + i*50 + 10, 30)
turtle.pendown()
turtle.color(COLORS['month'])
turtle.write(char, font=("Arial", 16, "normal"))
x_pos = -200
for i, char in enumerate(day_str):
if char.isdigit():
draw_digit(char, (x_pos + i*50, -50), COLORS['day'])
else:
turtle.penup()
turtle.goto(x_pos + i*50 + 10, -70)
turtle.pendown()
turtle.color(COLORS['day'])
turtle.write(char, font=("Arial", 16, "normal"))
x_pos = -200
for i, char in enumerate(hour_str):
draw_digit(char, (x_pos + i*50, -150), COLORS['hour'])
draw_colon((x_pos + 100, -150), 'black')
for i, char in enumerate(minute_str):
draw_digit(char, (x_pos + 150 + i*50, -150), COLORS['minute'])
turtle.update()
turtle.ontimer(draw_time, 1000)
turtle.setup(800, 600)
turtle.hideturtle()
turtle.tracer(0)
draw_time()
turtle.done()


浙公网安备 33010602011771号