Python 谢尔宾斯基三角
Python Sierpinski Triangle
我正在尝试制作一个带有绿色小三角形的 Sierpinski 三角形。
但是如图所示,我得到了错误的输出。
有人可以帮我更正我的代码吗?
Sierpinski 三角形(黑色)如下所示。我的截图在代码下面。
import turtle
def draw_triangle(some_turtle):
#This for loop will create - Outer Triangle
some_turtle.color("green")
some_turtle.begin_fill()
for i in range(1,4):
some_turtle.forward(50)
some_turtle.left(120)
#This for loop will create - Inner Triangle
for j in range(1,4):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
def draw_art():
window = turtle.Screen()
window.bgcolor("white")
#Create the turtle Brad - Draws a Triangle
brad = turtle.Turtle()
brad.shape("arrow")
brad.color("green")
brad.speed(50)
#This for loop will create - Inner & Outer Triangle At 120 deg
for d in range(1,4):
brad.left(120)
#This for loop will create - Inner & Outer Triangle At distance 50
for c in range(1,5):
draw_triangle(brad)
brad.forward(50)
window.exitonclick()
draw_art()
enter image description here
您的 begin_fill
和 end_fill
不在正确的位置。从外部 for 循环的顶部开始填充,并在其底部结束填充。
换句话说,将其作为您的 draw_triangle 函数:
def draw_triangle(some_turtle):
#This for loop will create - Outer Triangle
some_turtle.color("green")
for i in range(1,4):
some_turtle.begin_fill()
some_turtle.forward(50)
some_turtle.left(120)
#This for loop will create - Inner Triangle
for j in range(1,4):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
注意 begin_fill
和 end_fill
位置的不同
除了 begin_fill()
和 end_fill()
位置错误之外,您发布的代码还有几个问题:您在 draw_art()
之前调用了 exitonclick()
,所以您的程序根本不应该 运行;您从未定义的范围内引用 window
;根据文档,speed()
的论点没有多大意义。
以下返工解决了上述问题和一些样式调整:
import turtle
def draw_triangle(some_turtle):
# This for loop will create - Outer Triangle
for i in range(3):
some_turtle.forward(50)
some_turtle.left(120)
# This for loop will create - Inner Triangle
some_turtle.begin_fill()
for j in range(3):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
def draw_art():
# Create the turtle Brad - Draws a Triangle
brad = turtle.Turtle(shape="arrow")
brad.color("green")
brad.speed("fastest")
# This for loop will create - Inner & Outer Triangle At 120 deg
for d in range(3):
brad.left(120)
# This for loop will create - Inner & Outer Triangle At distance 50
for c in range(4):
draw_triangle(brad)
brad.forward(50)
brad.hideturtle()
window = turtle.Screen()
window.bgcolor("white")
draw_art()
window.exitonclick()
输出
如果您仍然没有得到上面的图像,请考虑以下事项:turtle/tkinter 填充逻辑在 Unix 和 Windows 系统之间在填充已经填充的区域时有所不同。您的基本算法会重绘和重新填充许多三角形。因此,如果您仍有问题,请考虑将代码更改为仅绘制和填充每个三角形一次。类似于以下返工,它不会像您原来的那样复制角落的绘图:
def draw_triangle(some_turtle):
# This for loop will create - Outer Triangle
for i in range(3):
# This for loop will create - Inner Triangle
some_turtle.begin_fill()
for j in range(3):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
some_turtle.forward(50)
some_turtle.left(120)
def draw_art():
# Create the turtle Brad - Draws a Triangle
brad = turtle.Turtle(shape="arrow")
brad.color("green")
brad.speed("fastest")
# This for loop will create - Inner & Outer Triangle At 120 deg
for d in range(3):
brad.left(120)
brad.forward(50)
# This for loop will create - Inner & Outer Triangle At distance 50
for c in range(3):
draw_triangle(brad)
brad.forward(50)
brad.hideturtle()
import turtle
t=turtle.Turtle()
def f(a,b):
#a=the distance that need to go, b how many triangle in side the large triangle
if b==0:
return
else:
for i in range(3):
t.forward(a)
t.left(120)
f(a/2,b-1)
我正在尝试制作一个带有绿色小三角形的 Sierpinski 三角形。 但是如图所示,我得到了错误的输出。
有人可以帮我更正我的代码吗?
Sierpinski 三角形(黑色)如下所示。我的截图在代码下面。
import turtle
def draw_triangle(some_turtle):
#This for loop will create - Outer Triangle
some_turtle.color("green")
some_turtle.begin_fill()
for i in range(1,4):
some_turtle.forward(50)
some_turtle.left(120)
#This for loop will create - Inner Triangle
for j in range(1,4):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
def draw_art():
window = turtle.Screen()
window.bgcolor("white")
#Create the turtle Brad - Draws a Triangle
brad = turtle.Turtle()
brad.shape("arrow")
brad.color("green")
brad.speed(50)
#This for loop will create - Inner & Outer Triangle At 120 deg
for d in range(1,4):
brad.left(120)
#This for loop will create - Inner & Outer Triangle At distance 50
for c in range(1,5):
draw_triangle(brad)
brad.forward(50)
window.exitonclick()
draw_art()
enter image description here
您的 begin_fill
和 end_fill
不在正确的位置。从外部 for 循环的顶部开始填充,并在其底部结束填充。
换句话说,将其作为您的 draw_triangle 函数:
def draw_triangle(some_turtle):
#This for loop will create - Outer Triangle
some_turtle.color("green")
for i in range(1,4):
some_turtle.begin_fill()
some_turtle.forward(50)
some_turtle.left(120)
#This for loop will create - Inner Triangle
for j in range(1,4):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
注意 begin_fill
和 end_fill
除了 begin_fill()
和 end_fill()
位置错误之外,您发布的代码还有几个问题:您在 draw_art()
之前调用了 exitonclick()
,所以您的程序根本不应该 运行;您从未定义的范围内引用 window
;根据文档,speed()
的论点没有多大意义。
以下返工解决了上述问题和一些样式调整:
import turtle
def draw_triangle(some_turtle):
# This for loop will create - Outer Triangle
for i in range(3):
some_turtle.forward(50)
some_turtle.left(120)
# This for loop will create - Inner Triangle
some_turtle.begin_fill()
for j in range(3):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
def draw_art():
# Create the turtle Brad - Draws a Triangle
brad = turtle.Turtle(shape="arrow")
brad.color("green")
brad.speed("fastest")
# This for loop will create - Inner & Outer Triangle At 120 deg
for d in range(3):
brad.left(120)
# This for loop will create - Inner & Outer Triangle At distance 50
for c in range(4):
draw_triangle(brad)
brad.forward(50)
brad.hideturtle()
window = turtle.Screen()
window.bgcolor("white")
draw_art()
window.exitonclick()
输出
如果您仍然没有得到上面的图像,请考虑以下事项:turtle/tkinter 填充逻辑在 Unix 和 Windows 系统之间在填充已经填充的区域时有所不同。您的基本算法会重绘和重新填充许多三角形。因此,如果您仍有问题,请考虑将代码更改为仅绘制和填充每个三角形一次。类似于以下返工,它不会像您原来的那样复制角落的绘图:
def draw_triangle(some_turtle):
# This for loop will create - Outer Triangle
for i in range(3):
# This for loop will create - Inner Triangle
some_turtle.begin_fill()
for j in range(3):
some_turtle.forward(25)
some_turtle.left(120)
some_turtle.end_fill()
some_turtle.forward(50)
some_turtle.left(120)
def draw_art():
# Create the turtle Brad - Draws a Triangle
brad = turtle.Turtle(shape="arrow")
brad.color("green")
brad.speed("fastest")
# This for loop will create - Inner & Outer Triangle At 120 deg
for d in range(3):
brad.left(120)
brad.forward(50)
# This for loop will create - Inner & Outer Triangle At distance 50
for c in range(3):
draw_triangle(brad)
brad.forward(50)
brad.hideturtle()
import turtle
t=turtle.Turtle()
def f(a,b):
#a=the distance that need to go, b how many triangle in side the large triangle
if b==0:
return
else:
for i in range(3):
t.forward(a)
t.left(120)
f(a/2,b-1)