在战舰风格游戏中猜错时出错

Getting error when guessing wrong on battleship style game

我正在尝试制作一种战舰类型的游戏,其中有一个 3 x 3 的棋盘,棋盘上有一个随机点,您正在尝试猜测。您应该有 2 次尝试猜测该点,猜错时留下 x 代替棋盘上的 o。

这一行的错误:

board[int(guess_row)][int(guess_column)] = "x"

它说 TypeError: 'str' object does not support item assignment

     board = []
            for row in range(3):
                board.append("o" * 3)
            def print_board(board):
                for row in board:
                    print(" ".join(row))
            print_board(board)
            stone_row = randint(1, 3)
            stone_column = randint(1, 3)
            print(stone_row)
            print(stone_column)
            for turn in range(2):
                response_row = 0
                while response_row == 0:
                    guess_row = input("""
Cup Man: So, what row do you guess?
""")
                    valid_cup = ["1", "2", "3"]
                    if guess_row in valid_cup:
                        response_row = 1
                response_column = 0
                while response_column == 0:
                    guess_column = input("""
Cup Man: And what column?
""")
                    if guess_column in valid_cup:
                        response_column = 1
                if int(guess_row) == stone_row and int(guess_column) == stone_column:
                    print("""
The man lifts up the cup that you guessed.""")
                    input("")
                    print("""
The stone is there!""")
                    input("")
                    print("""
Cup Man: Guess you win. Here's 60 gold.""")
                    gold += 60
                    break
                else:
                    if (int(guess_row) < 1 or int(guess_row) > 3) or (int(guess_column) < 1 or int(guess_column) > 3):
                        print("""
Cup Man: That's not right...""")
                    elif board[int(guess_row)][int(guess_column)] == "x":
                        print("""
Cup Man: You just guessed that one genius...""")
                    else:
                        print("""
The man lifts up the cup that you guessed.""")
                        input("")
                        print("""
There's nothing there.""")
                        input("")
                        print("""
Cup Man: Too bad. Wrong choice.""")
                        board[int(guess_row)][int(guess_column)] = "x"
                        turn += 1
                        print_board(board)
                    if turn == 2:
                        print("""
Cup Man: That's it. You lose.""")

您无法列出该索引,因为它不存在。如果要为每个索引引用特定的 'o',则需要将每个字符串的每个 'o' 转换为它自己的 o 列表。

board = []
for row in range(3):
    board.append(["o"] * 3) <-- Put brackets

print(board)

def print_board(board):
    for row in board:
        print(" ".join(row))
print_board(board)

问题是您的代码试图替换字符串中的单个字符,但无法编辑 python 中的字符串。

如果您 运行 此代码,形成示例的开头,以及添加的 print() 语句:

board = []
for row in range(3):
    board.append("o" * 3)
print(board)

输出是['ooo', 'ooo', 'ooo'],这是一个字符串列表。这就是您的电路板在您的程序中的实际表示方式,尽管您的 print_board() 函数显示不同。

所以当board[int(guess_row)][int(guess_column)] = "x"行是运行时,board[int(guess_row)]首先只抓取一串ooo,然后[int(guess_column)]抓取一个单独的[=19] =] 这就是导致错误的原因,因为您不能将 分配给 一个字符串。

您需要更改板的表示形式,使其成为列表的列表(或者元组也可以)。

board = []
for row in range(3):
    board.append(["o"] * 3)
print(board)

这将打印:[['o', 'o', 'o'], ['o', 'o', 'o'], ['o', 'o', 'o']]