用于Lsystem的Python ApplyRules()函数

用于Lsystem的Python ApplyRules()函数,python,python-3.x,Python,Python 3.x,我正在尝试编写一个函数,将单个字符和一组规则作为列表 规则列表的格式将是以下格式的一组字符串:[“character1:substitution”,“character2:substitution”] 我需要遍历规则列表,并将字符串解析为符号和替换 我应该使用规则数循环n次,并要求用户以指定格式“character:substitution”输入规则。并将每个规则字符串存储在组合列表中 这是我到目前为止写的代码: def applyRules(char, rules): for rule

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

规则列表的格式将是以下格式的一组字符串:[“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

它应该打印d,然而,它在我尝试的所有时候都会给我错误,除非我只放了一条规则,比如b:c

回溯(最近一次呼叫最后一次):

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

文件“C:\Users\wpw\Desktop\csp\mainmodule.py”,第7行,在main中 inst=lsystems.applyRules(字符,规则)

applyRules中第5行的文件“C:\Users\wpw\Desktop\cs110\lsystemfunctions.py” char=char.replace(规则列表[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
,空响应表示规则输入结束。

您是否查看了:-单字符替换代码?此外,您正在将
规则
传递给函数,而您应该将
规则.split()
传递给函数,我从前面的问题中演示了如何传递。我确实看到了单字符替换代码的函数,但由于我没有学习dict.()和get(),我认为我无法使用这些函数。我试着使用
规则。拆分
,但它似乎不起作用,尽管我把它放进去了。。上面说split()不能用于列表谢谢你的帮助!
% python3 test.py
What character do you want to put? b
Put your rules: b:c c:d
d
%