如何使用乌龟在 python 中绘制 sierpinski 地毯
How to draw a sierpinski carpet in python using turtle
我正在尝试使用 turtle 在 python 中创建 Sierpinski 地毯。到目前为止,这是我的代码:
from turtle import *
# Make a screen and a pen
pen = Pen()
screen = Screen()
pen.speed(0)
pen.color('orange')
pen.width(1.5)
def s (n, l):
for i in range (4):
s(n-1, l)
pen.right(45); pen.forward(l); pen.right(45)
s(n-1, l)
pen.left(90); forward (l); pen.left(90)
s(n-1, l)
pen.right(45); pen.forward(l); pen.left(45)
s(n-1, l)
但是,每当我 运行 它时,我都会收到此消息:
line 17, in s
s(n-1, l)
[Previous line repeated 990 more times]
RecursionError: maximum recursion depth exceeded
我尝试使用 if i in range(4):
但这也不起作用,我哪里错了?
您需要 "stop condition" 来停止递归。
例如:
if n == 0: # "stop condition"
# draw or exit
else: # recursions
# execute some recursions
我不懂算法,但我用这段代码创建了地毯。
我使用 trace(0)
和 update()
只是为了画得更快。
#!/usr/bin/env python3
import turtle
# --- functions ---
def s(n, l):
if n == 0: # stop conditions
# draw filled rectangle
turtle.color('black')
turtle.begin_fill()
for _ in range (4):
turtle.forward(l)
turtle.left(90)
turtle.end_fill()
else: # recursion
# around center point create 8 smalles rectangles.
# create two rectangles on every side
# so you have to repeat it four times
for _ in range(4):
# first rectangle
s(n-1, l/3)
turtle.forward(l/3)
# second rectangle
s(n-1, l/3)
turtle.forward(l/3)
# go to next corner
turtle.forward(l/3)
turtle.left(90)
# update screen
turtle.update()
# --- main ---
# stop updating screen (to make it faster)
turtle.tracer(0)
# start
s(4, 400)
# event loop
turtle.done()
维基百科:Sierpinski carpet
我正在尝试使用 turtle 在 python 中创建 Sierpinski 地毯。到目前为止,这是我的代码:
from turtle import *
# Make a screen and a pen
pen = Pen()
screen = Screen()
pen.speed(0)
pen.color('orange')
pen.width(1.5)
def s (n, l):
for i in range (4):
s(n-1, l)
pen.right(45); pen.forward(l); pen.right(45)
s(n-1, l)
pen.left(90); forward (l); pen.left(90)
s(n-1, l)
pen.right(45); pen.forward(l); pen.left(45)
s(n-1, l)
但是,每当我 运行 它时,我都会收到此消息:
line 17, in s
s(n-1, l)
[Previous line repeated 990 more times]
RecursionError: maximum recursion depth exceeded
我尝试使用 if i in range(4):
但这也不起作用,我哪里错了?
您需要 "stop condition" 来停止递归。
例如:
if n == 0: # "stop condition"
# draw or exit
else: # recursions
# execute some recursions
我不懂算法,但我用这段代码创建了地毯。
我使用 trace(0)
和 update()
只是为了画得更快。
#!/usr/bin/env python3
import turtle
# --- functions ---
def s(n, l):
if n == 0: # stop conditions
# draw filled rectangle
turtle.color('black')
turtle.begin_fill()
for _ in range (4):
turtle.forward(l)
turtle.left(90)
turtle.end_fill()
else: # recursion
# around center point create 8 smalles rectangles.
# create two rectangles on every side
# so you have to repeat it four times
for _ in range(4):
# first rectangle
s(n-1, l/3)
turtle.forward(l/3)
# second rectangle
s(n-1, l/3)
turtle.forward(l/3)
# go to next corner
turtle.forward(l/3)
turtle.left(90)
# update screen
turtle.update()
# --- main ---
# stop updating screen (to make it faster)
turtle.tracer(0)
# start
s(4, 400)
# event loop
turtle.done()
维基百科:Sierpinski carpet