使用if else条件和正确的间距在python中打印

时间:2013-05-28 07:00:01

标签: python python-2.7

我无法找到问题的正确答案。 所以这笔交易是这样的: 我需要打印一个2D数组,但每个单元格都是一个大小为2的列表。此列表中的第一个值是隐藏或看到的“H”或“S”。第二个是实际值。 我需要像这样打印每一行:格式:(“%-2s%-2s ...%-2s”),要打印的内容:如果第一个值为'H',则打印'H',否则打印第二个值。< / p>

请帮我完成这项任务,谢谢!

我正在尝试下一个代码:

    print ' ' , ''.join('%-2s ' % i for i in range(self.gameBoard.width)) 
    for i in range(self.gameBoard.height):
        print '%-2s'%i, ''.join('%-2s ' % v[1] for v in self.gameBoard.Matrix[i] if v[0] == 'S')

“i”代表行号。

3 个答案:

答案 0 :(得分:2)

您的解决方案似乎有效,您只需要更改最后一行:

print '%-2s'%i, ''.join('%-2s ' % v[1] for v in self.gameBoard.Matrix[i] if v[0] == 'S')

为:

print '%-2s'%i, ''.join('%-2s ' % ((v[1] if v[0] == 'S' else 'H') for v in self.gameBoard.Matrix[i]))

答案 1 :(得分:2)

最好使用enumerate直接迭代行

print ' ' , ''.join('%-2s ' % i for i in range(self.gameBoard.width)) 
for i, row in enumerate(self.gameBoard.Matrix):
    print '%-2s'%i, ''.join('%-2s '%(v[1] if V[0]==S else 'H') for v in row) 

最好使用format代替%格式

print ' ' , ' '.join(format(i, '2') for i in range(self.gameBoard.width)) 
for i, row in enumerate(self.gameBoard.Matrix):
    print '%-2s'%i, ' '.join(format(v[1] if V[0]==S else 'H', '2') for v in row) 

答案 2 :(得分:1)

你的意思是:

$a = [['H',1], ['H',2],['S',3],['H',4], ['S',5]]
$print [k if k=='H' else v for k,v in a]
['H', 'H', 3, 'H', 5]