我的模块 python.color 内含五个函数。error() 是内部调用函数,带 “table” 的是色彩控制打印效果图表。真正有用的就一个 color() ,color7()是搞怪用的。
/sdcard/qpython $ python
Python 3.10.0 (default, Oct 6 2021, 01:23:37) [Clang 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c8554895 on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from python_color import color
>>> help(color)
>>> import python_color
>>> dir(python_color)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'color', 'color7', 'color_033_table', 'colors_table', 'error', 'k']
>>>
python_color.color_033_table()
python_color.colors_table()
#!/sur/bin/nve python
# coding: utf-8
'''
作者:梦幻精灵_cq
QQ:479469838
'''
from python_color import color, color7
print('\n\n块打印示例:')
print(color(1, 'f_white', 'b_purple')) #块起。
#前景色白色,背景色紫色。
print(' '.center(42))
print(' '.center(42))
print('小 池 '.center(40))
print(' '.center(42))
print(' 宋·杨万里'.center(38))
print(' '.center(42))
print('泉眼无声惜细流,'.center(34))
print(' '.center(42))
print('树荫照水爱晴柔。'.center(34))
print(' '.center(42))
print('小荷才露尖尖角,'.center(34))
print(' '.center(42))
print('早有蜻蜓立上头。'.center(34))
print(' '.center(42))
print(' '.center(42))
print(color(0)) #块止。
bg = 'b_gray'
print(f"\n\n\
{color('我', 'f_black', bg):>6}\
{color('是', 'f_red', bg)}\
{color('Python', 'f_green', bg)}\
{color('色', 'f_yellow', bg)}\
{color('彩', 'f_purple', bg)}\
{color('打', 'f_cyan', bg)}\
{color('印', 'light', 'f_gray', bg)}\
{color('控', 'f_black', bg)}\
{color('制', 'f_red', bg)}\
{color('函', 'f_red', bg)}\
{color('数', 'f_green', bg)}\
{color('。', 'f_yellow', bg)}\
\n\n")
print(color7('我是 python 色彩控制打印函数。', 1))
print(f"\n\n打印示例:\
{color('我今天优化了我的color模块。', 'light', 'b_yellow', 'f_red')}")
print(color7('我是 python 色彩控制打印函数。', 0))
s = '我是七彩打印!''我是七彩打印''我是七彩打印''我是七彩打印!\n'
print(f"\n\n\n{color7(s*(len(s) - 1))}\n\n")
s = 'I love you very much!\n'
print(color7(s*(int(len(s) / 2) - 1)))
print('\n'*2)
s = '你是我的宝贝儿\n'
print(color7(s*(len(s) - 1)))
print('\n'*2)
for i in range(len(s) - 1):
print(color7(s[i:]), end = '')
print('\n'*2)
for i in range(len(s), -1, -1):
print(color7(s[i:]), end = '')
print('\n'*2)
接触过 \033 后,一直想撸一个自己的 python 色彩打印效果控制器,久久不能忘怀。“心痒痒”而心怀向往之……
从在 CSDN 发布第一篇“学习笔记”,为打出红色的字符,查阅到 \033 并生硬套出了“红字”。上个月,我终于基本吃透了 \033 控制码,并整理记下了学习笔记“神奇的 \033 ,让打印出彩”。这只是基本实现了我想要的目标,我的 color 还不够聪明,除了方便识记(相对于 \033 控制码),并没有 \033 好使。没有 \033 可以任意缺省和排列“前景色”、“背景色”和“打印效果”三个参数的位置之灵活自由的组会。我的 color 是“生硬”而不“和谐”的。
经过对 \033 的不断试炼,对其“习性”又有了进一步的理解。对我的 python_color 模块代码推敲“精炼”,color() 成功蜕变,她变成了“花蝴蝶”,好看而又有灵性。\033 有的优势,她都可以轻松自如完美演绎。且不用对晦涩的色彩打印控制码进行识记,只要会颜色的8个英文单词和10个对应效果的英文单词字符(),就会“得心应手”的用我的 color() 调配出您想要的 python 色彩控制打印效果。
更有趣的是,我在优化 color() 的过程中,有了做一个随机前景色背景和打印效果的七彩打印模块 color7() 。如果调用时传入背景控制参数 0 ,则背景色保持“灰色”。
由于喜爱,所以坚持!
>>> from python_color import color
>>> help(color)
#!/usr/bin/nve python # Linux 脚本解释器路径指定注释。
# coding: utf-8 #本脚本编码说明。
'''
作者:梦幻精灵_cq
QQ:479469838(八爪章鱼)
2022-2-26
'''
k = 0
def color_033_table():
'''用 033 控制码打印 \033 控制色彩打印效果图'''
color_s = ' \033[32m\\033色彩控制打印效果图\033[0m '
print(f"\n\n\n{color_s:_^42}")
color_s = ' \033[1;37m效果(前景色青色)\033[0m '
print(f"\n\n{color_s:.^46}\n")
print(f"{'033控制码':>10}{'效果名称':^10}{'显示效果':>7}")
names = ('默认', '高亮', '低亮',
'倾斜', '下划', '加粗', '减淡',
'反白', '消隐', '删除')
for i, name in enumerate(names):
print(f"{i:^18}{name:<12}\033[{i}m示例\033[0m")
print(f"\033[36;{i}m{'例'*21}\033[0m")
color_s = ' \033[37;2mCut-off rule\033[0m '
print(f"\n{color_s:.^53}\n")
color_s = ' \033[37;2m前景色\033[0m '
print(f"\n{color_s:.^50}\n")
print(f"{'033控制码':>10}{'颜色名称':^10}{'显示效果':>7}")
names = ('黑色', '红色', '绿色',
'黄色', '蓝色', '紫色', '青色', '灰色',
'灰色', '无效')
for i, name in enumerate(names):
print(f"{''.join(('3', str(i))):^18}{name:<12}\033[3{i}m示例\033[0m")
print(f"\033[3{i}m{'例'*21}\033[0m")
color_s = ' \033[37;2mCut-off rule\033[0m '
print(f"\n{color_s:.^53}\n")
color_s = ' \033[37;2m背景色\033[0m '
print(f"\n{color_s:.^50}\n")
print(f"{'033控制码':>10}{'颜色名称':^10}{'显示效果':>7}")
names = ('黑色', '红色', '绿色',
'黄色', '蓝色', '紫色', '青色', '白色',
'无效', '无效')
for i, name in enumerate(names):
print(f"{''.join(('4', str(i))):^18}{name:<12}\033[4{i}m示例\033[0m")
print(f"\033[4{i}m{' '*42}\033[0m")
color_s = ' \033[37;2mCut-off rule\033[0m '
print(f"\n{color_s:.^53}\n")
color_s = ' \033[2mThe end\033[0m '
print(f"\n\n{color_s:.^50}\n")
if __name__ == '__main__':
print('\n'*2)
k += 1
color_s = '\033[32mcolor_033-table()\033[0m'
print(f"\n{k:2}. 我是用033控制码打印效果图表的 "\
f"{color_s} 函数 。")
#color_033_table() #直接 run本脚本,调用函数打印 python 色彩打印控制效果图图。
def error(s):
'''报错信息打印'''
color_tip = f'\033[1;31m{s}\033[0m'
input(f"\n\n{' 报错信息 ':.^38}\
\n\n\n{color_tip:^44}\
\n\n{' The end ':.^42}")
if __name__ == '__main__':
k += 1
color_s = '\033[32merror()\033[0m'
print(f"\n{k:2}. 我是用错误提示打印函数 "\
f"{color_s} 。")
def color(s = '需彩色打印的对象', *color_set):
'''
|
|
| 本函数生成“\\033[效果;前景色;背景色m
| 要彩色显的字符串\\033[0m”字符串,中间不
| 可以有空格,分号是半角分号且“必不可少”。
| 实现 python 代码彩色打印字符串。
|
|
| 参数变量:
|
| s 需彩色打印对象(任意类型)
|
| f_color 前景色
| 格式为 f_ + 黑红绿蓝紫青灰白的英文单词。
| 如绿色 f_green 。
|
| b_color 背景色
| 格式同前景色,只是背景色没有白色。
| 如紫色 b_purple 。
|
| effect 显示效果
| 直接用英文单词,如默认 default,高亮 light,
| 低亮 lowbright ,删除线 overstriking 。
|
| 注:由于块打印标识符占用整数0、1,
| 打印仅打印'0' or '1',只能用字符串格式。
| '0'、'1'或"0"、"1",
| 亦或者用三引号括住0、1。
|
|
| 块打印:
|
| s = 1 设置块效果起
| s = 0 设置块效果止
|
|
| 颜色(前/背景色):
|
| 本函数标识符 颜色 \\033代码
| black 黑色 0
| red 红色 1
| green 绿色 2
| yellow 黄色 3
| blue 蓝色 4
| purple 紫色 5
| cyan 青色 6
| gray 灰色 7
| white 白色 8(背景色没有白色)
|
|
| 效果包括:
|
| 本函数标识符 效果 \\033代码
| default 默认 0
| light 高亮(增加显示亮度) 1
| lowbright 低亮(降低显示亮度) 2
| italic 倾斜(斜体) 3(在低版本 python
| 中是反白一样的效果,至少 3.6.6 是。)
| unline 下划线 4
| flicker 闪烁 5
| overstriking 减淡 6
| inverse 反白 7
| blanking 消隐(作用于前景色) 8
| strickout 删除线 9
|
|
| 可缺省参数优先级:(优化后的 color() ,参数
| 没有优先级,没有次序,可以全缺省。我用 * 收集
| color_set 参数,如有重复,以后面的设置生效。
| 后来觉得浪费资源,优化为 color_set 参数多于
| 三个报错,返回传入字符串,相当于彩色控制没有
| 生效。
| 如参数重复,后者生效。如color(s, 'f_green',
| 'f_purple'),前景色是紫色。color(s, 'light',
| 'lowbright'),效果是低亮。color(s, 'b_gray',
| 'b_cyan') ,背景色是青色。
|
|
| ***
| fg_color > bg_color > effect
|
| 就是说,如果缺省一个参数,只能是效果
| (effect);缺省两个参数,一定是效果(eff-
| ect)和背景色(bg_color);三个都缺省,就
| 是本函数默认值。默认值是前景色灰色(gray/
| white)、背景色(black)、效果(default),
| 和没使用本函数一样,虽然字符串中有
| 彩色打印代码。虽然可以缺省三个参数,但
| 至少要用一个,那就是前景色,才可以彩色
| 打印。
| 要色显的字符串 s ,不可以缺省,一定
| 要有这个参数。不然会报缺少参数的错。
| ***
|
| (三个星号中的文字,是代码优化前的能力,
| 在此保留,以警醒自己——“如果有时间和能力,
| 一定要对自己的代码优化。”)
|
|
|
| 本模块对 color() 控制参数 color_set ,
| 设置了排错,让她更可亲。这个能力是用成员
| 检测符 in 实现的。如控制参数中有 f_greee
| (绿色单词拼错),color() 会打印出 f_greee
| 字符串报错,并“人性化”地列出可以有的前景色
| 参数列表。
|
|
'''
colors = {
'black': 0,
'red': 1,
'green': 2,
'yellow': 3,
'blue': 4,
'purple': 5,
'cyan': 6,
'gray': 7,
'white': 8,
'f': 3,
'b': 4,
'default': 0,
'light': 1,
'lowbright': 2,
'italic': 3,
'unline': 4,
'flicker': 5,
'overstriking': 6 ,
'inverse': 7,
'blanking': 8,
'strickout': 9
} # color 设置字典。
if s == 0: return f'\033[0m'
if len(color_set) > 3:
error('色彩打印控制参数太多!')
return s
colors_table = (
'black', 'red', 'green',
'yellow', 'blue', 'purple',
'cyan', 'gray', 'white')
f_colors = [f'f_{i}' for i in colors_table]
b_colors = [f'b_{i}' for i in colors_table[:8]]
effect_table = (
'default', 'light', 'lowbright',
'italic', 'unline', 'flicker',
'overstriking', 'inverse',
'blanking', 'strickout')
for i in color_set:
if '_' in i:
if i[0] not in ('f', 'b'):
error(f'色彩打印控制颜色参数 {i} 错误!')
return s
if i[0] == 'f' and i not in f_colors:
error(f'前景色参数 {i} 错误!')
print(f"\n\n {color('color()', 'f_green')} 前景色参数列表:\n\n{','.join(f_colors)}")
return s
elif i[0] == 'b' and i not in b_colors:
error(f'背景色参数 {i} 错误!')
print(f"\n\n {color('color()', 'f_green')} 背景色参数列表:\n\n{','.join(b_colors)}")
return s
else:
if i not in effect_table:
error(f'效果参数 {i} 错误!')
print(f"\n\n {color('color()', 'f_green')} 色彩控制打印效果参数列表:\n\n{','.join(effect_table)}")
return s
tmp = []
for i in color_set:
if '_' in i:
tmp.append(f'{colors.get(i[0])}{colors.get(i[2:])}')
else:
tmp.append(f'{colors.get(i)}')
color_s = ';'.join(tmp)
if s == 1: return f'\033[{color_s}m'
return f'\033[{color_s}m{s}\033[0m'
if __name__ == '__main__':
k += 1
print(f"\n\n{k:2}. 我是 {color('Python', 'f_green')} \
色彩打印控制函数 {color('color()', 'f_purple')} 。")
def colors_table():
'''调用 color() 打印效果图'''
color_s = color(' Python 打印色彩控制效果图 ', 'f_red', 'b_yellow', 'light')
s_033 = "\\033编码"
print(f'\n\n\n{color_s:_^58}\n\n\n\
{color("效果" , "f_yellow", "light"):^60}\n\
\n{color(" Cut-off rule ", "f_gray", "lowbright"):.^64}\n\
\n\n{color(s_033, "f_green") :>25}{"":>3}{color("颜色", "f_green")}{"":>4}{color(" color() 关键字", "f_green")}\n\
\n{"0" :>14}{"":>7}{color("默认", "f_red")}{"":>5}{color("default(默认)", "f_green")}\n\
{"1" :>14}{"":>7}{color("高亮", "f_red", "light")}{"":>5}{color("light(高亮)", "f_green")}\n\
{"2" :>14}{"":>7}{color("低亮", "f_red", "lowbright")}{"":>5}{color("lobright(低亮)", "f_green")}\n\
{"3" :>14}{"":>7}{color("倾斜", "f_red", "lowbright")}{"":>5}{color("lobright(低亮)", "f_green")}\n\
{"4" :>14}{"":>6}{color("下划线", "f_red", "unline")}{"":>4}{color("unline(下划线)", "f_green")}\n\
{"5" :>14}{"":>7}{color("闪烁", "f_red", "flicker")}{"":>5}{color("flicker(闪烁)", "f_green")}\n\
{"6" :>14}{"":>7}{color("减淡", "f_red", "lowbright")}{"":>5}{color("lobright(低亮)", "f_green")}\n\
{"7" :>14}{"":>7}{color("反白", "f_red", "inverse")}{"":>5}{color("inverse(反白)", "f_green")}\n\
{"8" :>14}{"":>7}{color("消隐", "f_red", "blanking")}{"":>5}{color("blanking(消隐)", "f_green")}\n\
{"9" :>14}{"":>6}{color("删除线", "f_red", "overstriking")}{"":>4}{color("overstriling(下划线)", "f_green")}\n\
\n{color(" Cut-off rule ", "f_gray", "lowbright"):.^64}\n\
\
\n\n{color("前景色" , "f_yellow", "light"):^59}\n\
\n{color(" Cut-off rule ", "f_gray", "lowbright"):.^64}\n\
\n\n{color(s_033, "f_green") :>27}{"":>3}{color("颜色", "f_green")}{"":>4}{color(" color() 关键字", "f_green")}\n\
\n{"30" :>17}{"":>6}{color("黑色", "f_black")}{"":>6}{color("black(黑色)", "f_green")}\n\
{"31" :>17}{"":>6}{color("红色", "f_red")}{"":>6}{color("red(红色)", "f_green")}\n\
{"32" :>17}{"":>6}{color("绿色", "f_green")}{"":>6}{color("green(绿色)", "f_green")}\n\
{"33" :>17}{"":>6}{color("黄色", "f_yellow")}{"":>6}{color("yellow(黄色)", "f_green")}\n\
{"34" :>17}{"":>6}{color("蓝色", "f_blue")}{"":>6}{color("blue(蓝色)", "f_green")}\n\
{"35" :>17}{"":>6}{color("紫色", "f_purple")}{"":>6}{color("purple(紫色)", "f_green")}\n\
{"36" :>17}{"":>6}{color("青色", "f_cyan")}{"":>6}{color("cyan(青色)", "f_green")}\n\
{"37" :>17}{"":>6}{color("灰色", "f_gray")}{"":>6}{color("gary(灰色)", "f_green")}\n\
{"38" :>17}{"":>6}{color("白色", "f_white")}{"":>6}{color("white(白色)", "f_green")}\n\
\n{color(" Cut-off rule ", "f_gray", "lowbright"):.^64}\n\
\
\n\n{color("背景色", "f_yellow", "light"):^59}\n\
\n{color(" Cut-off rule ", "f_gray", "lowbright"):.^64}\n\
\n\n{color(s_033, "f_green") :>27}{"":>3}{color("颜色", "f_green")}{"":>4}{color(" color() 关键字", "f_green")}\n\
\n{"40" :>17}{"":>6}{color("黑色", "b_black")}{"":>6}{color("black(黑色)", "f_green")}\n\
{"41" :>17}{"":>6}{color("红色", "b_red")}{"":>6}{color("red(红色)", "f_green")}\n\
{"42" :>17}{"":>6}{color("绿色", "b_green")}{"":>6}{color("green(绿色)", "f_green")}\n\
{"43" :>17}{"":>6}{color("黄色", "b_yellow")}{"":>6}{color("yellow(黄色)", "f_green")}\n\
{"44" :>17}{"":>6}{color("蓝色", "b_blue")}{"":>6}{color("blue(蓝色)", "f_green")}\n\
{"45" :>17}{"":>6}{color("紫色", "b_purple")}{"":>6}{color("purple(紫色)", "f_green")}\n\
{"46" :>17}{"":>6}{color("青色", "b_cyan")}{"":>6}{color("cyan(青色)", "f_green")}\n\
{"47" :>17}{"":>6}{color("灰色", "b_gray")}{"":>6}{color("gary(灰色)", "f_green")}\n\
\n{color(" Cut-off rule ", "f_gray", "lowbright"):.^64}\n\
\
\n\n\n{color(" The end ", "f_gray", "lowbright"):_^64}\n')
if __name__ == '__main__':
k += 1
color_s = '\033[32mcolor_033-table()\033[0m'
print(f"\n{k:2}. 我是调用 color() 打印效果图表的 "\
f"{color_s} 函数 。")
#colors_table()
def color7(s, flag = 1):
'''随机七彩搞怪打印'''
from random import choice
colors_table = (
'black', 'red', 'green',
'yellow', 'blue', 'purple',
'cyan', 'gray', 'white')
effects_table = (
'default', 'light', 'lowbright',
'italic', 'unline', 'flicker',
'overstriking', 'inverse',
'blanking', 'strickout')
bg = 'b_gray'
tmp = []
for i in s:
if i in ('\n', '\r'):
tmp.append(i)
continue
fg = f'f_{choice(colors_table)}'
if flag:
bg = f'b_{choice(colors_table[:8])}'
effect = choice(effects_table)
tmp.append(f"{color(i, bg, fg, effect)}")
return ''.join(tmp)
if __name__ == '__main__':
k += 1
s = f"{k:2}. 我是七彩搞怪打印函数 {color('color7()', 'f_green')})。\n"
print(f"\n\n{color7(s)}\n\n")
来源:老齐教室