所以我编写了这段代码来删除给定的任何字符串中的元音。 它应该工作正常。实际上它确实如此。只是不是所有的字符串 这很奇怪,为什么它会对某些字符串起作用而不适用于其他字符串
这是代码:
vowels = ["a", "e", "i", "o", "u"]
def anti_vowel(text):
text1 = list(text)
print text1
for i in text1:
if i.lower() in vowels:
text1.remove(i)
text2 = "".join(text1)
return text2
以下是我提出的测试:
print anti_vowel("my name is Omar")
print anti_vowel("Hey look Words!")
print anti_vowel("Hey look more Words to look for!")
我尝试在代码中间放置print语句来测试它,我发现了一些奇怪的东西。 for循环迭代大约3或4次以移除一个元音。 我似乎不知道为什么
答案 0 :(得分:2)
这种奇怪的情况发生在2个元音紧挨着的时候。基本上,你是循环单词中的每个字母,但当你删除字母(如果它是一个元音),然后你缩短单词的长度,因此下一个字母将跳过真实< / em>下一封信。当被跳过的字母是元音时,这是一个问题,但是当它是辅音时则不是。
那么我们如何解决这个问题呢?好吧,我们不是修改我们循环的东西,而是创建一个新的字符串并对其进行修改。所以:
text2 = ""
for letter in text1:
if letter not in vowels:
text2 += letter
return text2
这也可以通过列表理解来实现:
return "".join ([letter for letter in text1 if letter not in vowels])
答案 1 :(得分:0)
您不必将字符串转换为列表。请参阅此答案:
答案 2 :(得分:0)
因为for
语句检查列表中的每个字母,即使它删除了该元音。这是一个快速示例,它不会迭代3-4次以删除一个元音:
vowels = ["a", "e", "i", "o", "u"]
def anti_vowel(text):
text1 = list(text.lower())
text1 = [x for x in text1 if x not in vowels]
text2 = "".join(text1)
return (text2)
print anti_vowel("my name is Omar")
print anti_vowel("Hey look Words!")
print anti_vowel("Hey look more Words to look for!")
答案 3 :(得分:0)
我正在使用Python 2.7。我稍微修改了你的代码,
vowels = 'aeiou'
def anti_vowel(text):
text1 = list(text)
print text1
for i in text:
if i.lower() in vowels:
text1.remove(i)
text2 = "".join(text1)
return text2
print anti_vowel("my name is Omar")
#['m', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'O', 'm', 'a', 'r']
#my nm s mr
print anti_vowel("Hey look Words!")
#['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
#Hy lk Wrds!
print anti_vowel("Hey look more Words to look for!")
#['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'm', 'o', 'r', 'e', ' ', 'W', 'o', 'r', 'd', 's', ' ', 't', 'o', ' ', 'l', 'o', 'o', 'k', ' ', 'f', 'o', 'r', '!']
#Hy lk mr Wrds t lk fr!
我不能复制你的问题。 for
循环扫描输入字符串一次(一个字符乘以一个字符)并删除遇到的任何元音。也许您可以发布输出,以便我们进行调试。
答案 4 :(得分:0)
这可以在没有#!python2
def anti_vowel(text):
vowels = ["a", "e", "i", "o", "u"]
s1 = ''
for i in text:
if i.lower() in vowels:
pass
else:
s1 += i
return s1
print anti_vowel("my name is Omar")
print anti_vowel("Hey look Words!")
print anti_vowel("Hey look more Words to look for!")
L = [{'G'}, {'D'}, {'B','C'}]
word='C'
print([True if list(filter(lambda x:word in x,L)) else False])