用于Lsystem的Python ApplyRules()函数

时间:2017-10-25 08:57:19

标签: python python-3.x

我正在尝试编写一个将单个字符和一组规则作为列表的函数。

规则列表的格式是这种格式的一组字符串:[“character1:substitution”,“character2:substitution”]

我需要遍历规则列表,并将字符串解析为符号和替换。

我应该使用规则数循环n次,并要求用户以指定的格式“character:substitution”输入规则。并将每个规则字符串存储在组合列表中。

这是我到目前为止编写的代码:

def applyRules(char, rules):
    for rule_list in (rule.split(':') for rule in rules):
        char = char.replace(rule_list[0], rule_list[1])
    return char
import lsystems
import turtle

def main():
    char = input("What character do you want to put?")
    rules = input("Put your rule")
    inst = lsystems.applyRules(char, rules)
    print(inst)


Input char b

Input rule b:c c:d

它应该打印d,但是,除非我只放置一个规则,例如b:c,否则它会一直给我错误。

跟踪(最近一次呼叫最后一次):

文件" C:\ Users \ wpw \ Desktop \ csp \ mainmodule.py",第13行,在main()

文件" C:\ Users \ wpw \ Desktop \ csp \ mainmodule.py",第7行,主要      inst = lsystems.applyRules(char,rules)

文件" C:\ Users \ wpw \ Desktop \ cs110 \ lsystemfunctions.py",第5行,在applyRules中      char = char.replace(rule_list [0],rule_list [1])

IndexError:列表索引超出范围

我该怎么做才能正确打印输出?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您需要使用.split()将规则字符串转换为规则列表:

def applyRules(string, rules):
    for character, substitution in (rule.split(':') for rule in rules):
        string = string.replace(character, substitution)
    return string

def main():
    char = input("What character do you want to put? ")
    rules = input("Put your rules: ").split()
    inst = applyRules(char, rules)
    print(inst)

main()

<强>输出

% python3 test.py
What character do you want to put? b
Put your rules: b:c c:d
d
%

这假设您的规则位于由空格分隔的单个输入中。另一种方法是将input("Put your rules: ")置于循环中,当您从用户输入单个规则时附加到rules,其中一个空响应表示规则输入结束。