Python Append()和pop()问题
当我试图从列表中弹出X张卡片时,它说我不能从空列表中弹出,但我确信列表应该是满的!还有别的办法吗Python Append()和pop()问题,python,Python,当我试图从列表中弹出X张卡片时,它说我不能从空列表中弹出,但我确信列表应该是满的!还有别的办法吗 while len(dogs) > 0: for i in range(0,CardAmount): playersDeck.append(dogs.pop(0)) computersDeck
while len(dogs) > 0:
for i in range(0,CardAmount):
playersDeck.append(dogs.pop(0))
computersDeck.append(dogs.pop(0))
完整代码:
Dogs.txt文件:
控制台中的错误:
playersDeck.append(dogs.pop(0))
IndexError: pop from empty list
在while循环的每次迭代中,您都会给
playersDeck
提供cardamunt
卡数,给computerDeck
提供cardamunt
卡数,因此您至少需要2*cardamunt
才能进行循环
因此,与其检查if len(dogs)>0
,不如检查if len(dogs)>=2*cardaument
,这样就可以进行循环
while len(dogs) >= 2*CardAmount:
for i in range(0, CardAmount):
playersDeck.append(dogs.pop(0))
computersDeck.append(dogs.pop(0))
顺便说一句,与其在循环中执行pop,不如执行以下操作:
while len(dogs) >= 2*CardAmount:
playersDeck.append(dogs[:2*CardAmount:2]) # even poitions
computerDeck.append(dogs[1:2*CardAmount:2]) # odd positons
dogs = dogs[2*CardAmount:] # update dogs
您正在while循环中检查
dogs
,但是您有一个for循环没有检查它。如果dogs
包含的元素少于cardamunt
的两倍(因为在for循环中,您会弹出两次),您将遇到问题(这就是您实际看到的)。要解决此问题,您可以在while循环中执行以下检查:while len(dogs)>2*cardamunit:
您正在pop
ping两次并检查一次。这是一种糟糕的做事方式