为什么这个L系统仅绘制一条直线



我正在尝试编写一个生成字符串的程序,然后根据字符串中的字符中的哪个字符来绘制某些行。我相信当我手工检查了一些迭代时,它正在正确生成琴弦,但是我使用的乌龟似乎无法正常工作。

例如,下面的代码应生成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":

相关内容

  • 没有找到相关文章

最新更新