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
  SQLAlchemy with type hints gontajones 1 156 Jun-17-2020, 06:52 PM
Last Post: gontajones
  check pandas variable type cools0607 3 135 Jun-12-2020, 09:28 AM
Last Post: buran
  TypeError: unhashable type: 'set' Stager 1 169 Jun-08-2020, 04:11 PM
Last Post: bowlofred
  What is the meaning of mutable data type? qliu 4 246 May-18-2020, 10:33 AM
Last Post: theknowshares
  TypeError: __repr__ returned non-string (type dict) shockwave 0 199 May-17-2020, 05:56 PM
Last Post: shockwave
  Type hinting style and PEP8 hlovatt 2 265 May-07-2020, 08:12 PM
Last Post: hlovatt
  Type conversion issue while using Descriptor in Python3 mailnsuresh 1 149 May-07-2020, 12:26 PM
Last Post: deanhystad
  Type error: '>' not supported between instances of 'NoneType' and 'int' spalisetty06 1 373 Apr-29-2020, 06:41 AM
Last Post: buran
  calculate_bai -- TypeError: unsupported operand type(s) for *: 'float' and 'NoneType' pantherd 1 271 Apr-21-2020, 12:31 PM
Last Post: anbu23
  How to iterate dict_values data type nisusavi 2 220 Apr-17-2020, 08:06 PM
Last Post: nisusavi

Forum Jump:


Users browsing this thread: 1 Guest(s)