[英]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.