Python Turtle绘制美国国旗:多行星星实现及代码优化求助
解决美国国旗多行星星绘制问题及代码优化
优化后的完整代码
from turtle import * # 国旗尺寸常量,避免魔法数字 FLAG_WIDTH = 800 FLAG_HEIGHT = 500 STRIPE_HEIGHT = FLAG_HEIGHT / 13 # 13条条纹,每条高度相等 BLUE_RECT_WIDTH = FLAG_WIDTH * 0.4375 # 蓝色区域宽度为国旗宽的0.4375倍 BLUE_RECT_HEIGHT = FLAG_HEIGHT * 7 / 13 # 覆盖7条条纹的高度 STAR_SIZE = 20 STAR_HORIZONTAL_SPACING = BLUE_RECT_WIDTH / 6 # 6颗星的横向间距 STAR_VERTICAL_SPACING = BLUE_RECT_HEIGHT / 9 # 9行星星的纵向间距 setup(FLAG_WIDTH, FLAG_HEIGHT) shape("turtle") speed(0) hideturtle() # 提前隐藏海龟,避免绘制过程中干扰视觉 # 绘制单条条纹 def draw_stripe(x, y, color_name): penup() goto(x, y) pendown() color(color_name) begin_fill() for _ in range(2): forward(FLAG_WIDTH) right(90) forward(STRIPE_HEIGHT) right(90) end_fill() # 绘制7条红色条纹(对应奇数行位置) start_x = -FLAG_WIDTH / 2 start_y = FLAG_HEIGHT / 2 for i in range(7): draw_stripe(start_x, start_y - i * 2 * STRIPE_HEIGHT, "red") # 绘制蓝色矩形区域 def draw_blue_rect(): penup() goto(start_x, start_y) pendown() color("blue") begin_fill() for _ in range(2): forward(BLUE_RECT_WIDTH) right(90) forward(BLUE_RECT_HEIGHT) right(90) end_fill() draw_blue_rect() # 绘制单颗星星 def draw_star(x, y): penup() goto(x, y) pendown() color("white") begin_fill() for _ in range(5): forward(STAR_SIZE) right(144) end_fill() # 绘制一行星星,参数为起始坐标和星星数量 def draw_star_row(start_x, start_y, star_count): current_x = start_x for _ in range(star_count): draw_star(current_x, start_y) current_x += STAR_HORIZONTAL_SPACING # 绘制9行交错排列的星星 star_start_x = start_x + STAR_HORIZONTAL_SPACING / 2 # 水平居中偏移 star_start_y = start_y - STAR_VERTICAL_SPACING / 2 # 垂直居中偏移 for row in range(9): if row % 2 == 0: # 偶数行绘制6颗星星 draw_star_row(star_start_x, star_start_y - row * STAR_VERTICAL_SPACING, 6) else: # 奇数行绘制5颗星星,且水平偏移半个间距 draw_star_row(star_start_x + STAR_HORIZONTAL_SPACING / 2, star_start_y - row * STAR_VERTICAL_SPACING, 5) done()
多行星星实现逻辑
美国国旗蓝色区域内的星星为9行交错排列:
- 偶数行(第0、2、4、6、8行)每行6颗星星,从初始水平偏移位置开始绘制
- 奇数行(第1、3、5、7行)每行5颗星星,起始位置比偶数行多半个横向间距,保证交错对齐
- 通过循环遍历9行,根据行号奇偶性切换星星数量和起始坐标,完成所有星星绘制
代码优化点
- 常量替代魔法数字:把国旗尺寸、元素比例等定义为常量,方便后续调整和维护
- 函数模块化拆分:将条纹、蓝色区域、单颗星星、星星行拆分为独立函数,逻辑更清晰
- 比例化坐标计算:基于国旗总尺寸动态计算各元素位置,符合美国国旗的官方比例规范
- 提前隐藏海龟:初始化阶段就隐藏海龟,避免绘制过程中图形干扰
内容的提问来源于stack exchange,提问作者정경원
相关产品推荐
相关产品推荐

