在战舰风格游戏中猜错时出错
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']]
。
我正在尝试制作一种战舰类型的游戏,其中有一个 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']]
。