【问题标题】:How can I change multiple characters in a string of input? (python 3)如何更改输入字符串中的多个字符? (蟒蛇3)
【发布时间】:2015-11-18 11:12:59
【问题描述】:

我正在尝试创建一个程序,用不同的字符或文本片段替换某些字符或字符组。

我目前拥有的是

def changeWords(sentence):
    for char in sentence:
        if char == 'a':
            printSameLine('x')
        elif char == 'bd':
            printSameLine('y')
        else:
            printSameLine(char)

def goWordChange():
    print('')
    print('paste text to change')
    print('')
    text = input()
    print('')
    changeWords(text)
    print('')
    return goWordChange()

goWordChange()

如果我输入“abcd acbd”

输出将是

xbcd xcbd

但我希望它是

xbcd xcy

我不太确定为什么它可以代替“a”而不是“bc”。我怎样才能让它改变多个字符?

(ps。我还是编程初学者,所以请用小词:))

【问题讨论】:

  • 您是故意避免使用字符串作为学习练习的replace() 方法,还是只是因为您没有听说过而不使用它?用法示例:"abad".replace('a', 'c') == "cbcd""abad".replace('ab', 'x') == "xad"。如果你想避免它,我会写一个不使用replace的版本,否则我会写一个使用它的版本。
  • 哦,好的,谢谢,回答你的问题我并没有回避它,我以前从未使用过“replace()”,因为我是一个极端的菜鸟。你能告诉我 .replace() 到底是如何/在哪里适合程序的其余部分的吗?
  • 我添加了一个答案来扩展我在评论中所说的内容。请询问是否有任何不清楚的地方。

标签: python python-3.x input replace char


【解决方案1】:

您应该考虑使用replace 方法,该方法可用于string 对象。

考虑这个例子:

>>> txt = 'Hello, world'
>>> txt = txt.replace('world', 'everyone')
>>> txt
'Hello, everyone'

您可以对要替换的每组字符序列执行/使用此操作。请注意,修改后的值作为新的字符串对象返回,因为字符串是不可变的(即无法修改)。

因此,如果您只是简单地执行txt.replace('unwanted text', 'wanted text')txt 仍将保留以前的值。

【讨论】:

    【解决方案2】:

    您的代码无法处理替换多个字符长的子字符串的原因是您的循环for char in sentence: 一次循环一个字符。要看到这一点,请在代码中的循环之后调用print(char),看看char 是否等于'bd'

    python 中的方便字符串有一个名为replace 的方法,它返回一个新字符串,将所有出现的子字符串 old 替换为字符串 new。这使您不必担心循环遍历字符或字符对或其他任何内容(尽管有时在没有replace 的情况下尝试解决问题可能是一个很好的练习)。这是python解释器中的一个例子:

    >>> string = "Hello World!"
    >>> new_string = string.replace("o", "a")
    >>> print(string)
    Hello World!
    >>> print(new_string)
    Hella Warld!
    >>> print(string.replace("Hello", "Goodbye"))
    Goodbye World!
    

    值得强调的是replace不会更改初始字符串它只是返回一个带有更改的新字符串。

    这可能适合您的程序:

    def changeWords(sentence):
        temp_sentence = sentence.replace("a","x")
        temp_sentence = temp_sentence.replace("bd", "y")
        return temp_sentence
    

    或者更简洁,你可以这样做:

    def changeWords(sentence):
        return sentence.replace("a","x").replace("bd", "y")
    

    那么您需要将goWordChange 更改为如下内容:

    def goWordChange():
        print('')
        print('paste text to change')
        print('')
        text = input()
        print('')
        new_text=changeWords(text)
        print('')
        print(new_text)
        return goWordChange()
    

    顺便说一句,在这种情况下,goWordChange 是递归的(最后调用自己)有点难看。我会摆脱那条线,而是在这样的无限循环中调用goWordChange

    while True:
        goWordChange()
    

    因为这种形式使正在发生的事情更加明显,并且可能具有更好的性能(并且 python 限制了递归深度)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多