2013-07-26 397 views
2

我基本上写一个简单的功能,在用户输入的句子(strng),字母(字母)和另一个字母(更换)取代的第一个字母。下面是我有:Python - 替换字符串中的字母?

def letter_replace(strng, letter, replace): 
    replace = str(replace) 
    for char in strng: 
     if char == letter.upper() or char == letter.lower(): 
      strng.replace(char, replace) 
      return strng 
     else: 
      return "Sorry, the letter could not be replaced." 

我想不通,为什么这是不行的。很抱歉,如果这是一个完全明显的错误,我对Python相当陌生。 谢谢

回答

6

strings是不可变的,您需要将它分配给一个新变量并返回。 replace()返回一个新的字符串,并没有改变它。

>>> def letter_replace(strng, letter, replace): 
    replace = str(replace) 
    for char in strng: 
     if char == letter.upper() or char == letter.lower(): 
      strng = strng.replace(char, replace) 
      return strng # Or just do return strng.replace(char, replace) 
     else: 
      return "Sorry, the letter could not be replaced." 


>>> letter_replace('abc', 'a', 'f') 
'fbc' 
+0

感谢。很好地解释了 – Perceptic

+0

@Perceptic:不客气。随时接受答案。 :) –

+0

我试图,它告诉我等3分钟:) – Perceptic

3
strng.replace(char, replace) 

这确实更换,创建一个新的字符串,然后扔掉改变的字符串,因为你不把它分配给一个变量。

既然你只是去反正返回它,你可以简单的写:

return strng.replace(char, replace) 
0

你可以这样做使用正则表达式:

In [11]: import re 

In [12]: def letter_replace(s, l, r): 
    ....:  p = re.compile(l, re.IGNORECASE) 
    ....:  return p.sub(r, s, 1) 
    ....: 

In [13]: letter_replace('AaBbCc', 'a', 'x') 
Out[13]: 'xaBbCc' 
+0

矫枉过正恕我直言。 –

+0

@SanjayT.Sharma,也许,但这很简单易读。 – soon

0

使用字符串翻译!

import string 
old_chars = "aeiou" 
replace_chars = "[email protected]#$%" 
tab = string.maketrans(old_chars,replace_chars) 
print "somestring".translate(tab) 

哦没关系...我只是看你只想用一个字......

使用...与string.replace