Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这个sierpinski三角形是随机绘制的,而不遵循代码?_Python_Turtle Graphics - Fatal编程技术网

Python 为什么这个sierpinski三角形是随机绘制的,而不遵循代码?

Python 为什么这个sierpinski三角形是随机绘制的,而不遵循代码?,python,turtle-graphics,Python,Turtle Graphics,我需要为我的学校作业做一个,但这个代码是随机抽取的。我复制了一些堆栈溢出代码,但我不理解其逻辑。有人能给我解释一下吗 import turtle def triangle(width,height): if height==0: for i in range(3): t.fd(width) t.left(120) else: triangle(width/2,height-1)

我需要为我的学校作业做一个,但这个代码是随机抽取的。我复制了一些堆栈溢出代码,但我不理解其逻辑。有人能给我解释一下吗

import turtle
def triangle(width,height):

    if height==0:

        for i in range(3):
            t.fd(width)
            t.left(120)
    else:

        triangle(width/2,height-1)
        t.fd(width/2)
        triangle(width/2,height-1)
        t.bk(width/2)
        t.left(60)
        t.fd(width/2)
        t.right(60)
        triangle(width/2,height-1)
        t.left(60)
        t.bk(width/2)
        t.right(60)


window = turtle.Screen()
t = turtle.Turtle()
triangle(100,2)
window.exitonclick()
第一个if语句做什么?第一个if语句画的是最后一个三角形还是什么?它在哪里画三角形,因为它从来没有在脚本上画过这么大的三角形。唯一宽度与100x100x100相同的三角形是由许多小三角形组成的外部三角形


函数中的高度-1为3倍,这将使高度为负1?高度为0时,它会画一个大三角形,窗口上没有大三角形,从宽度开始,然后上升,然后下降。同样在else语句中,宽度是25,因为上面的语句的三角形除以100除以2,然后再除以宽度50除以2

在我看来,您的代码命名变量的方式非常容易引起误解。 因为当这段代码使用可变高度时,它实际上并不引用“三角形的高度”。相反,这个高度是何时停止递归的指示器

仅供参考,递归是一个函数调用自身的过程,就像ffff一样。 在我刚才给出的例子中,它是4次迭代的递归,因为函数f调用自己4次

如果传递给三角形的变量高度为0,则第一个If语句知道它不必进行任何递归,因此它只需绘制一个边长为100的三角形

if height==0:

        for i in range(3):
            t.fd(width)
            t.left(120)
现在,如果高度变量为1,它调用三个新的三角形函数,每个高度变量为0,每个边为50

else:

        triangle(width/2,height-1) #notice how height is reduced by one
        t.fd(width/2)
        triangle(width/2,height-1)
        t.bk(width/2)
        t.left(60)
        t.fd(width/2)
        t.right(60)
        triangle(width/2,height-1)
        t.left(60)
        t.bk(width/2)
        t.right(60)
所以它画了3个小三角形

使用高度变量2,假设三个三角形中的每一个也调用另外3个三角形,因此每侧总共有9个三角形


希望这能让一切变得更清楚一点:

你的标题说明的不是你所有的问题。您对Python的理解程度如何?首先,如果检查高度是否等于0,例如,是否有不明确的地方?好吧,它不会在任何地方绘制与100x100x100相同大小的三角形。我是初学者,但我不明白它是怎么画的。当然,你应该稍微玩弄一下海龟命令,了解它们的功能并阅读文档。关于递归概念的一些知识也会有所帮助。命名的高度确实是误导性的。它实际上是sierpinski三角形中递归级别的深度。如果宽度,高度是100,1。首先它会再次调用函数三角形,将宽度和高度更改为50,0,然后t.fd 50/2=25,然后由于高度为0,它将转到if语句?哦,我现在明白了,所以三角形调用函数,if语句自动变为宽度/2,但它下面的行不会更改宽度。我不得不玩了很长一段时间,jeez自学成才的程序员必须有很多奉献精神。