【问题标题】:Python: Basic L-System: Axiom and RulesPython:基本 L 系统:公理和规则
【发布时间】: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


【解决方案1】:

我认为这条/这些线是你的问题:

i += 1

你不能像这样在 python 中跳过循环中的步骤。 Python for 在一个范围内的循环不像在其他语言中那样工作。你可以随心所欲地操纵循环变量的值,但下一次迭代仍然是它本来的样子。

因此,基本上,您不会跳过您认为正在跳过的临时步骤。所以这些规则只是被随意应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多