【问题标题】:TypeError: list indices must be integers or slices, not str, Python [duplicate]TypeError:列表索引必须是整数或切片,而不是str,Python [重复]
【发布时间】:2021-12-30 01:39:07
【问题描述】:

我需要在输入的文本中显示元音的数量,如果它们在文本中

TypeError: 列表索引必须是整数或切片,而不是 str

a = 0
e = 0
y = 0
u = 0
o = 0
i = 0
word = input("Введите текст: ")
word1 = list(word)
print(word1)
for j in word1:
    if word1[j] == "a":
        a += 1
    elif word1[j] == "e":
        e += 1
    elif word1[j] == "y":
        y += 1
    elif word1[j] == "u":
        u += 1
    elif word1[j] == "o":
        o += 1
    elif word1[j] == "i":
        i += 1
if a != 0:
    print("a:", a)
if e != 0:
    print("e:", e)
if y != 0:
    print("y:", y)
if u != 0:
    print("u:", u)
if o != 0:
    print("o:", o)
if i != 0:
    print("i:", i)

【问题讨论】:

  • 当您执行for j in word1 时,您会遍历每个字符,而word1 意味着j 将是一个字母,而不是一个数字。因此,当您尝试访问 word1[j] 时,您实际上尝试了类似 word1['a'] 的内容,而不是您可能认为的 word1[0]
  • 你从输入中得到的是一个字符串。把它放在一个列表中不会把它变成一个字符列表。而且您的代码仍然没有意义。无论如何,这里的问题是word1 是一个列表,j 是一个字符串。您不能使用字符串作为列表索引。如果你想这样做,你可以考虑把它改成字典。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: python list


【解决方案1】:

当你遍历一个字符串时,它会返回字符而不是位置。

例如:

for _c in 'test':
    print(_c)

将导致:

t
e
s
t

你应该把它改成:

for j, _c in enumerate(word1):
    ...

enumerate 的作用是为您正在迭代的元素添加一个计数器,您可以找到更多信息here

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2020-11-21
    • 2017-10-08
    • 2015-12-09
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多