Search code examples
python-3.2index-error

Index Error: list index out of ranged (python 3.2)


Me and my friends are working on a project at school and we understand why the error comes up but we can not see where we made that error. We are sure that we have counted it right and we know that in an index it starts at 0 but it is still wrong. Our task is to create a game that moves players around a 7x7 grid but we have to insert some game messages from outside of the code that we are storing in the same file. P.S we are allowed to ask for help. Here is the code Please help!:

import random


counter1 = 0

 counter2 = 0


print("***********************************BOARD GAME**********************************")

 print(" ")

 print("***********************************GAME RULES**********************************")

 print(" ")

 print("----------------------------Game is for 2 players only-------------------------")

print(" ")

 print(">The game board is a 10x5 board going up to 49")

 print(" ")

 print("40 41 42 43 44 45 46 47 48 49")

 print("39 38 37 36 35 34 33 32 31 30")

 print("20 21 22 23 24 25 26 27 28 29")

 print("19 18 17 16 15 14 13 12 11 10")

 print("0  1  2  3  4  5  6  7  8  9 ")

 print(" ")

 print(">The objective is to be the first player to reach space 49")

 print(" ")

 print(">There are 2 die, if you roll the same number twice, you will go back the number of spaces you rolled")

 print(" ")

 print(">If you land on spaces 27, 31 and 47, you will go back to space 24")

 print(" ")

 print(">Press ENTER to play")

 input()


print("**********************************START GAME***********************************")

input()


print("Starting positions for both players = 0")

print(" ")


newfile=open("Game Messages.txt","r")

 print(newfile.readlines()[0])

 dice1 = random.randint(1,6)

 print("dice 1 =",dice1)

 dice2 = random.randint(1,6)

 print("dice 2 =",dice2)

 dicetotal = dice1 + dice2

 print("dice total =",dicetotal)

 if dice1 == dice2:

     counter1 = counter1 - dicetotal

     print(newfile.readlines()[1])    #This is one of the lines that is coming up as an error


 else:

     counter1 = counter1 + dicetotal

 print("P1 space =",counter1)

 if counter1 == 47:

     counter1 = 24

     print(newfile.readlines()[2])

 if counter1 == 27:

     counter1 = 24

     print(newfile.readlines()[3])

 if counter1 == 31:

     counter1 = 24

     print(newfile.readlines()[4])

 if counter1 >= 49:

     print(newfile.readlines()[5])

     print("end game end game end game end game end game end game end game end game end game")

     print("Press ENTER to exit the game")

     exit()

     input()

 input()

 newfile.close


newfile = open("Game Messages.txt.","r")    

 print(newfile.readlines()[6])

 dice1 = random.randint(1,6)

 print("dice 1 =",dice1)

 dice2 = random.randint(1,6)

 print("dice 2 =",dice2)

 dicetotal = dice1 + dice2

 print("dice total =",dicetotal)

 if dice1 == dice2:

     counter2 = counter2 - dicetotal

     print(newfile.readlines()[7])     #This is one of the lines that is coming up as an error

 else:

     counter2 = counter2 + dicetotal

 print("P2 space =",counter2)

 if counter2 == 47:

     counter2 = 24

     print(newfile.readlines()[8])

 if counter2 == 27:

     counter2 = 24

     print(newfile.readlines()[9])

 if counter2 == 31:

     counter2 = 24

     print(newfile.readlines()[10])

 if counter2 >= 49:

     print(newfile.readlines()[11])

     print("end game end game end game end game end game end game end game end game end game")

     print("Press ENTER to exit the game")

     exit()

     input()

 input()

 newfile.close

Solution

  • Actually the problem is getting the file contents from Game Messages.txt. So, first the whole file contents need to be converted into list.

    Please follow this procedure in your program first

    with open('Game Messages.txt', 'r') as infile:
        data = infile.read()  # Read the contents of the file into memory.
        
        # Return a list of the lines, breaking at line boundaries.
        my_list = data.splitlines()
        print(my_list)  # It will give whole file contents as an array
        # E.g.: ['game message1', 'game message2', 'game message3', 'game message4', 'game message5']
        print(my_list[3])  # It will display game message 4
    

    So in your program instead of

    if dice1 == dice2:
        counter2 -= dicetotal
        
        print(newfile.readlines()[7])  # This is one of the lines that is coming up as an error    
    else:
        counter2 += dicetotal
    

    it will be

    if dice1 == dice2:
        counter2 -= dicetotal
        
        print(my_list[3])     #You need to give exact line number, in case 4th means it #will be my_list[3] as array index starts with 0 only
    else:
        counter2 += dicetotal