Python Forum
Message='int' object is not subscriptable
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Message='int' object is not subscriptable
#1
I'm trying to make battle ships in python and for program works for the most part apart from supposedly randomly when the computer is generating coordinates to attack the player and misses instead of creating a coordinate it creates a number.
The coordinate generator works by having a list ["a","b","c","d","e","f","g","h"] then generating a random number for the row (0,7) which is then used to take a letter from the list e.g. if the random number is 2 it would take c from the list. Then it would generate a second number for the column (1,8) then put them together to create a coordinate. e.g. c5. This works a lot of the time but at some points instead of getting c5 it would give 25 and i'm not sure why as it doesn't do it all the time.

import sys
import random
import time
# GUI
print("Welcome to battle boats\n1. New game\n2. Continue game\n3. Quit")
startMenuInput = input("Enter 1, 2 or 3 to make your choice: ")

## Subroutines here

def printGrid(nums,lines,a,b,c,d,e,f,g,h):
    print(*nums, sep = '')
    print(*lines, sep = '')
    print(*a, sep='')
    print(*b, sep='')
    print(*c, sep='')
    print(*d, sep='')
    print(*e, sep='')
    print(*f, sep='')
    print(*g, sep='')
    print(*h, sep='')
    print("\n")

def printCOMGrid(COMnums,COMlines,COMa,COMb,COMc,COMd,COMe,COMf,COMg,COMh):
    print(*COMnums, sep = '')
    print(*COMlines, sep = '')
    print(*COMa, sep='')
    print(*COMb, sep='')
    print(*COMc, sep='')
    print(*COMd, sep='')
    print(*COMe, sep='')
    print(*COMf, sep='')
    print(*COMg, sep='')
    print(*COMh, sep='')
    print("\n")

def printTargetTracker(TTnums,TTlines,TTa,TTb,TTc,TTd,TTe,TTf,TTg,TTh):
    print(*TTnums, sep = '')
    print(*TTlines, sep = '')
    print(*TTa, sep='')
    print(*TTb, sep='')
    print(*TTc, sep='')
    print(*TTd, sep='')
    print(*TTe, sep='')
    print(*TTf, sep='')
    print(*TTg, sep='')
    print(*TTh, sep='')
    print("\n")

