我是python的新手并经历了一些课程材料并写了这个函数来从字符串中删除特定字符,无论该字符串在字符串中有多少次。
def remove_letter(): #Remove a selected letter from a string
base_string = str(raw_input("Enter String: "))
letter_remove = str(raw_input("Enter Letter: ")) #takes any size string
letter_remove = letter_remove[0]
string_length = len(base_string)
location = 0
while (location < string_length): #by reference (rather than by value)
if base_string[location] == letter_remove:
base_string = base_string[:location] + base_string[location+1::]
string_length -= 1
location+=1
print "Result: %s" % base_string
return
现在这里是我不理解的,如果我在字符串中加上“asdfasdfasdf”,然后选择删除字母“d”,它就完美了。但是如果在字符串中输入“Hello”并选择删除字母“l”,它将只删除一个“l”,结果将是“Helo”。当我把“asdfasdfasdf”和现在的“你好”
时,我无法理解它的工作原理答案 0 :(得分:0)
问题是你的if语句之外有location+=1
。
您的代码在删除后的字母后会跳过该字母。
由于您在删除字母时在迭代中同时执行string_length -= 1
和location+=1
,location
实际上会移动两个索引。
要修复它,你需要做的不仅仅是那个,因为在{if-statement之外还需要location+=1
。
我刚刚解释了出了什么问题,我现在必须跑,但我看到其他人已经给你解决方案了,所以我并不担心。祝你好运!
答案 1 :(得分:0)
考虑
#base_string is 'Hello', location is 2 and string_length is 5.
base_string = base_string[:location] + base_string[location+1::] #'Helo'
然后减少字符串长度并增加位置。
您的位置为3,但'Helo'[3] == 'o'
不是'l'
。从字符串中删除元素时,实质上是将所有剩余字符移动1,因此不应更新location
,因为它现在已经指向下一个字符。
while (location < string_length): #by reference (rather than by value)
if base_string[location] == letter_remove:
base_string = base_string[:location] + base_string[location+1::]
string_length -= 1
else:
location+=1
答案 2 :(得分:0)
这是一个错误。仅当连续出现相同的字符时,它才能正常工作。
Hello
,当它遇到第一个l
l
Helol
,则会删除l
。 Helllo
,结果将是Helo
。 <强>解决方案强>:
当您遇到目标字母时,将其删除并继续迭代更新字符串的其余字符,而不是增加location
添加continue
将解决您的问题。
while (location < string_length): #by reference (rather than by value)
if base_string[location] == letter_remove:
base_string = base_string[:location] + base_string[location+1::]
string_length -= 1
continue
location+=1
测试:
python2 test.py Fri 28 Oct 14:25:59 2016
Enter String: Hello
Enter Letter: l
Result: Heo
答案 3 :(得分:-1)
您可以随时使用字符串替换。
base_string.replace(letter_remove,"")