【发布时间】:2018-02-23 00:40:34
【问题描述】:
我正在使用的测试(函数的调用)是:
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
但我花了很多时间在上面,虽然很复杂,但我想知道我是否走在正确的轨道上。
【问题讨论】:
-
“他们不工作”是什么意思?
-
@BUZZY 顶部函数没有输出正确答案。
-
最下面的有什么问题?为什么要做一个更复杂的?
-
@ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 底部的工作正常。在我意识到另一种方式之前,我只在上面花了几个小时。我只是想知道是否有人知道我在第一名中哪里出错了?
-
我会继续说你没有走在正确的轨道上。放弃旧方法。不要把好时光丢在坏事之后。我回答了一个问题,但老实说,我什至无法弄清楚你想要什么。你有一些有用的东西,继续前进。
标签: python function dictionary