在python中的特定行打印有序的dict信息

时间:2014-08-10 07:01:20

标签: python python-2.7 dictionary format

我目前的问题是我想要使用一种格式打印我为dict存储的值,这样可以让我游戏中的玩家轻松阅读。这样很容易解释发生了什么。

我最后一次搜索了,我无法找到解决方案。我发现类似的东西,但没有预先形成我需要的东西。我认为我正在寻找错误的术语,因为我仍然在编程方面听不见。

pprint似乎可以解决问题,但文档很难为我解读。我也尝试使用for循环和while循环来实现我想要的效果,但是我不能正确地迭代我的dict以违反所需的效果。

import collections

def generateBoard():
    board = {(x,y):'W' for y in range(1,11) for x in range(1,11)}
    oboard = collections.OrderedDict(sorted(board.items()))
    return oboard

def printBoard(board):
    for x, y in board.items():
        return y

board1 = generateBoard()
printBoard(board1)

目前它所做的只是打印出' W'一遍又一遍。

'W'
'W'
'W'

我希望这样打印出来。

'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W'
'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W'
'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W' 'W'

同样,我尝试了几种不同的循环方法,但我无法弄清楚如何将数据连接在一起。另外,因为我订购了dict,它会打印出密钥:数据按照我想要的顺序而不是我想要的格式。

def printBoard(board):
    while True:
        z = 0
        while x <11:
            p = 0
            z + 1
            while p < 11:
                if board[x,y] == 'W':
                    print y.join(x)
                p + 1

这是我试过的方法之一,它失败了。它不会让我使用迭代器来获取我有点知道的if语句,但我想不出一种方法可以让它通过x,y元组以一种很好的格式打印出数据。

编辑:

我提出了使用课程和grc的例子的建议。 这段代码存储了我需要的值,我也可以轻松调用打印功能。 我也只接受了我在该位置输入的字符串的第一个字符。这样后来我可以连接损坏的+船名,它仍然会以非常简洁的方式打印板。

class Board(object):
    '''Creates a board object with a print board method.'''

    def __init__(self, sides=11):
        self.sides = sides
        self.storedBoard = {(x,y):'W' for y in range(1,self.sides) for x in range(1,self.sides)}

    def print_board(self):
        printableBoard = collections.OrderedDict(sorted(self.storedBoard.items()))
        for y in range(1, self.sides):
            print ' '.join(str(printableBoard[x, y])[0] for x in range(1, self.sides))

我仍然不知道我将如何完全实施船舶损坏或如何跟踪它,但我认为这是一个相当不错的开始。现在虽然这可以让我放置董事会然后我可以运行我的船舶放置脚本,它改变了&#39; W&#39; W&#39;船舶描述的价值。

2 个答案:

答案 0 :(得分:3)

你在找这样的东西吗?

for y in range(1, 11):
    print ' '.join(board[x, y] for x in range(1, 11))

这是一个仅使用for循环的简单方法:

for y in range(1, 11):
    for x in range(1, 11):
        # print the value followed by a single space
        print board[x, y],

    # print a new line
    print

答案 1 :(得分:1)

我建议使用类这样的东西。我重新实现了您的代码以反映更改:

import collections 
class Board(object):
    def __init__(self, sides=11):
        self.sides = sides
        u_board = {(x,y):'W' for y in range(1,self.sides) for x in
                range(1,self.sides)}
        self.board = collections.OrderedDict(sorted(u_board.items()))

    def print_board(self):
        for y in range(1, self.sides):
            print ' '.join(self.board[x, y] for x in range(1, self.sides))



# Usage

b = Board()
b.print_board()

输出:

$ python board.py
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W
W W W W W W W W W W

编辑修改打印功能以使用@grc的方法