.join()函数在Python中不起作用

时间:2018-02-16 23:02:08

标签: python python-3.x

我想知道是否有人可以帮我弄清楚为什么我的几行代码不能在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

任何帮助表示赞赏!谢谢!

4 个答案:

答案 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'