如何用Python的标准print函数打印一个彩色的围棋局面?
尽管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")
- 1
- 2
上面的代码显示效果如下图所示。
不过,如果你是在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")
- 1
- 2
- 3
- 4
- 5
好,讲完了预备知识,是时候打印一个彩色的围棋局面了。我们约定围棋局面用一个二维的NumPy数组来表示。黑子、白子、和空,我们分别用Unicode字符集中的0x25cf、0x25cb、和0x253c来表示,边角也使用各自的对应符号。这个符号,我们可以在IDLE中直观地显示。
>>> chr(0x25cf)
'●'
>>> chr(0x25cb)
'○'
>>> chr(0x253c)
'┼'
>>> chr(0x250c)
'┌'
>>> chr(0x2510)
'┐'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
接下来,应用上面这些知识点,就可以写出一个打印围棋局面的函数了。
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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
文章来源: xufive.blog.csdn.net,作者:天元浪子,版权归原作者所有,如需转载,请联系作者。
原文链接:xufive.blog.csdn.net/article/details/112363412
- 点赞
- 收藏
- 关注作者
评论(0)