Python 错误:列表索引超出游戏代码的范围
我遇到列表索引错误的问题,代码可能不是最清晰的。但我对python的编码只知道这么多,但我知道的足以编写一个游戏 使用该函数的代码:Python 错误:列表索引超出游戏代码的范围,python,Python,我遇到列表索引错误的问题,代码可能不是最清晰的。但我对python的编码只知道这么多,但我知道的足以编写一个游戏 使用该函数的代码: #Checks if the move counter is more than 3, if it is, the player gets to decide what he/she wants to do if Moves != 0: Do = input('What do you do? Help to see all commands
#Checks if the move counter is more than 3, if it is, the player gets to decide what he/she wants to do
if Moves != 0:
Do = input('What do you do? Help to see all commands ')
#Tests for if the player wants a magic spell
if Do == 'Magic':
if Moves == 3:
ListToDo = MagicDmg(ListToDo, Moves)
if ListToDo[0] == 'Ice' or 'Fire' or 'Bolt':
Mana = CheckMagicCost1(ListToDo, Mana, Moves)
else:
Moves = Moves - 1
elif Moves == 2:
ListToDo = MagicDmg(ListToDo, Moves)
Mana = CheckMagicCost2(ListToDo, Mana, Moves)
Moves = Moves - 1
else:
ListToDo = MagicDmg(ListToDo, Moves)
Mana = CheckMagicCost3(ListToDo, Mana, Moves)
Moves = Moves - 1
#This function does not handle damage
def MagicDmg(ListToDo, Moves):
print('Which magic? Ice, Fire or Bolt')
MagicDo = input()
if MagicDo != 'Ice' or 'Fire' or 'Bolt':
if MagicDo == 'Ice':
ListToDo.append('Ice')
elif MagicDo == 'Fire':
ListToDo.append('Fire')
elif MagicDo == 'Bolt':
ListToDo.append('Bolt')
else:
LIstToDo.remove(MagicDo)
print('That is not a valid spell')
Moves = Moves + 1
return(ListToDo)
#Subtracts the mana cost of spells from mana
def CheckMagicCost1(ListToDo, Mana, Moves):
if ListToDo[0] and Mana >= 10 == 'Ice':
Mana = Mana - 10
elif ListToDo[0] and Mana >= 15 == 'Fire':
Mana = Mana - 15
elif ListToDo[0] and Mana >= 25 == 'Bolt':
Mana = Mana - 25
else:
print('You do not have enough Mana')
Moves = Moves + 1
return(Mana)
def CheckMagicCost2(ListToDo, Mana, Moves):
if ListToDo[1] and Mana >= 10 == 'Ice':
Mana = Mana - 10
elif ListToDo[1] and Mana >= 15 == 'Fire':
Mana = Mana - 15
elif ListToDo[1] and Mana >= 25 == 'Bolt':
Mana = Mana - 25
else:
print('You do not have enough Mana')
Moves = Moves + 1
return(Mana)
def CheckMagicCost3(ListToDo, Mana, Moves):
if ListToDo[2] and Mana > 9 == 'Ice':
Mana = Mana - 10
elif ListToDo[2] and Mana > 14 == 'Fire':
Mana = Mana - 15
elif ListToDo[2] and Mana > 24 == 'Bolt':
Mana = Mana - 25
else:
print('You do not have enough Mana')
Moves = Moves + 1
return(Mana)
结果是:
A Azure Drake appeared! With 500 HP!
HP = 250 Mana = 250
Moves left: 3
Boss's HP: 500
What do you do? Help to see all commands Magic
Which magic? Ice, Fire or Bolt
i (False spell)
Traceback (most recent call last):
File "D:\Python\Battle Test V2.py", line 186, in <module>
if ListToDo[0] != 'Ice' or 'Fire' or 'Bolt':
IndexError: list index out of range
一只蓝色的龙出现了!500马力!
生命=250法力=250
左移:3
老板的生命值:500
你是做什么的?帮助查看所有魔法命令
哪种魔法?冰、火或螺栓
i(假拼写)
回溯(最近一次呼叫最后一次):
文件“D:\Python\Battle Test V2.py”,第186行,在
如果ListToDo[0]!='“冰”或“火”或“螺栓”:
索引器:列表索引超出范围
我无法立即判断这是否是您唯一的问题,但这条线路肯定行不通。
真正需要检查的是以下内容:
if (MagicDo != 'Ice') or ('Fire' != None) or ('Bolt' != None):
if ListToDo[0] == 'Ice' and Mana >= 10:
此问题的一个可能解决方案是更改为:
if MagicDo in(['Ice','Fire','Bolt']):
这将检查MagicDo
是否是你想要的三种法术之一。再说一遍,我不确定这是否是你唯一的问题,但这绝对是个问题
编辑:我还注意到您的CheckMagicCost
函数中有一个问题。你的条件句都不能满足你的要求。例如,该行
if ListToDo[0] and Mana >= 10 == 'Ice':
正在检查以下内容
if (ListToDo[0] != None) and ((Mana >= 10) == 'Ice'):
我猜你想要的是更像以下的东西:
if (MagicDo != 'Ice') or ('Fire' != None) or ('Bolt' != None):
if ListToDo[0] == 'Ice' and Mana >= 10:
此更改应该传播到
CheckMagicCost1
、CheckMagicCost2
和CheckMagicCost3
函数中的其余条件中。如果没有错误代码,就不会有太多事情发生,但我的直觉是,如果函数中出现这些语句,您会遇到麻烦:
if ListToDo[1]
用try块包装并捕获索引器可能更好?只是一个想法
try:
#code
except IndexError:
#contingency plan
请编辑完整的错误代码。谢谢無 为了将我的函数编辑到Script Tyrf ListtoDO(0)和Maa>=10==‘ICE’:你(MayBa)想说如果LeN(ListtoDo)>0为第一个PAR;第二,我猜不出。法力是数字还是字符串?请发布错误消息!!法力值是一个整数:大约250。Eric LevieilThanks Brien,我会在我的代码中尝试。从我的测试来看,这似乎是目前为止脚本中唯一的问题。在我达到这种状态之前,我的代码中有一些错误,但大多数只是编码错误,比如忘记了一些东西。谢谢,这将在将来帮助我完成其他代码项目