Python-Sierpinski三角形
我正在尝试用绿色的小三角形制作一个Sierpinski三角形。 但我得到了错误的输出,如图所示 有人能帮我修改代码吗 Sierpinski三角形(黑色)如下所示。我的截图在代码下面Python-Sierpinski三角形,python,turtle-graphics,Python,Turtle Graphics,我正在尝试用绿色的小三角形制作一个Sierpinski三角形。 但我得到了错误的输出,如图所示 有人能帮我修改代码吗 Sierpinski三角形(黑色)如下所示。我的截图在代码下面 import turtle def draw_triangle(some_turtle): #This for loop will create - Outer Triangle some_turtle.color("green") some_turtle.b
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()
您的
开始填充
s和结束填充
s位置不正确。在外for循环的顶部开始填充,在底部结束填充
换言之,将此函数设置为draw_三角形函数:
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\u fill
和end\u fill
您的begin\u fill
s和end\u fill
的位置不正确。在外for循环的顶部开始填充,在底部结束填充
换言之,将此函数设置为draw_三角形函数:
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\u fill
和end\u fill
除了begin\u fill()
和end\u fill()
在错误的位置之外,您发布的代码还有几个问题:在绘图()之前调用exitonclick()
所以你的程序根本不应该运行;从未定义的范围引用窗口
;根据文档,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()
输出
如果您仍然没有看到上面的图片,那么需要考虑以下事项:在填充已经填充的区域时,Unix和Windows系统之间的turtle/tkinter填充逻辑各不相同。您的基本算法会重新绘制和填充许多三角形。因此,如果您仍然存在问题,请考虑将代码更改为仅绘制和填充每个三角形一次。类似于以下返工,不会与原始图纸一样复制角点图纸:
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()
除了
begin\u fill()
和end\u fill()
在错误的位置之外,您发布的代码还有几个问题:在draw\u art()
之前调用exitonclick()
,因此您的程序根本不应该运行;从未定义的范围引用窗口
;根据文档,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()
输出
如果您仍然没有看到上面的图片,那么需要考虑以下事项:在填充已经填充的区域时,Unix和Windows系统之间的turtle/tkinter填充逻辑各不相同。您的基本算法会重新绘制和填充许多三角形。因此,如果您仍然存在问题,请考虑将代码更改为仅绘制和填充每个三角形一次。类似于以下返工,不会与原始图纸一样复制角点图纸:
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()
你需要缩小你的问题范围。修复代码不是一个好的方法。我添加了另一个图像,输出应该看起来像imageSerpinski的三角形,使用递归更容易绘制。是的。。我知道,但我想不使用递归方法,唯一的问题是如何在循环中使用颜色函数。我添加了pic 3,它告诉我代码正在工作,我得到了三角形,但无法给它们着色。你需要缩小你的问题范围。修复代码不是一个好的方法。我添加了另一个图像,输出应该看起来像imageSerpinski的三角形,使用递归更容易绘制。是的。。我知道,但我想不使用递归方法,唯一的问题是如何在循环中使用颜色函数。我添加了pic 3,它告诉我代码正在工作,我得到了三角形,但无法给它们着色。请注意末端填充的缩进。它从原来的位置移走了。请仔细注意末端填充的缩进。它是从您原来的位置移动过来的。非常感谢您提供的解决方案。我的代码中有两个错误:1)begin\u fill()位于错误的位置2)some\u turtle.end\u fill()的缩进for循环后没有正确完成。一旦我修复了这两个问题,它就工作了…再次感谢您。感谢您的帮助。非常感谢您的解决方案。我的代码中有两个错误:1)begin_fill()位于错误的位置2)some_turtle.end_fill()的缩进在for循环之后没有正确完成。一旦我修复了这两个问题,它就工作了…再次感谢您。感谢您的帮助。您好,欢迎使用堆栈溢出!请编辑您的答案,添加一些文字来解释这是如何解决问题的。您好,欢迎来到Stack Overflow!请编辑您的答案,添加一些文字,解释这是如何解决问题的。