首页 > 解决方案 > 使用 Turtle 的 Sierpinski 地毯 Python 错误

问题描述

这不是重复的,因为我正在尝试修复代码中的错误,而不是如何解决问题本身。我发现代码说它使用海龟在 Python 中绘制了 Sierpinski 的地毯,但只给了我一个巨大的错误消息。我在谈论海龟的显示和未给出名称时遇到错误。我从来没有用过乌龟,所以我想试试这个。这是我得到的错误:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    wigs = turtle.Turtle()
  File "/usr/local/lib/python3.8/turtle.py", line 3812, in __init__
    Turtle._screen = Screen()
  File "/usr/local/lib/python3.8/turtle.py", line 3662, in Screen
    Turtle._screen = _Screen()
  File "/usr/local/lib/python3.8/turtle.py", line 3678, in __init__
    _Screen._root = self._root = _Root()
  File "/usr/local/lib/python3.8/turtle.py", line 434, in __init__
    TK.Tk.__init__(self)  File "/usr/local/lib/python3.8/tkinter/__init__.py", line 2261, in __init__    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

这是我的代码:

import turtle
import math
t = turtle.Turtle()
def s(n, l):

    if n == 0: # stop conditions

        # draw filled rectangle

        t.color('black')
        t.begin_fill()
        for _ in range (4):
            t.forward(l)
            t.left(90)
        t.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)    
            t.forward(l/3)

            # second rectangle
            s(n-1, l/3)    
            t.forward(l/3)

            # go to next corner
            t.forward(l/3)
            t.left(90)

        # update screen
        t.update()

# --- main ---    

# stop updating screen (to make it faster)
t.tracer(0) 

# start
try:
  s(4, 400)
except:
  print("This loop has reached it's max callback")
# event loop 
t.done()

如果这是制作地毯的坏方法,那么请告诉我另一种方法。我真的需要帮助。我真的需要尽快帮助,拜托!!

标签: pythonturtle-graphics

解决方案


我已经修复了代码,因为我在 StackOverflow 的其他地方找到了这个,我将把它贴在这里。(在带有 python 3.7.4 的 Windows 10 计算机上工作正常)

import turtle

# --- functions ---

def s(n, l):

    if n == 0: # stop conditions

        # draw filled rectangle
        turtle.pencolor("green")
        turtle.fillcolor('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)
turtle.penup()
turtle.setx(-480)
turtle.sety(-480)
turtle.pendown()
# start
s(5, 960)
turtle.speed(0)
# event loop
turtle.done()

s(5,960) 表示它进行 5 次迭代,正方形为 960 像素宽)


推荐阅读