[英]Python draw n-pointed star with turtle graphics
我的教授让我们班写了一个 Python 函数,它的作用如下:
在名为 star(turtle, n, d) 的函数中绘制一个带 d 边的常规 n 尖星
这是我到目前为止的代码:
def star(turtle, n, d):
angle = (180-((180*(n-2))/n))*2
for i in range(n):
t.forward(d)
t.left(angle)
return angle
我遇到的问题是我的函数只能绘制具有奇数个角的星星(5、7、9 边星星)。 当我要求它绘制一个边数为偶数的星星时,它会输出边数为 n/2 的多边形。 所以要求画一个 8 边形的星星输出一个正方形,6 边形给出一个三角形,依此类推。
我曾多次尝试更改角度公式,但它从未适用于任何给定的 n。
感谢您的帮助!
通过使用 GCD 例程查找互质并将失败视为异常,您可以使用相同的代码绘制大多数奇数和偶数尖星:
import sys
import turtle
from time import sleep
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def normal_star(size, color, points):
if points <= 4:
raise ValueError('Not enough points')
turtle.color(color)
for coprime in range(points // 2, 1, -1):
if gcd(points, coprime) == 1:
print("({},{})".format(points, coprime), file=sys.stderr)
start = turtle.position()
for _ in range(points):
turtle.forward(size)
turtle.left(360.0 / points * coprime)
turtle.setposition(start)
return
abnormal_star(size, color, points)
def abnormal_star(size, color, points):
# deal with special cases here
print("Exception:", points, file=sys.stderr)
for points in range(5, 20):
turtle.reset()
normal_star(200, 'red', points)
sleep(5)
turtle.exitonclick()
对于从 5 到 20 的点,这仅无法找到 6 的解决方案,您需要将其视为异常,即专用代码或只是让用户知道这是您无法处理的异常:
> python3 test.py
(5,2)
Exception: 6
(7,3)
(8,3)
(9,4)
(10,3)
(11,5)
(12,5)
(13,6)
(14,5)
(15,7)
(16,7)
(17,8)
(18,7)
(19,9)
(20,9)
>
参数 200,'red',10 的输出示例
这段代码将绘制一个点数大于 5 的星星。它有两个参数: n
是顶点数, size
控制海龟步数的size
。
import turtle
turtle.showturtle()
turtle.shape("classic")
def turtle_star(n, size = 100):
extent = 360 / n
if n % 2 == 0:
coords = []
for a in range(0, n):
turtle.penup()
coords.append(turtle.pos())
turtle.circle(size, extent)
for b in range(0, len(coords)):
if b % 2 == 0:
turtle.pendown()
turtle.goto(coords[b][0], coords[b][1])
else:
continue
turtle.goto(coords[0][0], coords[0][1])
turtle.penup()
for c in range(0, (len(coords) + 1)):
if c % 2 != 0:
turtle.goto(coords[c][0], coords[c][1])
turtle.pendown()
else:
continue
turtle.goto(coords[1][0], coords[1][1])
else:
angle = 180 - (180 / n)
for a in range(n):
turtle.forward(size)
turtle.right(angle)
turtle_star(11)
(奇数)和turtle(6)
(偶数):
我的教授让我们班写了一个 Python 函数,它的作用如下:
在名为 star(turtle, n, d) 的函数中绘制一个带 d 边的规则 n 尖星
这是我到目前为止的代码:
def star(turtle, n, d):
angle = (180-((180*(n-2))/n))*2
for i in range(n):
t.forward(d)
t.left(angle)
return angle
我遇到的问题是我的函数只能绘制具有奇数个角的星星(5、7、9 边星星)。 当我要求它绘制一个边数为偶数的星星时,它会输出边数为 n/2 的多边形。 所以要求画一个 8 边形的星星输出一个正方形,6 边形给出一个三角形,依此类推。
我曾多次尝试更改角度公式,但它从未适用于任何给定的 n。
感谢您的帮助!
你的公式有点错误:
def star(turtle, n, d):
for i in range(n):
angle = 180.0 - 180.0 / n
turtle.forward(d)
turtle.right(angle)
turtle.forward(d)`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.