我需要在列表索引器中的列表中索引一个值。错误:列表索引超出范围

2021-08-02 17:18:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个简单的基于回合的攻击RPG,它以LOTR为主题。每个角色都有一个动作列表(进攻/防守),每个动作都有自己的递归列表,其中包含动作名称、力量、消耗的法力值以及我以后用来计算成功率的数字。下面是一个小片段,我想告诉玩家,如果他有足够的法力值,他可以执行哪些动作(动作[2])。每回合我只想让玩家看到他有足够的法力来执行的动作。当我在Pycharm中运行代码时,它实际上会打印出我需要的值,但它仍然会关闭代码,并出现索引错误。如何在不更改列表布局的情况下修复此问题?谢谢您!你知道吗

action_list = [['Wrath of Mordor', 25, 20, 70],
                        ['Howl of the Ring Wraiths', 35, 25, 60],
                        ['Might of Morgoth', 40, 35, 45],
                        ['Pass']]

mana = 100

for action in action_list:
    if action[2] <= mana:
        print(action)
2条回答
网友
1楼 ·

快速解决您的问题,您会得到一个索引错误,因为您的上一次迭代只有一个项目,您试图访问它的第三个项目(如Daniel所评论的)。你知道吗

for action in action_list:
    if action[0] == 'Pass':
        print('Pass') 
    elif action[2] <= mana:
        print(action)
网友
2楼 ·

这是另一种方法。它使用列表理解并保留允许操作的列表。我也减少了法力来测试资源限制。你知道吗

action_list = [['Wrath of Mordor', 25, 20, 70],
               ['Howl of the Ring Wraiths', 35, 25, 60],
               ['Might of Morgoth', 40, 35, 45],
               ['Pass']]

mana = 30

act_choice = [action for action in action_list
              if len(action) >= 2 and action[2] <= mana]

if act_choice:
    for action in act_choice:
        print(action[0], action[2])
else:
    print("Pass")

输出:

Wrath of Mordor 20
Howl of the Ring Wraiths 25

相关问题