为什么这会导致出界错误?

问题描述 投票:-3回答:2

所以我现在正在开展一个项目并不断收到此错误,但我不知道问题是什么。

第92行,播放playerOne.append(pile [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]

如果有人能解释导致错误的原因,我将非常感激。提前致谢。

python list loops
2个回答
1
投票

IndexError:列表索引超出范围

这意味着您正在访问它所拥有的元素之外的列表(f.e.)。检查列表内容并确保它不是None。


1
投票
while scoreOne or scoreTwo < 99 or len(pile) > 0:

那条线是错的,错的,错的:

  • scoreOne or scoreTwo < 99实际上就像(scoreOne) or (scoreTwo < 99),所以只要scoreOne不为零,就会执行while语句(即使pile为空)
  • 即使有修复,你仍然使用or语句,这意味着只要得分<99,pile就可以为空。

你想要的是什么

while scoreOne < 99 and scoreTwo < 99 and len(pile)>0:

或者以更加pythonic的方式(测试空列表可以通过仅测试列表本身来检查此列表的“真实性”):

while scoreOne < 99 and scoreTwo < 99 and pile:

只要两个分数都低于99并且pile中有一些东西,它就会使你的程序保持在循环中。

© www.soinside.com 2019 - 2024. All rights reserved.