簡體   English   中英

Python:基本 L 系統:公理和規則

[英]Python: Basic L-System: Axiom and Rules

我正在使用的測試(函數的調用)是:

rewrite('A', {'A':'AB','B':'A'}, 2) >>> 'ABA'

rewrite('A', {'A':'AB','B':'A'}, 4) >>> 'ABAABABA'

rewrite('A', {'A':'AB','B':'A'}, 0) >>> 'A'

他們不工作,我無法弄清楚問題是什么。 這是一個 L 系統,它基本上根據用戶請求的迭代次數將一個規則疊加在另一個規則上, 這是我的意思的一個示例 我知道這可以使用多個函數來完成,但我必須弄清楚如何將其全部運行。

def rewrite(word, prod, n):

    start1 = list(prod.keys())[0]
    rule1 = list(prod.values())[0]
    start2 = list(prod.keys())[1]
    rule2 = list(prod.values())[1]
    newWord = ""

    if word == start1:
        newWord = rule1
        newWord1 = ""
        i = 0
        for i in range(n):
            for x in newWord:
                if x == start1:
                    newWord1 = newWord1 + rule1
                    newWord = newWord1
                    i += 1
                elif x == start2:
                    newWord1 = newWord1 + rule2
                    newWord = newWord1
                    i += 1
                else:
                    newWord1 = newWorld1

    if word == start2:
        newWord = rule2
        newWord1 = ""
        i = 0
        for i in range(n):
            for x in newWord:
                if x == start1:
                    newWord1 = newWord1 + rule1
                    newWord = newWord1
                    i += 1
                elif x == start2:
                    newWord1 = newWord1 + rule2
                    newWord = newWord1
                    i += 1
                else:
                    newWord1 = newWord1  

    else:
        newWord1 = word    # no rules apply so keep the character

    return newWord1

我知道我可以這樣做並且這種方式有效:

def rewrite(word, production, n):
    for i in range(n):
        newWord = ''
        for x in word:
            if x in production:
                newWord += production[x]
            else:
                newWord += x
        word = newWord
    return word

但是我在上面花了很多時間,雖然很復雜,但我想知道我是否在正確的軌道上。

我認為這條/這些線是你的問題:

i += 1

你不能像那樣在 python 中跳過循環中的步驟。 Python for范圍內的循環不像在其他語言中那樣工作。 您可以隨心所欲地操作循環變量的值,但無論如何,下一次迭代仍將是它的樣子。

所以基本上,您不會跳過您認為要跳過的臨時步驟。 所以規則只是被隨意應用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM