我想知道是否有人可以帮我弄清楚为什么我的几行代码不能在Python中工作。我正在尝试创建我自己的Battleship游戏版本,但我似乎无法使.join()函数起作用。
这是我的代码:
board = []
for x in range(5):
board.append(["O"*5])
def print_board (board_in):
for row in board_in:
print(" ".join(row))
print_board(board)
但是,我的输出结果是:
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
当我觉得它应该是:
O O O O O
O O O O O
O O O O O
O O O O O
O O O O O
任何帮助表示赞赏!谢谢!
答案 0 :(得分:10)
你的问题在这里:
O(n)
执行board.append(["O" *5 ])
并不会创建字符串列表。它只是创建一个字符串:
"O" * 5
因此,您在使用>>> "O"*5
'OOOOO'
>>>
时基本上做的是:
str.join
这当然失败了,因为传递到>>> ' '.join(['OOOOO'])
'OOOOO'
>>>
的列表有单个元素,而str.join
通过将列表与多个元素。 From the documentation for str.join
:
str.join(迭代)
返回一个字符串,该字符串是iterable中字符串的串联。如果iterable中存在任何非字符串值,则会引发TypeError,包括bytes对象。元素之间的分隔符是提供此方法的字符串。
您需要做的是在str.join
中创建五行board
的每一行:
'O'
答案 1 :(得分:4)
除了创建'O'
的辅助列表,您可以将它们保留为长度为五个字符串'OOOOO'
,并相信' '.join('OOOOO')
将起作用,因为'OOOOO'
也是可迭代的。
board = ['O' * 5 for _ in range(5)]
def print_board (board_in):
for row in board_in:
print(" ".join(row))
print_board(board)
O O O O O
O O O O O
O O O O O
O O O O O
O O O O O
顺便说一句,我的偏好是编写print_board
函数,如下所示:
def print_board(board_in):
print('\n'.join(map(' '.join, board_in)))
答案 2 :(得分:1)
["0" * 5]
会产生["00000"]
。你想要的可能是["0"] * 5
,它列出了五个元素。
for x in range(5):
board.append(["O"] * 5)
答案 3 :(得分:0)
您可以将行拆分为:
>>> row = 'OOOOO'
>>> row_items =[x for x in row]
>>> ' '.join(row_items)
'O O O O O'