Ковер Серпинского Python Ошибка при использовании черепахи - PullRequest
1 голос
/ 18 марта 2020

Это не дубликат, потому что я пытаюсь исправить ошибку в своем коде, а не как сама решить проблему. Я нашел код, который говорит, что он aws Ковер Серпинского в Python с использованием черепахи, но дает мне только гигантское сообщение об ошибке. Я получаю сообщение об ошибке, указывающее на дисплей черепахи и имя не указано. Я никогда не использовал черепаху, поэтому я хотел попробовать это. Вот ошибка, которую я получаю:

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()

Если это плохой способ сделать ковер, тогда, пожалуйста, покажите мне другой способ. Мне действительно нужна помощь. Мне действительно нужна помощь как можно скорее, пожалуйста !!

1 Ответ

0 голосов
/ 14 апреля 2020

Я исправил код, так как я нашел его где-то еще в StackOverflow и я опубликую его здесь. (Хорошо работает на компьютере Windows 10 с python 3.7.4)

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()

с (5 960) означает, что он делает 5 итераций, а квадрат имеет ширину 960 пикселей)

...