高中生,我有一个问题需要帮助。我必须计算一个句子中元音的数量并输出总数。元音以及元音最多的单词。但是我遇到了TypeError:列表索引必须是整数或切片,而不是元组并且无法真正弄清楚如何解决它。
string = 'This is a string'
vowels = 'AaEeIiOoUu'
string = string.split(' ')
for i in enumerate(string):
word = string[i]
count = [x for x in word if x in vowels]
print(vowels)
print(len(vowels))
答案 0 :(得分:1)
在迭代 enumerate
时,它总是使用两个参数(元组)。一个是索引,另一个是可迭代对象。在 i
之后使用当代变量来迭代 string
。
for i,s in enumerate(string)
答案 1 :(得分:1)
Enumerate() 方法向可迭代对象添加一个计数器并以枚举对象的形式返回它。您需要在 for i in enumerate(string)
中添加第二个变量,如下所示:
string = 'This is a string'
vowels = 'AaEeIiOoUu'
string = string.split(' ')
for i, char in enumerate(string):
word = string[i]
count = [x for x in word if x in vowels]
print(vowels)
print(len(vowels))
输出
AaEeIiOoUu
10
答案 2 :(得分:0)
第一:如果你打算使用枚举,那么它总是会在迭代中返回一个元组。元组的第一个元素是索引,第二个元素是值。
例如:
for i, word in sentence.split(' '):
这将返回索引,字符串元组如下:
(0, 'This')
(1, 'is')
(2, 'a')
(3, 'string)
虽然您可以使用它,但我认为您可能会发现以下答案很有用。
我看到您已经在代码中使用了列表理解。您可以在一行中完成所有操作。
sentence = 'This is a string'
vowels = 'aeiou'
#you dont need to check for both upper and lower. just use .lower()
count = sum(True for word in sentence.split(' ') for x in word if x.lower() in vowels)
print (count)
说明:
首先,您要迭代句子中的每个单词:for word in sentence.split(' ')
接下来您将使用另一个循环来根据元音 for x in word if x.lower() in vowels
检查单词中的每个字符。注意:您实际上并不需要检查 AaEeIiOoUu。您只需要检查这个集合中的大写或小写之一。
如果找到该值,则将等于 True
的 1
返回给 sum 函数。
用 sum()
语句包装所有这些将在您对 True
求和时为您提供计数。
此外,您正在打印元音和元音长度。这将始终是一个常数,因为您有 AEIOUaeiou
。其长度将始终为 10
。我认为您的目的是找出句子中元音的数量。该值在变量 count