我知道string.replace("x", "y")
方法,但我尝试从字符串中手动删除字符,以帮助我更好地理解Python和编程。我现在的方法详述如下,但我不明白为什么" Dee"并删除" e"它将返回" De",但对于" John Do"并删除" o"它将返回" Jhn D"。因此,它删除了两个字母,但在第一个字母中只有一个字母。
非常感谢任何帮助。
def remove_letter(): # Remove a selected letter from a string
base_string = str(raw_input("Enter some text: "))
letter = str(raw_input("Enter the letter to remove: ")) # takes any string size
letter = letter[0] # ensures just one character is used
length = len(base_string)
location = 0
while location < length:
if base_string[location] == letter:
base_string = base_string[:location] + base_string[location+1::]
# concatenate string using slices
length -= 1
location += 1
print("Result %s" % base_string)
答案 0 :(得分:3)
oyu的问题在于,在删除字母时更改要删除字母的字符串的大小:
当你删除第一个&#39; e&#39;在Dee,你有location = 1,对应于第一个&#e; e,但现在是第二个&#39;。删除e后,在当前循环结束时,您的位置= 2,长度= 2,因此停止循环。
如何解决问题:仅在找不到字母时增加位置:
else:
location += 1
这样可以防止你的循环在删除字母后不立即检查字母。
如果您需要更多解释,请询问。
答案 1 :(得分:2)
考虑到khelwood和HolyDanna的说法,这可能是一种可行的方法:
def removeletter(string, letter):
out = ''
for i in string:
if not i == letter:
out += i
return out
altered_string = removeletter(string, letter)
编辑 - 您也可以轻松地将其扩展为str.replace()
方法,但仅适用于单个字符:
def stringreplace(string, letter, replacement):
out = ''
for i in string:
if i == letter:
out += replacement
else:
out += i
return out
altered_string = stringreplace(string, letter, replacement)