我正在尝试编写一个将单个字符和一组规则作为列表的函数。
规则列表的格式是这种格式的一组字符串:[“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:列表索引超出范围
我该怎么做才能正确打印输出?
答案 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
,其中一个空响应表示规则输入结束。