在学python的turtle库后,想到了一个画五角星的新思路。

*至少我还没在网上看见过。下面让我来给大家介绍介绍吧。
思路比较简单,使turtle自己画圆形,连续两圈,在这两圈中每过144°标记以下turtle所处的位置(调用pos方法),并将位置信息保存起来。最后用goto语句直接进行连接即可。下面看下实践操作:

import turtle
turtle.pensize(1)
turtle.up()
li=[]
# 画圆形,标记位置
for i in range(5):
    turtle.circle(-40,144)
    turtle.pencolor("red")
    turtle.down()
    turtle.dot()
    li.append(turtle.pos())

# 画五角星
turtle.goto(li[4])
for i in range(5):
    turtle.goto(li[i])

效果图:

用python绘制国旗的程序 用python turtle画一幅国旗_python


将画圆形和点的部分进行抬笔操作后,再进行填充,便可以得到五角星了。

import turtle
turtle.pensize(1)
turtle.up()
li=[]
# 画圆形,标记位置
for i in range(5):
    turtle.circle(-40,144)
    turtle.pencolor("red")

    # turtle.dot()
    li.append(turtle.pos())

# 画五角星
turtle.fillcolor("red")
turtle.begin_fill()
turtle.down()
turtle.goto(li[4])
for i in range(5):
    turtle.goto(li[i])
turtle.end_fill()

最终效果如下:

用python绘制国旗的程序 用python turtle画一幅国旗_画矩形_02

看到这里,应该都明白了吧。至于为什么这样画,主要是下面介绍稍大点的项目——画五星红旗,用我的这种方法思路比较清晰。效果图如下:

用python绘制国旗的程序 用python turtle画一幅国旗_用python绘制国旗的程序_03

import turtle
import math
turtle.pencolor("red")
turtle.fillcolor("red")
turtle.pensize(1)

#画矩形,选择的66*44比例的旗帜
turtle.begin_fill()
turtle.up()
turtle.goto(-330,-220)
turtle.down()
for i in range(2): 
    turtle.fd(660)
    turtle.left(90)
    turtle.fd(440)
    turtle.left(90)
#此时海龟坐标为-330,-220
turtle.end_fill()
#分割二象限,用于调试计算,提交时注释掉
'''turtle.up()
turtle.goto(-330,0)
turtle.down()
turtle.fd(660)

turtle.speed(0)
turtle.up()
turtle.goto(0,220)
turtle.down()
turtle.seth(-90)
turtle.fd(440)

for i in range(10):   
    turtle.up()
    turtle.goto(-330,22*i)
    turtle.seth(0)
    turtle.down()
    turtle.fd(330)


for i in range(15):   
    turtle.up()
    turtle.goto(-22*i,220)
    turtle.seth(-90)
    turtle.down()
    turtle.fd(220)

turtle.up()
turtle.goto(-220,44)# 大五角星的中心的正下方
turtle.down()
turtle.seth(0)
turtle.circle(66)
'''
#画五角星
def draw_star(x,y,a,b,rank,radis):
    turtle.fillcolor("yellow")#填充颜色
    turtle.pencolor("yellow") #画笔颜色
    turtle.up()
    pos_list=[] #存储五个点的坐标的二维列表
    turtle.goto(x,y)
    turtle.seth(0)
    if rank>0:      
        if(rank<3):#判断是上面两个星星还是下面两个星星,因为转的角度不同
            rank=2
        else:
            rank=3
        f=90*rank+math.degrees(math.atan(a/b))
    else:
        f=0;
    #print(f)
    turtle.circle(-radis,f)
    for i in range(5): #循环5次,标记五个点
        turtle.up()
        turtle.circle(-radis,144)
        #turtle.down()
        #turtle.dot()
        pos_list.append(turtle.pos())
    #print(small_pos_list)
    turtle.up()
    turtle.goto(pos_list[4])#回到起点
    turtle.begin_fill()
    turtle.down()
    for i in range(5): #开始画五角星
        turtle.goto(pos_list[i])
    turtle.end_fill()


draw_star(-220,176,0,0,0,66) #画大五角星,输入起点坐标,偏置角度0,0,规定大五角星编号为0,圆形半径为66
draw_star(-110,198,5,3,1,22) # 第一颗星星 起点在左边第5个格子,上边9个格子,偏置角度的tan=5/3,编号为1,圆形半径为22
draw_star(-66,154,7,1,2,22)# 第二颗星星 起点在左边第3个格子,上边7个格子,偏置角度的tan=7/1,编号为2,圆形半径为22
draw_star(-66,88,2,7,3,22)# 第三颗星星 起点在左边第3个格子,上边7个格子,偏置角度的tan=2/7,编号为3,圆形半径为22
draw_star(-110,44,4,5,4,22) # 第四颗星星 起点在左边第5个格子,上边9个格子,偏置角度的tan=4/5,编号为4,圆形半径为22

注释部分是画格子的代码,用于调试,大部分代码都有注释,所以不做过多解释了。