我的 Python.color() (Python 色彩打印控制)


  • 我的CSDN主页
  • My Python 学习个人备忘录
  • 我的HOT

  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            ——华罗庚

我的 Python.color() (Python 色彩打印控制)


  1. python.color 介绍
  2. color() 用法
  3. 七彩搞怪打印试炼
  4. 我的 color() 情结
  5. color()完整代码

  我的模块 python.color 内含五个函数。error() 是内部调用函数,带 “table” 的是色彩控制打印效果图表。真正有用的就一个 color() ,color7()是搞怪用的。

我的 Python.color() (Python 色彩打印控制)_第1张图片

可以在命令行模式下查看
/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']
>>>
   k 是用于上图打印序号的变量。color_033_table 是直接用033控制码实现的 Python 色彩控制打印效果图表,color_table 是调用我的色彩控制打印函数 color 实现的色彩控制打印效果图表。

直接用 \033 打印的效果表

python_color.color_033_table()

我的 Python.color() (Python 色彩打印控制)_第2张图片

   python 3.6.6 不支持倾斜、下划线和删除线效果。

我的 Python.color() (Python 色彩打印控制)_第3张图片
我的 Python.color() (Python 色彩打印控制)_第4张图片


调用 color() 打印的效果表

python_color.colors_table()

我的 Python.color() (Python 色彩打印控制)_第5张图片

  这个效果是在 Python 3.10.0 下跑码得来。

   平常使用仅需载入 color()、color7() 两个函数即可。

#!/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)) #块止。

我的 Python.color() (Python 色彩打印控制)_第6张图片


color() 、color7()基本用法

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

我的 Python.color() (Python 色彩打印控制)_第7张图片

color7() 第二个参数是0,背景默认灰色,前景色随机。不为0(即缺省),前景色背景色皆为随机。

print(color7('我是 python 色彩控制打印函数。', 0))

我的 Python.color() (Python 色彩打印控制)_第8张图片


回首页


七彩搞怪打印试炼

矩阵打印“我是七彩打印!”
s = '我是七彩打印!''我是七彩打印''我是七彩打印''我是七彩打印!\n'
print(f"\n\n\n{color7(s*(len(s) - 1))}\n\n")

我的 Python.color() (Python 色彩打印控制)_第9张图片

矩阵打印“I love you very much.”
s = 'I love you very much!\n'
print(color7(s*(int(len(s) / 2) - 1)))
print('\n'*2)

我的 Python.color() (Python 色彩打印控制)_第10张图片

矩阵和三角打印“你是我的宝贝儿!”
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)

我的 Python.color() (Python 色彩打印控制)_第11张图片


回首页


我的 color() 情结

  接触过 \033 后,一直想撸一个自己的 python 色彩打印效果控制器,久久不能忘怀。“心痒痒”而心怀向往之……

   从在 CSDN 发布第一篇“学习笔记”,为打出红色的字符,查阅到 \033 并生硬套出了“红字”。上个月,我终于基本吃透了 \033 控制码,并整理记下了学习笔记“神奇的 \033 ,让打印出彩”。这只是基本实现了我想要的目标,我的 color 还不够聪明,除了方便识记(相对于 \033 控制码),并没有 \033 好使。没有 \033 可以任意缺省和排列“前景色”、“背景色”和“打印效果”三个参数的位置之灵活自由的组会。我的 color 是“生硬”而不“和谐”的。
  经过对 \033 的不断试炼,对其“习性”又有了进一步的理解。对我的 python_color 模块代码推敲“精炼”,color() 成功蜕变,她变成了“花蝴蝶”,好看而又有灵性。\033 有的优势,她都可以轻松自如完美演绎。且不用对晦涩的色彩打印控制码进行识记,只要会颜色的8个英文单词和10个对应效果的英文单词字符(),就会“得心应手”的用我的 color() 调配出您想要的 python 色彩控制打印效果。
  更有趣的是,我在优化 color() 的过程中,有了做一个随机前景色背景和打印效果的七彩打印模块 color7() 。如果调用时传入背景控制参数 0 ,则背景色保持“灰色”。

  由于喜爱,所以坚持!


如果您也喜爱,可以索要模块源码。



回首页


可以用 help(color) 查看 color 的文档。
>>> from python_color import color
>>> help(color)

帮助文档文本

我的 Python.color() (Python 色彩打印控制)_第12张图片


回首页

(如果从语句注释不能清楚作用,请评论区留言指教和探讨。)

python_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")


回首页

我的HOT博:

    • “快乐数”判断(1175阅读)
    • 罗马数字转换器(构造元素取模)(1876阅读)
    • 罗马数字(转换器|罗生成器)(2450阅读)
    • Hot:神奇代码让QQ群昵称色变(6856阅读)
    • 斐波那契数列(递归| for )(2386阅读)
    • 排序数组元素的重复起止(1207阅读)
    • 柱状图中最大矩形(1611阅读)
    • 电话拨号键盘字母组合(1236阅读)
    • 密码强度检测器(1682阅读)
    • 求列表平衡点(1719阅读)
    • 字符串统计(2623阅读)
    • Hot:尼姆游戏(聪明版首发)(3262阅读) 尼姆游戏(优化版)(836阅读)
    • 推荐条件 点阅破千

      Python 入门指南【Python 3.6.3】


      好文力荐:

      • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
      • 靠谱程序员的好习惯

      回首页

      老齐漫画头像

      精品文章:

      • 好文力荐:《python 完全自学教程》书稿连载
      • OPP三大特性:封装中的property
      • 通过内置对象理解python'
      • 正则表达式
      • python中“*”的作用
      • Python 完全自学手册
      • 海象运算符
      • Python中的 `!=`与`is not`不同
      • 学习编程的正确方法

      来源:老齐教室


      CSDN实用技巧博文:

      • 8个好用到爆的Python实用技巧
      • python忽略警告

    你可能感兴趣的:(笔记,python)