Python 即使输出正确,列表索引也超出范围?

Python 即使输出正确,列表索引也超出范围?,python,python-2.7,Python,Python 2.7,我正在为一个班级制作一个名为“钓鱼”的简单程序 player1Hand = [2, 4, 6, 8, "J", "Q", "K"] player2Hand = [3, 4, 5, 6, 9, 10, "A"] player1Guesses = [2, 8, "J", 4, "Q"] player2Guesses = [6, 9, "A", 5, 3] 基本上有5圈(10个总输出)。如果玩家1猜测在玩家2的手中,那么我应该输出“这是我的牌”,如果牌不在手中,则输出“钓鱼”,反之亦然。我让它工作,

我正在为一个班级制作一个名为“钓鱼”的简单程序

player1Hand = [2, 4, 6, 8, "J", "Q", "K"]
player2Hand = [3, 4, 5, 6, 9, 10, "A"]
player1Guesses = [2, 8, "J", 4, "Q"]
player2Guesses = [6, 9, "A", 5, 3]
基本上有5圈(10个总输出)。如果玩家1猜测在玩家2的手中,那么我应该输出“这是我的牌”,如果牌不在手中,则输出“钓鱼”,反之亦然。我让它工作,但我不断得到索引外的错误

for i in range(20):
    if player1Guesses[i] in player2Hand:
        print ("HERE'S MY CARD")
    else:
        print ("GO FISH")
    if player2Guesses[i] in player1Hand:
        print ("HERE'S MY CARD")
    else:
        print("GO FISH")
我尝试将范围更改为21和19,但仍然得到相同的错误和输出

GO FISH
HERE'S MY CARD
GO FISH
GO FISH
GO FISH
GO FISH
HERE'S MY CARD
GO FISH
GO FISH
GO FISH
Traceback (most recent call last):
  File "C:\Users\Allen\Dropbox\Computer Science\GoFish.py", line 8, in <module>
    if player1Guesses[i] in player2Hand:
IndexError: list index out of range
钓鱼
这是我的名片
钓鱼
钓鱼
钓鱼
钓鱼
这是我的名片
钓鱼
钓鱼
钓鱼
回溯(最近一次呼叫最后一次):
文件“C:\Users\Allen\Dropbox\Computer Science\GoFish.py”,第8行,在
如果玩家1在玩家2中使用[i]:
索引器:列表索引超出范围
我得到了我需要的正确输入,但出于某种原因,它仍然表示索引超出范围。为什么即使在程序运行时,我也会收到这个错误?我对编码也有点陌生,如果你看到任何更容易或更简单的事情,我可以用我的代码来做,请随意指出!提前谢谢


-avbirm

您的问题在于:

for i in range(20):
    if player1Guesses[i] in player2Hand:
您迭代了20项(0到19项),但列表中只有5项:

player1Guesses = [2, 8, "J", 4, "Q"]
length_of_list = len(player1Guesses)
for i in range(length_of_list):
if player1Guesses[i] in player2Hand:
    print ("HERE'S MY CARD")

更改为
范围(5)
不会抛出错误,或者您可以检查
i
是否小于
player1guesss
的长度以及您当前正在执行的检查。对于
player2guesss

检查i是否为有效索引,i的值必须小于列表的长度

player1Hand = [2, 4, 6, 8, "J", "Q", "K"]
player2Hand = [3, 4, 5, 6, 9, 10, "A"]
player1Guesses = [2, 8, "J", 4, "Q"]
player2Guesses = [6, 9, "A", 5, 3]

for i in range(20):
    if i < len(player1Guesses) and player1Guesses[i] in player2Hand:
        print ("HERE'S MY CARD")
    else:
        print ("GO FISH")
    if i < len(player2Guesses) and player2Guesses[i] in player1Hand:
        print ("HERE'S MY CARD")
    else:
        print("GO FISH")
player1Hand=[2,4,6,8,“J”,“Q”,“K”]
player2Hand=[3,4,5,6,9,10,“A”]
player1guesss=[2,8,“J”,4,“Q”]
player2guesss=[6,9,“A”,5,3]
对于范围(20)内的i:
如果我
迭代列表的实际长度:

player1Guesses = [2, 8, "J", 4, "Q"]
length_of_list = len(player1Guesses)
for i in range(length_of_list):
if player1Guesses[i] in player2Hand:
    print ("HERE'S MY CARD")

range(20)
将抛出indexer错误,所有列表长度都小于10。您应该使用range(5),因为您只有5圈。好吧,这更有意义!我很困惑,因为程序正在运行,但我一直得到那个错误。代码运行良好,但我只是重复了太多次。我输入了5作为范围,它工作了!我将检查此响应。非常感谢。