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自学成才的程序员必须有很多奉献精神。