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
  ctypes and custom data type (structures, pointer to structures) python_user_n 0 82 Jul-08-2020, 05:52 PM
Last Post: python_user_n
  SQLAlchemy with type hints gontajones 1 184 Jun-17-2020, 06:52 PM
Last Post: gontajones
  check pandas variable type cools0607 3 154 Jun-12-2020, 09:28 AM
Last Post: buran
  TypeError: unhashable type: 'set' Stager 1 184 Jun-08-2020, 04:11 PM
Last Post: bowlofred
  TypeError: __repr__ returned non-string (type dict) shockwave 0 210 May-17-2020, 05:56 PM
Last Post: shockwave
  Type hinting style and PEP8 hlovatt 2 279 May-07-2020, 08:12 PM
Last Post: hlovatt
  Type conversion issue while using Descriptor in Python3 mailnsuresh 1 163 May-07-2020, 12:26 PM
Last Post: deanhystad
  Type error: '>' not supported between instances of 'NoneType' and 'int' spalisetty06 1 415 Apr-29-2020, 06:41 AM
Last Post: buran
  calculate_bai -- TypeError: unsupported operand type(s) for *: 'float' and 'NoneType' pantherd 1 302 Apr-21-2020, 12:31 PM
Last Post: anbu23
  How to iterate dict_values data type nisusavi 2 250 Apr-17-2020, 08:06 PM
Last Post: nisusavi

Forum Jump:


Users browsing this thread: 1 Guest(s)