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

2024-04-16 13:43:29 发布

您现在位置: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)

Tags: of代码名称角色主题列表actionrpg
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

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

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

相关问题 更多 >