Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Type Error: bad operand type for unary +: 'str'
#1
Hello everyone, I'm making a dynamic Tic Tac Toe game, I need to get in the practice.
I'm getting this type error and I am not sure how to resolve it. It came up when i modified the code to add a bit of color from lines 62 to 70. I'm assuming that's where the issue is

import itertools
from colorama import init, Fore, Back, Style

init()


def win(current_game):
    def all_same(l):
        if l.count(l[0]) == len(l) and l[0] != 0:
            return True
        else:
            return False

    # Horizontal
    for row in game:
        print(row)
        if all_same(row):
            print(f"Player {row[0]} is the winner horizontally!")
            return True

    # Diagonal
    diags = []
    for col, row in enumerate(reversed(range(len(game)))):
        diags.append(game[row][col])
    if all_same(diags):
        print(f"Player {diags[0]} is the winner diagonally (/)")
        return True

    diags = []
    for ix in range(len(game)):
        diags.append(game[ix][ix])
    if all_same(diags):
        print(f"Player {diags[0]} is the winner diagonally (\\)")
        return True

    # Vertical
    for col in range(len(game)):

        check = []

        for row in game:
            check.append(row[col])

        if all_same(check):
            print(f"Player {check[0]} is the winner vertically!")
            return True

    return False


def game_board(game_map, player=0, row=0, column=0, just_display=False):
    try:
        if game_map[row][column] != 0:
            print("Position taken")
            return game_map, False
        print("   " + "  ".join([str(i) for i in range(len(game_map))]))
        if not just_display:
            game_map[row][column] = player

        for count, row in enumerate(game_map):

            colored_row = ""
            for item in row:
                if item == 0:
                    colored_row += "   "
                elif item == 1:
                    colored_row += Fore.GREEN + ' X ' + + Style.RESET_ALL
                elif item == 2:
                    colored_row += Fore.MAGENTA + ' O ' + + Style.RESET_ALL
            print(count, colored_row)

        return game_map, True

    except IndexError as e:
        print("Error: Make sure you input row/column as 0 1 or 2?", e)
        return game_map, False

    except Exception as e:
        print("Big Whoopsie!", e)
        return game_map, False


play = True
players = [1, 2]

while play:
    game_size = int(input("What size game do you want to play? "))
    game = [[0 for i in range(game_size)] for i in range(game_size)]

    game_won = False
    game, _ = game_board(game, just_display=True)
    player_choice = itertools.cycle([1, 2])
    while not game_won:
        current_player = next(player_choice)
        print(f"Current Player: {current_player}")
        played = False

        while not played:
            column_choice = int(input("What column do you want to play? (0, 1, 2) "))
            row_choice = int(input("What row do you want to play? (0, 1, 2) "))
            game, played = game_board(game, current_player, row_choice, column_choice)

        if win(game):
            game_won = True
            again = input("Thegame is over Do you want to play again? (y/n) ")
            if again.lower() == "y":
                print("restarting... ")
            elif again.lower() == "n":
                print("Au revoir!")
                play = False
            else:
                print("Not valid!")
                play = False
Thank you
Quote
#2
(Aug-12-2019, 04:00 AM)Psypher1 Wrote: I'm assuming that's where the issue is
The error message gives you detailed information where and what is wrong.
So when asking for help providing this error message is a vital thing to do.
Without we can only guess that likely here
                elif item == 1:
                    colored_row += Fore.GREEN + ' X ' + + Style.RESET_ALL
                elif item == 2:
                    colored_row += Fore.MAGENTA + ' O ' + + Style.RESET_ALL
you need to convert the constants Fore.<color> and Style.RESET_ALL into strings
OR if these are strings than the error is due to the double + + in these lines.
                elif item == 1:
                    colored_row += str(Fore.GREEN) + ' X ' + str(Style.RESET_ALL)
                elif item == 2:
                    colored_row += str(Fore.MAGENTA) + ' O ' + str(Style.RESET_ALL)
Quote
#3
Okay, I'll remember to include the message next time.

Thank you for the help
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  type of object as a string Skaperen 1 71 Dec-02-2019, 08:01 AM
Last Post: midarq
  Need help with "unsupported operand type(s)" _dave 6 412 Oct-14-2019, 06:43 AM
Last Post: buran
  TypeError: unsupported operand type(s) for -: 'str' and 'str' Balaji 4 395 Oct-11-2019, 10:29 AM
Last Post: buran
  TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'str' findbikash 2 282 Sep-18-2019, 08:32 AM
Last Post: buran
  Object of type Scoreboard is not JSON serializable lsepolis123 9 1,506 Aug-13-2019, 11:22 AM
Last Post: lsepolis123
  catch input type error mcmxl22 5 283 Aug-11-2019, 07:33 AM
Last Post: wavic
  removing quotes from a list and keep type list evilcode1 3 241 Aug-03-2019, 11:07 AM
Last Post: perfringo
  Getting type from input() function in Python 3.0 leodavinci1990 7 385 Jul-29-2019, 08:28 PM
Last Post: avorane
  Object and type class Uchikago 2 209 Jul-28-2019, 10:35 AM
Last Post: DeaD_EyE
  Type error: dump() missing 1 required positional argument: fp jaycuff13 2 1,530 Jul-13-2019, 10:21 AM
Last Post: jaycuff13

Forum Jump:


Users browsing this thread: 1 Guest(s)