2013-05-28 32 views
1

我找不到適合我的問題的正確答案。 所以這筆交易是這樣的: 我需要打印一個2D數組,但每個單元格都是大小爲2的列表。此列表中的第一個值是隱藏或看到的「H」或「S」。第二個是實際價值。 我需要像這樣打印每一行:format:(「%-2s%-2s ...%-2s」),打印內容:如果第一個值爲'H',打印'H'則打印第二個值。用python打印if if else條件和正確的間距

請幫我完成這個任務,謝謝!

我嘗試下一個代碼:

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') 

「我」 是行號。

+0

請添加代碼示例。 – Maresh

+1

完成我添加了代碼,我嘗試。 –

+0

此代碼有效,但首先打印的是單元格'S',但不打印'H'。 –

回答

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])) 
+0

令人驚歎的,謝謝。這是我所期待的。 –

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] 
+0

幾乎我需要,但'冰雪'更好地回答謝謝。 –

2

最好使用枚舉直接遍歷行

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)