Python 试图替换文本,但字符串未更改

Python 试图替换文本,但字符串未更改,python,string,function,Python,String,Function,编写一个Python程序,从给定字符串中获取一个字符串,该字符串的第一个字符的所有匹配项都已更改为“$”,但第一个字符本身除外 我的代码是这样的: stringa = "restart" def swaping(palavra): prim = palavra[0] for i in palavra: if prim in palavra and prim not in palavra[0]: palavra.re

编写一个Python程序,从给定字符串中获取一个字符串,该字符串的第一个字符的所有匹配项都已更改为“$”,但第一个字符本身除外

我的代码是这样的:

stringa = "restart" 

def swaping(palavra):
    prim = palavra[0] 
    for i in palavra:
        if prim in palavra and prim not in palavra[0]:
            palavra.replace(prim, "$") 
    return palavra 

print(swaping(stringa))


它应该返回
resta$t
,但它返回了相同的表单,
restart


有人知道为什么它不起作用吗?示例解决方案与我的完全不同,他们选择将字符串一分为二,最后将它们绑定在一起。

字符串保持不变的原因是
if
语句始终返回False:

  • palavra中的
    prim
    始终为真,因为
    prim
    是字符串
    palavra
    中的第一个字符
  • prim not in palavra[0]
    始终为False,因为
    prim
    palavra[0]
    ,因此它始终在自身中
将它们与
子句组合在一起,每次都会得到一个False

而且,
str.replace
将替换它找到的每个事件(大多数情况下)。在Python中,除了将字符串一分为二并执行解决方案所执行的操作外,没有办法替换特定索引处的字符

无论如何,有一个更简单的解决方案使用
str.replace

def交换(字符串):
返回字符串[0]+字符串[1:]。替换(字符串[0],“$”)

只是一个简单的
替换()
,如下所示:

stringa = "restart" 

def swaping(palavra):
    prim = palavra[0] 
    for i in palavra:
        if prim in palavra and prim not in palavra[0]:
            palavra.replace(prim, "$") 
    return palavra 

print(swaping(stringa))


string='restart'
new_str=string.replace('r','$')。replace('$','r',1)
纽约街
输出:
“resta$t”

在您的代码中,我可以看到它永远不会进入
if
循环,因为
prim not In palavra[0]
在分配
prim=palavra[0]
时总是给出
False
,所以您的“字符串”不会更改。 我建议使用以下代码:

stringa = "restart" 

def swaping(palavra):
    prim = palavra[0] 
    palavra = ''.join([prim,palavra[1:].replace(prim,'$')])
    return palavra 

print(swaping(stringa))

您需要迭代字符串并将第一个字符与每个元素匹配(如果匹配),然后在结果字符串中添加
$
,否则在结果字符串中添加相同的字符并返回该结果字符串

def func(string):
    if len(string)<2:
        return string
    first = string[0]
    result = first
    for i, v in enumerate(string[1:]):
        if v==first:
            result+='$'
        else:
            result+=v
    return result

result = func('restart')
print(result)

您可以尝试
返回prim+palavra[1:].replace(prim,$)
除了其他答案之外,
.replace()
函数不会修改现有字符串,而不是循环;它返回一个新的修改字符串,但您不保存此结果。