我正在使用的测试(调用函数)是:
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系统,它基本上将规则堆叠在另一个规则上,具体取决于用户请求的迭代次数,here is an example我的意思。 我知道这可以使用多个函数来完成,但我必须弄清楚如何在一个函数中运行它。
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
但是我花了很多时间在上面的那个,虽然它很复杂,但我想知道我是否走在正确的轨道上。
答案 0 :(得分:0)
我认为这/这些行是你的问题:
i += 1
你不能像这样跳过python循环中的步骤。范围内的Python for
循环不像其他语言那样工作。你可以随心所欲地操纵循环变量的值,但是下一次迭代仍将是它将会是什么。
所以基本上,你不会跳过你认为正在跳过的临时步骤。所以规则只是随意应用。