盡管print函式是初學者最先接觸到的第一個Python標準函式,但很多人并沒有真正了解它,我曾經在《用 print() 函式實作的三個特效》一文中展示了print函式的一些實用技巧,受到讀者熱捧,今天,我再給大家介紹print函式的另一個技巧:列印彩色文字和圖案,并在最后定義一個列印圍棋局面的函式,可以列印出下圖這樣的效果,

畢竟是在文本模式下,print函式支持的彩色比較少,只有8種,如下表所示,
| 前景代碼 | 背景代碼 | 顏色 |
|---|---|---|
| 30 | 40 | 黑 |
| 31 | 41 | 紅 |
| 32 | 42 | 綠 |
| 33 | 43 | 黃 |
| 34 | 44 | 藍 |
| 35 | 45 | 紫 |
| 36 | 46 | 青 |
| 37 | 47 | 白 |
print支持以下幾種顯示模式:
- 0 - 默認
- 1 - 高亮
- 4 - 下劃線
- 5 - 閃爍
- 7 - 反白
- 8 - 隱藏
- 22 - 去高亮
- 24 - 去下劃線
- 25 - 去閃爍
- 27 - 去反白
- 28 - 去隱藏
使用print函式列印彩色文字或圖案時,每一行以前綴“\033[”開始,其后緊跟顯示模式、前景色和背景色,三者中間以分號分割,后接小寫字母“m”,在顯示內容之后,一般以后綴“\033[0m”結束,
print("\033[0;31;47m" + "默認模式,白底紅字" + "\033[0m")
print("\033[5;34;43m" + "閃爍模式,黃底藍字" + "\033[0m")
上面的代碼顯示效果如下圖所示,

不過,如果你是在Windows環境中運行的話,估計不會出現這個期望的結果,我猜測這應該是Python的一個非常古怪且難以解決的bug,從Py2時代就一直如此,解決方案也很奇葩,使用os模塊的system函式運行一次空命令就OK了,代碼如下:
import os
os.system('')
print("\033[0;31;47m" + "默認模式,白底紅字" + "\033[0m")
print("\033[5;34;43m" + "閃爍模式,黃底藍字" + "\033[0m")
好,講完了預備知識,是時候列印一個彩色的圍棋局面了,我們約定圍棋局面用一個二維的NumPy陣列來表示,黑子、白子、和空,我們分別用Unicode字符集中的0x25cf、0x25cb、和0x253c來表示,邊角也使用各自的對應符號,這個符號,我們可以在IDLE中直觀地顯示,
>>> chr(0x25cf)
'●'
>>> chr(0x25cb)
'○'
>>> chr(0x253c)
'┼'
>>> chr(0x250c)
'┌'
>>> chr(0x2510)
'┐'
接下來,應用上面這些知識點,就可以寫出一個列印圍棋局面的函式了,
import numpy as np
import os
os.system('')
def show_phase(phase):
"""顯示局面"""
for i in range(19):
for j in range(19):
if phase[i,j] == 1:
chessman = chr(0x25cf)
elif phase[i,j] == 2:
chessman = chr(0x25cb)
elif phase[i,j] == 9:
chessman = chr(0x2606)
else:
if i == 0:
if j == 0:
chessman = '%s '%chr(0x250c)
elif j == 18:
chessman = '%s '%chr(0x2510)
else:
chessman = '%s '%chr(0x252c)
elif i == 18:
if j == 0:
chessman = '%s '%chr(0x2514)
elif j == 18:
chessman = '%s '%chr(0x2518)
else:
chessman = '%s '%chr(0x2534)
elif j == 0:
chessman = '%s '%chr(0x251c)
elif j == 18:
chessman = '%s '%chr(0x2524)
else:
chessman = '%s '%chr(0x253c)
print('\033[0;30;43m' + chessman + '\033[0m', end='')
print()
if __name__ == '__main__':
phase = np.array([
[0,0,2,1,1,0,1,1,1,2,0,2,0,2,1,0,1,0,0],
[0,0,2,1,0,1,1,1,2,0,2,0,2,2,1,1,1,0,0],
[0,0,2,1,1,0,0,1,2,2,0,2,0,2,1,0,1,0,0],
[0,2,1,0,1,1,0,1,2,0,2,2,2,0,2,1,0,1,0],
[0,2,1,1,0,1,1,2,2,2,2,0,0,2,2,1,0,1,0],
[0,0,2,1,1,1,1,2,0,2,0,2,0,0,2,1,0,0,0],
[0,0,2,2,2,2,1,2,2,0,0,0,0,0,2,1,0,0,0],
[2,2,2,0,0,0,2,1,1,2,0,2,0,0,2,1,0,0,0],
[1,1,2,0,0,0,2,2,1,2,0,0,0,0,2,1,0,0,0],
[1,0,1,2,0,2,1,1,1,1,2,2,2,0,2,1,1,1,1],
[0,1,1,2,0,2,1,0,0,0,1,2,0,2,2,1,0,0,1],
[1,1,2,2,2,2,2,1,0,0,1,2,2,0,2,1,0,0,0],
[2,2,0,2,2,0,2,1,0,0,1,2,0,2,2,2,1,0,0],
[0,2,0,0,0,0,2,1,0,1,1,2,2,0,2,1,0,0,0],
[0,2,0,0,0,2,1,0,0,1,0,1,1,2,2,1,0,0,0],
[0,0,2,0,2,2,1,1,1,1,0,1,0,1,1,0,0,0,0],
[0,2,2,0,2,1,0,0,0,0,1,0,0,0,0,1,1,0,0],
[0,0,2,0,2,1,0,1,1,0,0,1,0,1,0,1,0,0,0],
[0,0,0,2,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]
], dtype=np.ubyte)
show_phase(phase)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247602.html
標籤:AI
