Python TypeError:字符串索引必须是整数

Python TypeError:字符串索引必须是整数,python,Python,所以,我试着为Pokédex编写代码,下面的代码部分用于打印Pokémon的统计数据。请注意,在这三本词典之前还有715本其他词典: Xerneas = {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99, 'Ability': "Fairy Aura", 'Type': "Fairy"} Yveltal = {'HP': 126, 'Atk': 131, 'Def': 95, 'SAt

所以,我试着为Pokédex编写代码,下面的代码部分用于打印Pokémon的统计数据。请注意,在这三本词典之前还有715本其他词典:

Xerneas = {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99,
           'Ability': "Fairy Aura", 'Type': "Fairy"}
Yveltal = {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99,
           'Ability': "Dark Aura", 'Type': "Dark/Flying"}
Zygarde = {'HP': 108, 'Atk': 100, 'Def': 121, 'SAtk': 81, 'SDef': 95, 'Spd': 95,
           'Ability': "Aura Break", 'Type': "Dragon/Ground"}

Mode = input('Which mode? ')
if Mode == "Pokedex":
    Pokemon = input("Which Pokemon? ")
    print(Pokemon['HP'],
          Pokemon['Atk'],
          Pokemon['Def'],
          Pokemon['SAtk'],
          Pokemon['SDef'],
          Pokemon['Spd'],
          Pokemon['Ability'],
          Pokemon['Type'])
于是我试着运行我的代码并调用Zygarde的信息,但出现了以下错误:

Traceback (most recent call last):
  File "/Users/Cobalt/Documents/Python/Pokédex.py", line 154, in <module>
    print(Pokemon['HP'],
TypeError: string indices must be integers
>>> 
回溯(最近一次呼叫最后一次):
文件“/Users/Cobalt/Documents/Python/Pokédex.py”,第154行,在
打印(口袋妖怪['HP'],
TypeError:字符串索引必须是整数
>>> 
这个问题有没有简单的解决办法?如果有必要,我愿意重新格式化718本字典

顺便说一下,这是我在这个网站上的第一个问题,所以请不要对我太苛刻

Pokemon = input("Which Pokemon? ")
这使得
Pokemon
成为一个字符串。然后,您可以通过执行以下操作来尝试访问此字符串:

Pokemon['HP']
现在解释器会抱怨,因为
HP
不是字符串上下文中的有效索引。 我猜你是想在这里有一本字典吧

您可能想做的事情大致如下:

制作一本包含所有口袋妖怪的字典,例如我们可以称之为
pokemon\u dict

pokemon_dict = { "xerneas" : Xerneas, .....}

selection = input("Which Pokemon? ")
pokemon_selected = pokemon_dict[selection]
print(pokemon_selected['HP'])
这使得
Pokemon
成为一个字符串。然后,您可以通过执行以下操作来尝试访问此字符串:

Pokemon['HP']
现在解释器会抱怨,因为
HP
不是字符串上下文中的有效索引。 我猜你是想在这里有一本字典吧

您可能想做的事情大致如下:

制作一本包含所有口袋妖怪的字典,例如我们可以称之为
pokemon\u dict

pokemon_dict = { "xerneas" : Xerneas, .....}

selection = input("Which Pokemon? ")
pokemon_selected = pokemon_dict[selection]
print(pokemon_selected['HP'])
此声明

Pokemon = input("Which Pokemon? ")
将口袋妖怪设置为字符串。

此语句

Pokemon = input("Which Pokemon? ")

将口袋妖怪设置为字符串。

您需要像这样创建多维数组

pokemon = { 'Xerneas':  {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99,
           'Ability': "Fairy Aura", 'Type': "Fairy"},
  'Yveltal': {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99,
           'Ability': "Dark Aura", 'Type': "Dark/Flying"},
  'Zygarde': {'HP': 108, 'Atk': 100, 'Def': 121, 'SAtk': 81, 'SDef': 95, 'Spd': 95,
           'Ability': "Aura Break", 'Type': "Dragon/Ground"}
}
然后,当您询问要使用哪个口袋妖怪时:

    pokemon_type = input("Which Pokemon? ")
    print(pokemon[pokemon_type]['HP'],
          pokemon[pokemon_type]['Atk'],
          pokemon[pokemon_type]['Def'],
          pokemon[pokemon_type]['SAtk'],
          pokemon[pokemon_type]['SDef'],
          pokemon[pokemon_type]['Spd'],
          pokemon[pokemon_type]['Ability'],
          pokemon[pokemon_type]['Type'])

您需要像这样创建多维数组

pokemon = { 'Xerneas':  {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99,
           'Ability': "Fairy Aura", 'Type': "Fairy"},
  'Yveltal': {'HP': 126, 'Atk': 131, 'Def': 95, 'SAtk': 131, 'SDef': 98, 'Spd': 99,
           'Ability': "Dark Aura", 'Type': "Dark/Flying"},
  'Zygarde': {'HP': 108, 'Atk': 100, 'Def': 121, 'SAtk': 81, 'SDef': 95, 'Spd': 95,
           'Ability': "Aura Break", 'Type': "Dragon/Ground"}
}
然后,当您询问要使用哪个口袋妖怪时:

    pokemon_type = input("Which Pokemon? ")
    print(pokemon[pokemon_type]['HP'],
          pokemon[pokemon_type]['Atk'],
          pokemon[pokemon_type]['Def'],
          pokemon[pokemon_type]['SAtk'],
          pokemon[pokemon_type]['SDef'],
          pokemon[pokemon_type]['Spd'],
          pokemon[pokemon_type]['Ability'],
          pokemon[pokemon_type]['Type'])

谢谢你的提示。但是,当我将代码更改为多维数组时,我得到了一个“无效的语法错误消息,然后将光标移到'yveltal'和冒号之间。还有什么问题吗?没关系,我发现了我的错误。谢谢你的帮助!谢谢你的提示。但是,当我将代码更改为多维数组时,我得到了一个错误。”“无效的语法错误消息,然后将光标移到'yveltal'和冒号之间。是否还有其他问题?没关系,我发现了错误。谢谢您的帮助!