我正在尝试编写一个生成字符串的程序,然后根据字符串中的字符中的哪个字符来绘制某些行。我相信当我手工检查了一些迭代时,它正在正确生成琴弦,但是我使用的乌龟似乎无法正常工作。
例如,下面的代码应生成Sierpinski三角形,但仅绘制一条直线。
我已经与其他L系统(例如龙曲线(进行了检查,并且尽管没有产生水平线,但结果仍然不正确。字符串似乎是正确的,所以我认为问题在于乌龟模块如何解释我的说明。这是我第一次使用该模块,所以如果我遇到非常基本的错误,我不会感到惊讶。
from tkinter import *
import turtle
Width=500
Height=500
def process_string(string):
return string.translate(str.maketrans({'A':'B-A-B','B':'A+B+A'}))
def createSystem(seed,depth):
string=seed
for i in range(depth):
string=process_string(string)
print(string)
return(string)
def draw(string):
t = turtle.RawTurtle(canvas)
t.penup()
t.goto(-0.4*Width,0.4*Height) #this translation fits more of the curve
on the screen
t.pendown()
t.shape("circle")
t.speed("fastest")
for char in string:
if char=="A" or char=="B":
t.forward(10)
elif char=="+":
t.right(60)
elif char=="-":
t.left(60)
root=Tk()
canvas=Canvas(width=Width, height=Height)
canvas.pack()
draw(createSystem("A",3))
print("COMPLETE")
root.mainloop() }
和以前一样,此示例应产生Sierpinski三角形,但仅产生水平线。
作为我认为不值得自己的帖子的最后一个快速问题,乌龟文档说速度("最快"(应该消除所有动画,但是情况并非如此,有什么想法吗?感谢您的时间!
编辑:我已经使用用户建议更新了代码,虽然这为三角形提供了正确的结果,但它仍然为龙曲线提供了不正确的图像。龙曲线的信息是
"变量:x y常数:F - 开始:FX规则:( x→x yf (,(y→-fx -y(角度:90°在这里,f表示"向前", - 表示"向左转90°",而 表示"右转90°"。x和y不对任何绘图动作,仅用于控制曲线的演变。"
问题是
if char=="A" or "B":
这意味着
if (char == "A") or "B":
因此,它仅将char
与"A"
进行比较,并给出
if True or "B":
或
if False or "B":
首先给出
if True:
第二个给出
if "B":
,但这像
if bool("B"):
给出
if True:
因此,finnally if char=="A" or "B":
像 if True:
一样工作,因此代码的这一部分始终执行。
必须是
if char == "A" or char == "B":
或
if char in ("A", "B"):
或
if char in "AB":
作为@cdlane在评论中提及您也可以使用set()
if char in {"A", "B"}:
需要恒定时间以任何尺寸集中检查char。但是对于小设置,您将看不到时间差异。
更改:
if char=="A" or "B":
to:
if char=="A" or char=="B":