所以我现在正在开展一个项目并不断收到此错误,但我不知道问题所在。
第92行,在比赛中 playerOne.append(桩[0]) IndexError:列表索引超出范围
我不明白是什么导致它超出范围。这是我的代码。我用于startHand和桩的所有列表都已在上面定义。
def play(startHand, pile):
playerOne = []
playerTwo = []
for i in range(0, 5):
playerOne.append(startHand[i])
i += 1
for i in range(5, 10):
playerTwo.append(startHand[i])
i += 1
initPoints = pile[0]
del pile[0]
if median(playerOne) == 9:
scoreOne = initPoints
else:
scoreOne = initPoints + median(playerOne)
if median(playerTwo) == 9:
scoreTwo = initPoints
else:
scoreTwo = initPoints + median(playerTwo)
playerOne.remove(median(playerOne))
playerTwo.remove(median(playerTwo))
playerOne.append(pile[0])
playerTwo.append(pile[1])
del pile[0]
del pile[0]
while scoreOne or scoreTwo < 99 or len(pile) > 0:
if median(playerOne) == 9:
scoreOne = scoreOne
else:
scoreOne = scoreOne + median(playerOne)
if median(playerTwo) == 9:
scoreTwo = scoreTwo
else:
scoreTwo = scoreTwo + median(playerTwo)
playerOne.remove(median(playerOne))
playerTwo.remove(median(playerTwo))
playerOne.append(pile[0])
playerTwo.append(pile[1])
del pile[0]
del pile[0]
如果有人可以解释导致错误的原因,我将非常感激。提前谢谢。
答案 0 :(得分:1)
while scoreOne or scoreTwo < 99 or len(pile) > 0:
该行是错误的,错误的,错误的:
scoreOne or scoreTwo < 99
实际上与(scoreOne) or (scoreTwo < 99)
类似,因此只要scoreOne
不为零,就会执行while
语句(即使pile
为空) or
语句,这意味着pile
只要分数<&lt; 1&gt; 就可以为空99。你想要的是
while scoreOne < 99 and scoreTwo < 99 and len(pile)>0:
或以更加pythonic的方式(测试空列表可以通过仅测试列表本身来检查此列表的“真实性”):
while scoreOne < 99 and scoreTwo < 99 and pile:
只要两个分数都低于99而且pile
中有某些内容,就会让你的程序保持循环。
答案 1 :(得分:1)
IndexError:列表索引超出范围
这意味着您正在访问它所拥有的元素之外的列表(f.e.)。检查列表内容并确保它不是无。