背景
turtle — Turtle graphics 中提供了关于 模块的介绍。我想用 来生成些简单的图案,以巩固学习的效果。北欧五国(即,瑞典、芬兰、挪威、丹麦、冰岛)的国旗图案比较简单,可以从这些国旗开始
要点
北欧五国的位置如下图所示
这五个国家的国旗是这样的 ⬇️
考虑到瑞典、芬兰、丹麦的国旗的模式更为简单,本文会先分析瑞典国旗的绘制方法。有了瑞典国旗作为基础,只需要对代码做少量修改,就可以画出芬兰国旗和丹麦国旗。
在此基础上,我们可以画出挪威国旗和冰岛国旗。
正文
瑞典国旗
基本数据
根据 Sweden 网页所提供的信息,瑞典国旗中各部分的比例如下图所示
我在别的网站上搜到了瑞典国旗中,蓝色和黄色的具体数值(下图中给出了两组数值,我们就用 那一组吧)。
代码
我的整体思路是这样的 ⬇️
- 先画出一个蓝色的矩形
- 再画出黄色十字的那一横
- 再画出黄色十字的那一竖
在此基础上,可以写出完整的 代码 ⬇️ (trae 提供了一些帮助)
import turtle
# ===================== 常量定义 =====================
BLUE = "#005583"
YELLOW = "#FFC200"
# 瑞典国旗的比例(5:2:9 / 4:2:4)
LEFT_FIELD = 5
CROSS_WIDTH = 2
RIGHT_FIELD = 9
TOP_FIELD = 4
BOTTOM_FIELD = 4
RATIO = 40
WIDTH = (LEFT_FIELD + CROSS_WIDTH + RIGHT_FIELD) * RATIO
HEIGHT = (TOP_FIELD + CROSS_WIDTH + BOTTOM_FIELD) * RATIO
def draw_rectangle(start_x, start_y, width, height, color):
turtle.teleport(start_x, start_y)
turtle.setheading(0)
turtle.color(color, color)
with turtle.fill():
for side in (width, height, width, height):
turtle.forward(side)
turtle.right(90)
def main():
# 蓝色背景
draw_rectangle(
-WIDTH // 2, HEIGHT // 2,
WIDTH, HEIGHT, BLUE
)
# 黄色水平横条
draw_rectangle(
-WIDTH // 2, (CROSS_WIDTH * RATIO) // 2,
WIDTH, CROSS_WIDTH * RATIO, YELLOW
)
# 黄色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO, HEIGHT // 2,
CROSS_WIDTH * RATIO, HEIGHT, YELLOW
)
turtle.hideturtle()
turtle.mainloop()
if __name__ == "__main__":
main()
请将以上 程序保存为 。使用如下命令可以运行
python3 draw_sweden_national_flag.py
运行时的效果示意图如下
最终的效果如下
芬兰国旗
基本数据
根据 Finland 网页所提供的信息,芬兰国旗中各部分的比例如下图所示
我在别的网站上搜到了芬兰国旗中,白色和蓝色的具体数值 ⬇️
代码
上文已经展示了瑞典国旗的绘制方式,我们可以用类似的方式来绘制芬兰国旗 ⬇️
- 先画出一个白色的矩形
- 再画出蓝色十字的那一横
- 再画出蓝色十字的那一竖
在此基础上,可以写出完整的 代码 ⬇️ (trae 提供了一些帮助)
import turtle
# ===================== 常量定义 =====================
WHITE = "#FFFFFF"
BLUE = "#002F6C"
# 芬兰国旗的比例(5:3:10 / 4:3:4)
LEFT_FIELD = 5
CROSS_WIDTH = 3
RIGHT_FIELD = 10
TOP_FIELD = 4
BOTTOM_FIELD = 4
RATIO = 30
WIDTH = (LEFT_FIELD + CROSS_WIDTH + RIGHT_FIELD) * RATIO
HEIGHT = (TOP_FIELD + CROSS_WIDTH + BOTTOM_FIELD) * RATIO
def draw_rectangle(start_x, start_y, width, height, color):
turtle.teleport(start_x, start_y)
turtle.setheading(0)
if color == WHITE:
turtle.color("black", color)
else:
turtle.color(color, color)
with turtle.fill():
for side in (width, height, width, height):
turtle.forward(side)
turtle.right(90)
def main():
# 白色背景
draw_rectangle(
-WIDTH // 2, HEIGHT // 2,
WIDTH, HEIGHT, WHITE
)
# 蓝色水平横条
draw_rectangle(
-WIDTH // 2, HEIGHT // 2 - TOP_FIELD * RATIO,
WIDTH, CROSS_WIDTH * RATIO, BLUE
)
# 蓝色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO, HEIGHT // 2,
CROSS_WIDTH * RATIO, HEIGHT, BLUE
)
turtle.hideturtle()
turtle.mainloop()
if __name__ == "__main__":
main()
请将以上 程序保存为 。使用如下命令可以运行
python3 draw_finland_national_flag.py
运行时的效果示意图如下
最终的效果如下
丹麦国旗
基本数据
根据 Denmark 网页所提供的信息,丹麦国旗中各部分的比例如下图所示
我在别的网站上搜到了丹麦国旗中,红色、白色的具体数值 ⬇️
代码
上文已经展示了瑞典国旗和芬兰国旗的绘制方式,我们可以用类似的方式来绘制丹麦国旗 ⬇️
- 先画出一个红色的矩形
- 再画出白色十字的那一横
- 再画出白色十字的那一竖
在此基础上,可以写出完整的 代码 ⬇️ (trae 提供了一些帮助)
import turtle
# ===================== 常量定义 =====================
RED = "#D21034"
WHITE = "#FFFFFF"
# 丹麦国旗的比例(12:4:21 / 12:4:12)
LEFT_FIELD = 12
CROSS_WIDTH = 4
RIGHT_FIELD = 21
TOP_FIELD = 12
BOTTOM_FIELD = 12
RATIO = 10
WIDTH = (LEFT_FIELD + CROSS_WIDTH + RIGHT_FIELD) * RATIO
HEIGHT = (TOP_FIELD + CROSS_WIDTH + BOTTOM_FIELD) * RATIO
def draw_rectangle(start_x, start_y, width, height, color):
turtle.teleport(start_x, start_y)
turtle.setheading(0)
turtle.color(color, color)
with turtle.fill():
for side in (width, height, width, height):
turtle.forward(side)
turtle.right(90)
def main():
# 红色背景
draw_rectangle(
-WIDTH // 2, HEIGHT // 2,
WIDTH, HEIGHT, RED
)
# 白色水平横条
draw_rectangle(
-WIDTH // 2, (CROSS_WIDTH * RATIO) // 2,
WIDTH, CROSS_WIDTH * RATIO, WHITE
)
# 白色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO, HEIGHT // 2,
CROSS_WIDTH * RATIO, HEIGHT, WHITE
)
turtle.hideturtle()
turtle.mainloop()
if __name__ == "__main__":
main()
请将以上 程序保存为 。使用如下命令可以运行
python3 draw_denmark_national_flag.py
运行时的效果示意图如下
最终的效果如下
挪威国旗
基本数据
根据 Norway 网页所提供的信息,挪威国旗中各部分的比例如下图所示
我在别的网站上搜到了挪威国旗中,红色、白色和蓝色的具体数值 ⬇️
代码
上文已经展示了瑞典国旗、芬兰国旗、丹麦国旗的绘制方式,我们可以用类似的方式来绘制挪威国旗 ⬇️
- 先画出一个红色的矩形
- 再画出白色十字
- 再画出蓝色十字
在此基础上,可以写出完整的 代码 ⬇️ (trae 提供了一些帮助)
import turtle
# ===================== 常量定义 =====================
WHITE = "#FFFFFF"
BLUE = "#003698"
RED = "#D21034"
# 挪威国旗的比例(6:1:2:1:12 / 6:1:2:1:6)
LEFT_FIELD = 6
BIG_CROSS_WIDTH = 4
SMALL_CROSS_WIDTH = 2
CROSS_GAP_WIDTH = 1
RIGHT_FIELD = 12
TOP_FIELD = 6
BOTTOM_FIELD = 6
RATIO = 30
WIDTH = (LEFT_FIELD + BIG_CROSS_WIDTH + RIGHT_FIELD) * RATIO
HEIGHT = (TOP_FIELD + BIG_CROSS_WIDTH + BOTTOM_FIELD) * RATIO
def draw_rectangle(start_x, start_y, width, height, color):
turtle.teleport(start_x, start_y)
turtle.setheading(0)
turtle.color(color, color)
with turtle.fill():
for side in (width, height, width, height):
turtle.forward(side)
turtle.right(90)
def main():
# 红色背景
draw_rectangle(
-WIDTH // 2, HEIGHT // 2,
WIDTH, HEIGHT, RED
)
# 白色水平横条
draw_rectangle(
-WIDTH // 2, HEIGHT // 2 - TOP_FIELD * RATIO,
WIDTH, BIG_CROSS_WIDTH * RATIO, WHITE
)
# 白色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO, HEIGHT // 2,
BIG_CROSS_WIDTH * RATIO, HEIGHT, WHITE
)
# 蓝色水平横条
draw_rectangle(
-WIDTH // 2, HEIGHT // 2 - TOP_FIELD * RATIO - CROSS_GAP_WIDTH * RATIO,
WIDTH, SMALL_CROSS_WIDTH * RATIO, BLUE
)
# 蓝色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO
+ CROSS_GAP_WIDTH * RATIO, HEIGHT // 2,
SMALL_CROSS_WIDTH * RATIO, HEIGHT, BLUE
)
turtle.hideturtle()
turtle.mainloop()
if __name__ == "__main__":
main()
请将以上 程序保存为 。使用如下命令可以运行
python3 draw_norway_national_flag.py
运行时的效果示意图如下
最终的效果如下
冰岛国旗
基本数据
根据 Iceland 网页所提供的信息,冰岛国旗中各部分的比例如下图所示
我在别的网站上搜到了挪威国旗中,红色、白色和蓝色的具体数值 ⬇️
代码
上文已经展示了挪威国旗的绘制方式,我们可以用类似的方式来绘制冰岛国旗 ⬇️
- 先画出一个蓝色的矩形
- 再画出白色十字
- 再画出红色十字
在此基础上,可以写出完整的 代码 ⬇️ (trae 提供了一些帮助)
import turtle
# ===================== 常量定义 =====================
WHITE = "#FFFFFF"
BLUE = "#02529C"
RED = "#DC1E35"
# 冰岛国旗的比例(7:1:2:1:14 / 7:1:2:1:7)
LEFT_FIELD = 7
BIG_CROSS_WIDTH = 4
SMALL_CROSS_WIDTH = 2
CROSS_GAP_WIDTH = 1
RIGHT_FIELD = 14
TOP_FIELD = 7
BOTTOM_FIELD = 7
RATIO = 20
WIDTH = (LEFT_FIELD + BIG_CROSS_WIDTH + RIGHT_FIELD) * RATIO
HEIGHT = (TOP_FIELD + BIG_CROSS_WIDTH + BOTTOM_FIELD) * RATIO
def draw_rectangle(start_x, start_y, width, height, color):
turtle.teleport(start_x, start_y)
turtle.setheading(0)
turtle.color(color, color)
with turtle.fill():
for side in (width, height, width, height):
turtle.forward(side)
turtle.right(90)
def main():
# 蓝色背景
draw_rectangle(
-WIDTH // 2, HEIGHT // 2,
WIDTH, HEIGHT, BLUE
)
# 白色水平横条
draw_rectangle(
-WIDTH // 2, HEIGHT // 2 - TOP_FIELD * RATIO,
WIDTH, BIG_CROSS_WIDTH * RATIO, WHITE
)
# 白色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO, HEIGHT // 2,
BIG_CROSS_WIDTH * RATIO, HEIGHT, WHITE
)
# 红色水平横条
draw_rectangle(
-WIDTH // 2, HEIGHT // 2 - TOP_FIELD * RATIO - CROSS_GAP_WIDTH * RATIO,
WIDTH, SMALL_CROSS_WIDTH * RATIO, RED
)
# 红色垂直竖条
draw_rectangle(
-WIDTH // 2 + LEFT_FIELD * RATIO
+ CROSS_GAP_WIDTH * RATIO, HEIGHT // 2,
SMALL_CROSS_WIDTH * RATIO, HEIGHT, RED
)
turtle.hideturtle()
turtle.mainloop()
if __name__ == "__main__":
main()
请将以上 程序保存为 。使用如下命令可以运行
python3 draw_iceland_national_flag.py
运行时的效果示意图如下
最终的效果如下