如何替换参数上给定的字符串中的特定元素

2024-04-20 05:01:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是遍历一个字符串,选择一个名称,以及一个当前在字符串中的职务,然后它会找到该职务所在的行,然后用在参数中选择的新名称替换当前名称。你知道吗

这是我的字符串:

TV = '''
Tulleveien Velforening
leder: Kari
kasserer: Ole
IT-ansvarlig: Liv
parkeringsansvarlig: Kari
arrangementsansvarlig: Liv
hagekonsulent: Kari
brannansvarlig: Kari
'''

那么这就是我要运行的函数:

def Verv(navn, vervs):
    print("Tulleveien Velforening")
    for lines in TV.split("\n"):
        lines.replace(navn, lines)
        return TV

这就是我所尝试的:

Verv('Roald', ["leder", "IT-ansvarlig"])

但是当我运行这个程序的时候,我得到的只是一个列表,它是如何开始的。预期产出将是:

Tulleveien Velforening
leder: Roald
kasserer: Ole
IT-ansvarlig: Roald
parkeringsansvarlig: Kari
arrangementsansvarlig: Liv
hagekonsulent: Kari
brannansvarlig: Kari

我该如何解决这个问题?你知道吗


Tags: 字符串名称ittvlinesole职务liv
3条回答

老实说,Verv是非常错误的。这里是一步一步:

  1. print("Tulleveien Velforening")
    • Tulleveien Velforening已经在输入字符串中,所以为什么需要再次打印它?你知道吗
  2. for lines in TV.split("\n"):-AccessTV(从包含范围中),在换行符上拆分它,并将每个元素循环为lines
    • 理想情况下TV应该作为参数传入,但这不是什么大问题
    • lines应该重命名为line,因为它包含一行,而不是一个iterable行。你知道吗
  3. lines.replace(navn, lines)-用整行本身替换navn的任何出现
    • 'Roald'不会出现在输入中,因此这不起任何作用
    • 替换lines没有任何意义
    • 可能你想要更像line.replace(..., navn)
  4. return TV
    • TV在函数中没有更改
    • Verv的返回值未使用

注意,verv参数没有使用。你知道吗

还要注意的是,除了Tulleveien Velforening之外没有输出。你知道吗


下面是您要做的:

(这是一种可能的方法。Rineesh's answer是另一个。)

  1. TV的每一行上循环。我会写for line in TV.splitlines():
  2. (可选)如果行为空,则继续下一个循环
  3. 检查行是否以vervs中的任何verv开头
    1. 如果是,则将line中的第二个字段替换为navn
  4. 打印行

我让你来执行。你知道吗

应该用lines=lines.replace(navn, lines)替换lines.replace(navn, lines)。replace返回替换了相关子字符串的原始字符串的副本。你知道吗

试试这个,我添加了一些内联注释,可以解释逻辑。你知道吗

TV = '''
Tulleveien Velforening
leder: Kari
kasserer: Ole
IT-ansvarlig: Liv
parkeringsansvarlig: Kari
arrangementsansvarlig: Liv
hagekonsulent: Kari
brannansvarlig: Kari
'''


def Verv(navn, verv):
    # Created an empty dictionary to convert the lines into a dictionary which is much easier to manage.
    rin_dict = {}
    print("Tulleveien Velforening")
    # Forming a dictionary out of your string.
    for line in TV.split("\n"):
        if ":" in line:
            rin = line.split(": ")
            rin_dict[rin[0]] = rin[1]
    # Dictionary key replacement.
    for elm in verv:
        rin_dict[elm] = navn
    # Printing back the dictionary in your desired format.
    for k, v in rin_dict.items():
        print("{0}: {1}".format(k, v))


# The second argument is a list.
Verv('Roald', ["leder", "IT-ansvarlig"])

相关问题 更多 >