得到一个类型错误,不知道如何解决这个问题

时间:2021-01-25 05:12:07

标签: python python-3.x

高中生,我有一个问题需要帮助。我必须计算一个句子中元音的数量并输出总数。元音以及元音最多的单词。但是我遇到了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))

3 个答案:

答案 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。您只需要检查这个集合中的大写或小写之一。

如果找到该值,则将等于 True1 返回给 sum 函数。

sum() 语句包装所有这些将在您对 True 求和时为您提供计数。

此外,您正在打印元音和元音长度。这将始终是一个常数,因为您有 AEIOUaeiou。其长度将始终为 10。我认为您的目的是找出句子中元音的数量。该值在变量 count