Lsystem 的 Python ApplyRules() 函数

标签 python python-3.x

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

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

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

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

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

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 行,在 main 中 inst = lsystems.applyRules(char, 规则)

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

关于Lsystem 的 Python ApplyRules() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928093/

相关文章:

python - 获取当前记录id

python - 使用 Python 在 txt 文件中查找 csv 值的问题

python - Windows 上的 GTK3 和 Python3?

python - Django queryset iterator() 无法按预期工作

Python - 读取复选框

python - 如何访问 python datetime.time 列中的小时数

python - 使用 tkinter 的条目选择列表

python - 如何在 Python 中编写缓存函数或等效函数?

python - 用两个字符替换最左边的逗号

python - 通过 pywinauto 上的位置获取控制