Python-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

我正在尝试用绿色的小三角形制作一个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()


您的
开始填充
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!请编辑您的答案,添加一些文字,解释这是如何解决问题的。