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

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

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


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

  我的模块 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']
>>>
   k 是用于上图打印序号的变量。color_033_table 是直接用033控制码实现的 Python 色彩控制打印效果图表,color_table 是调用我的色彩控制打印函数 color 实现的色彩控制打印效果图表。

直接用 \033 打印的效果表

python_color.color_033_table()

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



调用 color() 打印的效果表

python_color.colors_table()

  这个效果是在 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)) #块止。


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

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

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


回首页


七彩搞怪打印试炼🤪

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

矩阵打印“I love you very much.”
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)


回首页


我的 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 完整代码

#!/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.color() (Python 色彩打印控制)