python - 使用 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()
如果这是制作地毯的坏方法,那么请告诉我另一种方法。我真的需要帮助。我真的需要尽快帮助,拜托!!
解决方案
我已经修复了代码,因为我在 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 像素宽)
推荐阅读
- android - TYPE_STATUS_BAR 覆盖使系统忽略屏幕超时
- conditional-formatting - 根据另一张纸上的单元格输入条件格式化 1 个单元格,应用于整行
- vmware-clarity - 数据网格行选择计数不正确
- docusignapi - 通过 REST 添加信封附件
- php - Xdebug 和 PhpStorm - 调试不起作用
- php - 按类别分组数组
- asp.net - 带有 group by 的 desc 顺序在 linq 中不起作用
- concatenation - 在 SPARQL 查询 (MarkLogic) 中用作主题的连接值
- php - 尝试 cURLOPt_FOLLOWLOCATION = true 在 cURL 之后强制标头功能,但没有任何效果
- api - Instagram API,没有 OAuth 的评论响应