def newGame():
    enteredCoordinates = []
    COMenteredCoorindates = []
    COMattackCoordinates = []

    nums = ["   "," 1 ","  2 ","  3 ","  4 ","  5 ","  6 ","  7 ","  8 "]
    lines = ["  ---------------------------------"]
    a = ["a| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    b = ["b| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    c = ["c| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    d = ["d| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    e = ["e| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    f = ["f| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    g = ["g| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    h = ["h| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    
    COMnums = ["   "," 1 ","  2 ","  3 ","  4 ","  5 ","  6 ","  7 ","  8 "]
    COMlines = ["  ---------------------------------"]
    COMa = ["a| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMb = ["b| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMc = ["c| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMd = ["d| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMe = ["e| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMf = ["f| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMg = ["g| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    COMh = ["h| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]

    TTnums = ["   "," 1 ","  2 ","  3 ","  4 ","  5 ","  6 ","  7 ","  8 "]
    TTlines = ["  ---------------------------------"]
    TTa = ["a| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTb = ["b| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTc = ["c| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTd = ["d| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTe = ["e| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTf = ["f| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTg = ["g| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]
    TTh = ["h| ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] ","[ ] "]

    
    for i in range (5):
        alreadyEntered = True
        placementCoordinate = input("Enter the coordinates of your boat: ")
        print("\n")
        while alreadyEntered == True:
            if placementCoordinate in enteredCoordinates:
                alreadyEntered = True
                placementCoordinate = input("Coordinate already entered, enter another coordinate: ")
            else:
                alreadyEntered = False
        if alreadyEntered == False:
            enteredCoordinates.append(placementCoordinate)
            row = placementCoordinate[0]
            column = placementCoordinate[1]
            column = int(column)
            if row == "a":
                a.pop(column)
                a.insert(column,"[*] ")
            if row == "b":
                b.pop(column)
                b.insert(column,"[*] ")
            if row == "c":
                c.pop(column)
                c.insert(column,"[*] ")
            if row == "d":
                d.pop(column)
                d.insert(column,"[*] ")
            if row == "e":
                e.pop(column)
                e.insert(column,"[*] ")
            if row == "f":
                f.pop(column)
                f.insert(column,"[*] ")
            if row == "g":
                g.pop(column)
                g.insert(column,"[*] ")
            if row == "h":
                h.pop(column)
                h.insert(column,"[*] ")
        
            printGrid(nums,lines,a,b,c,d,e,f,g,h)

    cRowsList = ["a","b","c","d","e","f","g","h"]
    for i in range (5):
        alreadyEntered = True
        randRow = random.randint(0,7)
        randCol = random.randint(1,8)
        cRow = cRowsList[randRow]
        stringCol = str(randCol)
        COMcoordinate = cRow + stringCol
        while alreadyEntered == True:
            if COMcoordinate in COMenteredCoorindates:
                alreadyEntered = True
                randRow = random.randint(0,7)
                randCol = random.randint(1,8)
                cRow = cRowsList[randRow]
                stringCol = str(randCol)
                COMcoordinate = cRow + stringCol
            else:
                alreadyEntered = False
        if alreadyEntered == False:
            COMenteredCoorindates.append(COMcoordinate)
            if cRow == "a":
                COMa.pop(randCol)
                COMa.insert(randCol,"[*] ")
            if cRow == "b":
                COMb.pop(randCol)
                COMb.insert(randCol,"[*] ")
            if cRow == "c":
                COMc.pop(randCol)
                COMc.insert(randCol,"[*] ")
            if cRow == "d":
                COMd.pop(randCol)
                COMd.insert(randCol,"[*] ")
            if cRow == "e":
                COMe.pop(randCol)
                COMe.insert(randCol,"[*] ")
            if cRow == "f":
                COMf.pop(randCol)
                COMf.insert(randCol,"[*] ")
            if cRow == "g":
                COMg.pop(randCol)
                COMg.insert(randCol,"[*] ")
            if cRow == "h":
                COMh.pop(randCol)
                COMh.insert(randCol,"[*] ")

    print("All your coordinates and the computers coordinates have been selected. This is your target tracker:\n")
    printTargetTracker(TTnums,TTlines,TTa,TTb,TTc,TTd,TTe,TTf,TTg,TTh)
    print("You can use it to track where you have attacked and if the have hit or missed enemy boats.\n")
    
    gameWon = False
    printCOMGrid(COMnums,COMlines,COMa,COMb,COMc,COMd,COMe,COMf,COMg,COMh)
    
    while gameWon == False:
        #Player attack
        playerScore = 0
        comScore = 0
        attack = input("Enter the coordinates of where you want to attack:\n ")
        #Player hit computer
        if attack in COMenteredCoorindates:
            print("HIT!\n")
            row = attack[0]
            column = attack[1]
            column = int(column)
            if row == "a":
                TTa.pop(column)
                TTa.insert(column,"[H] ")
            if row == "b":
                TTb.pop(column)
                TTb.insert(column,"[H] ")
            if row == "c":
                TTc.pop(column)
                TTc.insert(column,"[H] ")
            if row == "d":
                TTd.pop(column)
                TTd.insert(column,"[H] ")
            if row == "e":
                TTe.pop(column)
                TTe.insert(column,"[H] ")
            if row == "f":
                TTf.pop(column)
                TTf.insert(column,"[H] ")
            if row == "g":
                TTg.pop(column)
                TTg.insert(column,"[H] ")
            if row == "h":
                TTh.pop(column)
                TTh.insert(column,"[H] ")
            printTargetTracker(TTnums,TTlines,TTa,TTb,TTc,TTd,TTe,TTf,TTg,TTh)
            playerScore = playerScore + 1
            if playerScore == 5:
                gameWon = True
        else:
            #Player miss computer
            print("MISS!\n")
            row = attack[0]
            column = attack[1]
            column = int(column)
            if row == "a":
                TTa.pop(column)
                TTa.insert(column,"[M] ")
            if row == "b":
                TTb.pop(column)
                TTb.insert(column,"[M] ")
            if row == "c":
                TTc.pop(column)
                TTc.insert(column,"[M] ")
            if row == "d":
                TTd.pop(column)
                TTd.insert(column,"[M] ")
            if row == "e":
                TTe.pop(column)
                TTe.insert(column,"[M] ")
            if row == "f":
                TTf.pop(column)
                TTf.insert(column,"[M] ")
            if row == "g":
                TTg.pop(column)
                TTg.insert(column,"[M] ")
            if row == "h":
                TTh.pop(column)
                TTh.insert(column,"[M] ")
            printTargetTracker(TTnums,TTlines,TTa,TTb,TTc,TTd,TTe,TTf,TTg,TTh)
        #Computer Attack
        time.sleep(3)
        alreadyEntered = True
        randRow = random.randint(0,7)
        randCol = random.randint(1,8)
        cRow = cRowsList[randRow]
        stringCol = str(randCol)
        COMcoordinate = cRow + stringCol
        while alreadyEntered == True:
            if COMcoordinate in COMattackCoordinates:
                alreadyEntered = True
                randRow = random.randint(0,7)
                randCol = random.randint(1,8)
                cRow = cRowsList[randRow]
                stringCol = str(randCol)
                COMcoordinate = randRow + randCol
            else:
                alreadyEntered = False
        if alreadyEntered == False:
            print("Computer attacks", COMcoordinate)
            COMattackCoordinates.append(COMcoordinate)
            #Computer hit player
            if COMcoordinate in enteredCoordinates:
                print(COMcoordinate,"\n")
                print("HIT!\n")
                row = COMcoordinate[0]
                column = COMcoordinate[1]
                column = int(column)
                if row == "a":
                    a.pop(column)
                    a.insert(column,"[H] ")
                if row == "b":
                    b.pop(column)
                    b.insert(column,"[H] ")
                if row == "c":
                    c.pop(column)
                    c.insert(column,"[H] ")
                if row == "d":
                    d.pop(column)
                    d.insert(column,"[H] ")
                if row == "e":
                    e.pop(column)
                    e.insert(column,"[H] ")
                if row == "f":
                    f.pop(column)
                    f.insert(column,"[H] ")
                if row == "g":
                    g.pop(column)
                    g.insert(column,"[H] ")
                if row == "h":
                    h.pop(column)
                    h.insert(column,"[H] ")
                printGrid(nums,lines,a,b,c,d,e,f,g,h)
            else:
                #Computer miss player
                print(COMcoordinate,"\n")
                print("MISS!\n")
                row = COMcoordinate[0]
                column = COMcoordinate[1]
                column = int(column)
                if row == "a":
                    a.pop(column)
                    a.insert(column,"[M] ")
                if row == "b":
                    b.pop(column)
                    b.insert(column,"[M] ")
                if row == "c":
                    c.pop(column)
                    c.insert(column,"[M] ")
                if row == "d":
                    d.pop(column)
                    d.insert(column,"[M] ")
                if row == "e":
                    e.pop(column)
                    e.insert(column,"[M] ")
                if row == "f":
                    f.pop(column)
                    f.insert(column,"[M] ")
                if row == "g":
                    g.pop(column)
                    g.insert(column,"[M] ")
                if row == "h":
                    h.pop(column)
                    h.insert(column,"[M] ")
                printGrid(nums,lines,a,b,c,d,e,f,g,h)






## Main program from here
if startMenuInput == "1":
    print("\nNew game")
    newGame()
if startMenuInput == "2":
    print("\nContinue game")
if startMenuInput == "3":
    sys.exit(0)
Reply


Messages In This Thread
Message='int' object is not subscriptable - by DanielCook - Aug-10-2021, 10:47 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
Bug TypeError: 'NoneType' object is not subscriptable TheLummen 4 757 Nov-27-2023, 11:34 AM
Last Post: TheLummen
  Help with python 'not subscriptable' error Extra 3 2,107 Dec-16-2022, 05:55 PM
Last Post: woooee
  TypeError: 'NoneType' object is not subscriptable syafiq14 3 5,265 Sep-19-2022, 02:43 PM
Last Post: Larz60+
  'int' object is not subscriptable after API call ed8484 1 1,815 Sep-18-2021, 02:06 PM
Last Post: ed8484
  Bool Object is not Subscriptable quest 1 4,164 May-02-2021, 11:12 AM
Last Post: Yoriz
  Float Object is not Subscriptable quest 2 2,900 Apr-20-2021, 09:28 AM
Last Post: quest
  AttributeError: 'Message' object has no attribute 'split' helpme1 2 5,012 Mar-14-2021, 11:25 AM
Last Post: helpme1
  TypeError: 'NoneType' object is not subscriptable Jmekubo 6 27,333 Sep-08-2020, 10:03 AM
Last Post: DigiTMG
  TypeError: 'type' object is not subscriptable Stef 1 4,531 Aug-28-2020, 03:01 PM
Last Post: Gribouillis
  'NoneType' object is not subscriptable Justchse 4 3,707 Aug-01-2020, 06:18 PM
Last Post: Justchse

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020