importmathimportturtle as t#这种方法只能画只在尖角处转向就可以画出的角星,\#即可以用等长线段(线段长度为不转弯的最大)不提笔画完的角星\#如注释吊28,29行,则偶数角数变为原来2倍,证明此方法只能画奇数和4的整数倍的角星\#即只有奇数和4的整数倍的角星才能一笔画出
defloop(r,n):
t.fd(ol(r,n))
t.right(180-360/(2*n))defol(r,n):
na= (360/(4*n)) / 180 *math.pi
ol= r * math.cos(na) * 2ol=int(round(ol))returnoldefrelocation(r,n):
t.penup()
t.left(90)
t.fd(r)
t.right(180 - 360/(4*n))
t.pendown()defmain(r,n):
times=nif n==1 or n==2:print('error input')
exit()elif n%2==1:print('开始绘制...')elif n%2==0:
n/=2
if n%2==1:print('无法一笔画出{0:.0f}角星'.format(times))
exit()else:print('开始绘制...')else:print('error input')
exit()
relocation(r,n)for i inrange(times):
loop(r,n)
t.penup()
t.goto(0,0)
t.seth(0)
t.pendown()
r=200n=eval(input('请输入要绘制的角星的角数n,n需是>=3的整数:')) #eval()函数很重要,不要总忘记加!!!
t.pensize(8) #注意t.pensize(20)不是t.pensize=20,变量赋值采用=,属性更改用t.pensize(20)
t.color('green')
t.speed(10)
t.setup(450,450)
main(r,n)
t.done()