2016-03-22 6 views
2

私はクラスのための "go fish"と呼ばれる簡単なプログラムを作っています。正しい出力でもリストのインデックスが範囲外ですか?

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 

私は必要な正しい入力を得ていますが、何らかの理由でインデックスが範囲外であると表示されています。プログラムが動作しているのにこのエラーが発生するのはなぜですか?私はコーディングに少し新しくて、もっと簡単で簡単なことがあれば、私のコードで自由に指摘できます!前もって感謝します!

- avbirm

+2

'レンジ(20)'はIndexErrorがスローされます、すべてのあなたのリストの長さが10 – haifzhan

+1

よりも小さいあなたが持っているので、あなたは(5)の範囲を使用する必要がありますわずか5ターン。 – arcticless

答えて

2

あなたの問題はここにある:

for i in range(20): 
    if player1Guesses[i] in player2Hand: 

あなたは20の項目(0〜19)を反復が、唯一のあなたのリストに5を持っている:

に変更
player1Guesses = [2, 8, "J", 4, "Q"] 

range(5)はエラーをスローしません。また、iplayer1Guessesの長さと現在行っている小切手の長さよりも小さいかどうかを確認することができますg。 player2Guessesでも同じです。

+0

さて、それははるかに理にかなっています!プログラムが動作していたので私は混乱しましたが、私はそのエラーを受けていました。コードはうまくいきましたが、何度も繰り返していました。私は範囲として5を入力し、それは働いた!この回答を確認します。ありがとうございました! – avbirm

1

iが有効なインデックスかどうかを確認するには、iの値がlistの長さよりも小さくなければなりません。あなたのリストの実際の長さにわたって

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") 
1

反復:

length_of_list = len(player1Guesses) 
for i in range(length_of_list): 
if player1Guesses[i] in player2Hand: 
    print ("HERE'S MY CARD") 
関連する問題