如果输入为'ameer bau'
,则输出应为'mr b'
,但我收到错误消息'index out of range'
,我的代码在下面
str=input()
new=list(str)
for i in range(len(new)):
if new[i]=='a' or new[i]=='e' or new[i]=='i' or new[i]=='o' or new[i]=='u':
new.pop(i)
str1="".join(new)
print(str1)
答案 0 :(得分:3)
在您的for
循环中,您循环访问new
的索引,但是在循环的主体中调用了new.pop(i)
。这会改变列表的大小,最终导致IndexError
。
相反,请使用列表理解(如果需要列表)或生成器表达式:
string = input()
vowels = {'a', 'e', 'i', 'o', 'u'}
new_string = ''.join(x for x in string if x not in vowels)
print(new_string)
答案 1 :(得分:1)
string = 'ameer bau'
new_string = ''
for letter in string:
if letter not in 'aeiou':
new_string += letter
print (new_string)
# mr b
要进行更改以使其完全适合您的问题:
string = input('Enter your string here: ')
new_string = ''
for letter in string:
if letter not in 'aeiou':
new_string += letter
print (new_string)
# mr b
此外,str
是保留关键字,您不应将其用作变量名
答案 2 :(得分:0)
另一种选择是build a translation table,然后使用str.translate
丢弃元音:
remove_vowels = str.maketrans('', '', 'aeiou')
'example text'.translate(remove_vowels)
# 'xmpl txt'
答案 3 :(得分:0)
欢迎您!
每次从new
弹出项目时,列表会变短,从而导致索引错误。您可以改为:
编辑:就像@Rarblack指出的那样,这不适用于连续多于一个元音的字符串。抱歉。
for i in new:
if i in ('a', 'e', 'i', 'o', 'u'):
new.remove(i)
str1 = ''.join(new)
答案 4 :(得分:0)
您可以使用str.translate
或正则表达式,即
new.translate(str.maketrans('','','aeiou'))
其中str
是字符串关键字,而不是您的变量名,或者您可以这样做
import re
new = re.sub('[aeiou]','',input())