Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
天儿太热,写好的“学习笔记”都拖到现在才完成校对。😁
偷懒到底,就用我写的Color文档做我这篇笔记的“文案”。
老早就有想法,用class来重构我的color。老早以前是摸不清class,前不久初通class但却没有好“想法”(我不想沿用原来的“构造”——color工具函数版本,主要是让我自认“不满”,没有原因的不满,可能潜意识觉得还可以更好“构造”)。昨天“突发”“灵感”,一气呵成的写了下来,虽然一行代码
return f"\033[{’;’.join(map(str, num))}m{string}\033[0m"
解决的事儿,硬是让我整到了近200,不过最终结果还算让我“满意”,调用比“前版”方便简洁,代码少了冗长。挑挑拣拣、增添删除,终于在此时(2022-07-04 08:00am)完结对代码的“打理”。
来几个样例,先。
效果样例上打印的字符即为该样例的“控制码组合”。
本次重新“构造”,思路“返璞归真”。不用像上个版本,用英文单词来“链接”色彩控制码,当初的想法是“记单词总比记控制码有具象,且不那么辛苦”。但对于英文太烂的我自己,总记不住紫色的单词我那些“特殊效果”“生涩”(对我来说是生涩的),尤其难记。记忆都难,还怎么用。虽然在代码中设置了写错控制码链接单词,会有正确提示,但终究感觉“心累”。缘于此,才有了这次“返璞归真”的重炼。
这次的主旨是用刚会的class来封装代码(上次是函数),在行码过程中,修正和补充了一些想法,最后做成了我“喜欢的样子”(我现在喜欢的样子)。“返璞归真”,就得来真,所以这次直接以色彩控制码“3x”(前景色控制码)、“4x”~(背景色控制码)(x=1…7,8和9在python 3.10.2 中与默认0效果相同)和特殊效果控制码1…9(0和6,在python 3.10.2 中效果完全一致)直接用作色彩控制设定方法的参数,可以是一到三个,次序随意(感觉是在直接使用\033[m控制码组合,有特殊效果控制码“0”之前的控制码无效,因其是关闭所有控制设置的操作。)~,方法代码用*收集成元组供set_color方法引用。
emsp; 基于 “一切输入都不可以完全保证正确”,所以加入了isnum方法判定色彩控制码组合参数的正确。如错误,打印错误提示后退出“代码运行”。
这个色彩控制码,全是数字,长相接近,怎么分得清?🧐稍安勿躁,我给准备了show方法,她会给您呈现所有的色彩控制码和效果对应图例,方便您识记。不记也没关系,我还有look方法,让您预览机器随机生成的色彩控制码配搭组合。每个效果预览样例上的字符串,即是该样例效果的控制码组合(只设置单个或两个控制码组合,相对简单,不位列其中。即单独设置前、背景色或者特殊效果亦或其中两个配对组合。单个设置和一些两个配对的组合,已在show方法列印的样例中。),您直接选定中意的效果“照搬”控制码组合就好。可能选不出中意的效果?不用担心!look可以接收随机样例数量设定,其默认我是设定100例(应该基本够用)。您可以在调用look方法时传入想要浏览的随机组合样例数,look绝对执行您的指令。
您不用操心看不到本篇readme。只须执行read方法就行。
下面是各方法自述:
将字符串嵌入控制码“\033[34;43;6m’string’\033[0m”控制字符串print()颜色输出。
一、def set_color(self, string, *num):
字符串设置打印颜色效果:
返回嵌入“色彩控制码”的字符串。
def set_color(self, string, *nums):
if self.__isnum(nums): # 调用方法判定错误控制码参数,参数无误,返回嵌入控制码组合的字符串。
return f"\033[{';'.join(map(str, nums))};m{string}\033[0m"
else:
return string # 控制码组合有错,返回原字符串。
class 实例调用代码
if __name__ == '__main__':
my = Color() # 实例类。
color = my.set_color # 别名,简洁代码调用。
print(f"\n{color(' Hello, How are you? ', 45).center(59, '~')}")
效果
用《Python完全自学教程》里教的“法门”试炼我的Color工具。“在当前位置进入终端”——
依《Python 完全自学教程》的方式import
由dir() 可见,我的Color 工具已成功加载。
实例类和方法别名。
二、def show(self):
‘’’ 列印颜色控制码与效果对应表 ‘’’,单个设置和一些两个配对的组合。
>>> my.show() # 通过实例调用show方法打印控制码 -> 效果对应表。
图表可见,控制码分前景色、背景色和特殊效果三类,特殊效果又分对整体(前景、背景色)效果控制、对前景色控制和对背景色饱和度控制三类。
前景色控制码:30、31、32、33、34、35、36、37
背景色控制码:40、41、42、43、44、45、46、47
特殊效果控制码:0、1、2、3、4、5、7、8、9
前景色饱和度控制:90、91、92、93、94、95、96、97
背景色饱和度控制码:100、101、102、103、104、105、106、107
以上罗列的,是在python 3.10.2上有控制效果的控制码(其她语言可能有所不同,python3.8.5都稍有差异。这\033控制码,不仅仅对python,对其她语言也是可以的控制色彩打印输出的。),对无效控制码,我启用了__isnum()方法拦截报错,为不至于中断程序运行,报错提示后返回“原字符串”。
关闭效果特殊效果控制码“0”,的位置和效果。
无“0”组合,“序”与效果无关。
此为用random方法shuffle随机序。
比较上表可见,9x、10x对前景、背景进行色饱和度控制,虽然效果接近直接控制前、背景色,但颜色要艳丽不少,还多出一个“较深的“”灰”。
def __isnum(self, nums):
''' 判定色彩控制码,nums为控制码组合元组。'''
def show_tip(string, num):
''' 错误提示函数:string, 提示字符串。num,居中显示宽度设定。'''
print(f"\n{self.set_color(string, 43, 31).center(num, '~')}\n")
if len(nums) == 0:
show_tip(' 您没有设置色彩控制码!', 51)
return
elif len(nums)>3:
show_tip(f"“{', '.join([str(i) for i in nums])}”,您给出的设置太多!", 52)
return
for i in nums:
n = len(str(i))
if n > 3:
show_tip(f"“{i}”,参数设置错误!", 54)
return
elif n == 1: # 控制码一位,
if i == 6: # 6 没有特殊效果。
show_tip(f"“{i}”,没有特殊效果!", 54)
return
elif n == 2: # 控制码2位,仅十位3、4、9有效,个位8、9没有显示效果。
if i//10 not in (3, 4, 9):
show_tip(f"“{i}”,颜色设置错误!", 54)
return
if i%10 in (8, 9):
show_tip(f"“{i}”,没有颜色效果!", 54)
return
elif n == 3: # 控制码3位,仅十位10有效,个位8、9没有显示效果。
if i//10 not in (10,):
show_tip(f"“{i}”,特殊效果“背景饱和度”设置错误!", 47)
return
if i%100 in (8, 9):
show_tip(f"“{i}”,没有颜色效果!", 54)
return
return True
三、def look(self, num=100):
‘’ 查看前景色、背景色和特殊效果“随机搭配效果”,num默认100例,可自行设定浏览样例数量,我没有设定上限,您可“任意施为”。
>>> my.look(18) # 重置look方法默认的100例,调用方法打印随机18样例。
修正了样例效果图显示
代码
def random_effect(self):
''' 返回嵌入“效果随机”的色彩控制码 '''
from random import choice # 加载随机数模块随机选择方法。
while True:
effects = [i for i in range(1, 9) if i not in (6, 8)]+list(e90 := range(90, 98))+list(e100 := range(100, 108)) # 此条语句使用了海象运算符“ := ”在引用中给变量赋值,在python 3x以下版本将报错。如在3x以下版本run,请修改本条语句。
x, y, z = nums = [choice(range(30, 38)), choice(range(40, 48)), choice(effects)] # 随机选择前景、背景和特殊效果控制码。 变量别名c,方便简洁引用。
if x%10 == y%10:
continue # 前景色、背景色相同,不计数并从此处跳转再次(下一轮)循环。
if z in e90: # 特殊效果控制码为调节前景色饱和度,前景色设置将被特殊效果控制码覆盖。删除前景色控制码。
nums.pop(0)
elif z in e100: # 特殊效果控制码为调节背景色饱和度,背景色控制设置将被特殊效果控制码覆盖。删除背景色控制码。
nums.pop(1)
if self.__isnum(nums): # 返回“有效组合”。
return nums
1、“9x”特殊效果控制码为调节前景色饱和度,前景色设置将被特殊效果控制码覆盖。删除前景色控制码。
2、“10x”特殊效果控制码为调节背景色饱和度,背景色控制设置将被特殊效果控制码覆盖。删除背景色控制码。
四、def __isnum(self, nums):
‘’’ 判定色彩控制码,nums为控制码组合元组。’’’
基于 “一切输入都不可以完全保证正确”,所以加入了isnum方法判定色彩控制码组合参数的正确。如错误,打印错误提示后退出“代码运行”。
五、 def clear(self):
def __clear(self):
from os import system # 加载os模块的操作系统
l = system('clear') # 运行Linux命令“清屏”。
print('\n'*3) # 打印三个空行。
emsp; 这三行代码清除乱屏显,干净您的眼界。
六、def readme(self):
‘’’ 自述文本 ‘’'显形,即代码打印本文档内容。
代码
def readme(self):
''' 自述文本 '''
print(f"\n\n{self.set_color(' color工具“自述文档”', 32):~^53}\n{self.set_color(' (分段显示,任意键继续) ', 2):^48}\n\n")
with open('mycolor_readme.txt') as f:
while True:
s = f.readline() # 读取行。
if s == '':
break
input(self.set_color(s, 34, 4)) # 有色分段打印readme.txt文本内容。
print('-'*50) # 打印目录列完分割线。
(今年重庆“好热”,我也“热干”的样子。懒到今天才来校对好本文档。)
author = ‘梦幻精灵_cq’
proofread time = ‘2022-07-12’
用random_effect方法搞怪
- 随机色彩文字方块打印
>>>
>>> rc = my.random_effect # 方法别名。
>>> for i in range(18):
... a, b, c = rc()
... print(color('我是梦幻精灵_cq,我在重庆学 习Python。', a, b, c)) # 随机效果打印。
...
- 彩塔文字打印
由于字符串嵌入了色彩控制打印码,string.center方法不好使(打印出了凹凸不平的锯齿塔😁)了。
修改代码“算法”,用前插动态长度的’ '在50的宽度居中排行,实现了漂亮的彩塔。🤠
代码
from mytools.mypycolor import * # 模块加载。
my = Color() # 实例类。
color = my.set_color # 方法别名。
rc = my.random_effect # 方法别名。
s = "I'm Dream elf_cq, and I study Python in Chongqing. " # 待打印字符串。
n, end = 0, len(s)
while n <= end:
a, b, c = rc() # 调用方法返回随机控制码组合。
print(f"{' '*(25-int(n//2))}{color(s[:n+1], a, b, c)}") # 随机效果打印。
n += 2 # 每行打印字符长度去争取变量递增。
input(' Wwit ... '.center(50, '~')) #程序暂停。
每run一次,都是一座“不一样”的彩塔。😋
完整源码(跳过源码)
#!/sur/bin/nve python
# coding: utf-8
'''
filename: mypycolor.py
author: 梦幻精灵_cq
time: 2022-07-03
'''
class Color:
'''
将字符串嵌入控制码“\\033[34;43;6m'string'\\033[0m”控制字符串print()颜色输出。
您可以用Color().show()方法查看
“控制码 -> 显示效果”对应表;
可以用Color().look(int_number)方法查看
您“指定”数量的随机控制码组合效果。
show和look方法,都首先调用了__clear()
清屏方法,如果两个方法紧挨调用,不设置
暂停,将只可实现后一方法(前一方法显示被
后一方法清屏)。
可以用Color().set_color()方法返回
嵌入控制码组合的字符串。
还可以用Color().random_effect()方法,
返回随机控制码组合,用set_color方法配合,
进行随机效果打印。
特殊效果控制码“0”,关闭于她之前设置,
控制码组合以她结束,就等于没有设置效果;
在前面或中间就只有她后面控制码组合的效果。
在使用中需谨记。
'''
def set_color(self, string, *nums):
''' 字符串设置打印颜色效果:
返回嵌入“色彩控制码”的字符串。
string,要控制颜色的字符串。
*num,用元组收集控制码组合。
前景色、背景色和特殊效果的任意组合,
参数用英文状态逗号分隔,位置没分先后。 '''
if self.__isnum(nums): # 调用方法判定错误控制码参数,参数无误,返回嵌入控制码组合的字符串。
return f"\033[{';'.join(map(str, nums))};m{string}\033[0m"
else:
return string # 控制码组合有错,返回原字符串。
def random_effect(self):
''' 返回嵌入“效果随机”的色彩控制码 '''
from random import choice # 加载随机数模块随机选择方法。
effects = list('1234579')+list(range(90, 98))+list(range(100, 108))
return choice(range(30, 38)), choice(range(40, 48)), choice(effects) # 随机选择前景、背景和特殊效果控制码。 变量别名c,方便简洁引用。
def show(self):
''' 列印颜色控制码与效果对应表 '''
self.__clear() # 调用方法清屏。
color = self.set_color # 方法别名,方便代码书写。
print(color(' “\\033[37;40;0m\\033[0m”颜色控制码表 ', 32).center(53, "~"))
print(f"{color(' (此表以Python默认的“黑底白字”显示) ', 44):^48}")
print(f"\n{color(' 前、背景色控制码对应表 ', 32):-^48}")
print(f"\n{'':>2}颜色{'|':^3}控制码{'':>4}效果 {'|':^9}控制码{'':>4}效果\n{'~'*48:^50}")
for i,j in zip(range(8), '黑红绿黄蓝紫青灰'): # 循环打印前景色背景色“控制码->效果”对应表。
print(f"{'':>3}{color(j, 37, 44, 1)}{'|':^5} 3{i}{'':>5}{color('前景色', 3*10+i)}", end='')
print(f"{'|':^9} 4{i}{'':>5}{color('背景色', 4*10+i)}\n{'-'*48:^50}")
print(f"{color(' (“38、39、48、49”没有颜色效果) ', 44):^50}\n{'~'*50}")
print(f"\n{color(' 特殊效果控制码对应表 ', 32):-^50}")
print(f"\n{'':>2}{'名称':^6}{'控制码':^8}{'特殊效果':^22}\n{'~'*46:^50}")
effects = ('关闭','高亮', '减淡', '倾斜', '划线', '着重', '反白', '消隐', '删除')
for i,j in zip('012345789', effects): # 循环打印九种特殊效果和控制码对应效果图。
s = f"37;40;{i}".center(23)
print(f"{'':>4}{color(j, 37, 44, 1)}{i:^14}{color(s, 37, 40, i):^23}\n{'-'*46:^50}")
print(f"{color(' (“6”没有特殊效果显示) ', 44):^52}\n{'~'*50}")
print(f"\n{color(' 前、背景色饱和度控制码对应表 ', 32):-^46}")
print(f"\n{'':>2}颜色{'|':^3}控制码{'':>4}效果 {'|':^7}控制码{'':>4}效果\n{'~'*47:^50}")
for i,j in zip(range(8), '灰红绿黄蓝紫青白'): # 循环打印前景色背景色“控制码->效果”对应表。
print(f"{'':>3}{color(j, 37, 44, 1)}{'|':^5} 9{i}{'':>5}{color('前景色', 9*10+i)}", end='')
print(f"{'|':^7} 10{i}{'':>5}{color('背景色', 10*10+i)}\n{'-'*47:^50}")
print(f"{color(' (“98、99、108、109”没有“特殊控制”效果) ', 44):^52}\n{'~'*50}")
def look(self, num=100):
''' 查看前景色、背景色和特殊效果“随机搭配效果”,num默认100例,可自行设定。'''
self.__clear() # 调用方法清屏。
print(f"\n{'~'*50}\n{self.set_color(f' 随机{num}款配色样式展示 ', 2, 30, 44):^53}\n{'~'*50}\n")
n = 1 # 本是用for循环(我更喜欢for的简练,无关有人说她更高效),为可以过滤前、背景色相同的随机组合,才改用while循环。
while n < num+1: # 循环输出设定数量的随机样式组合,默认100。
x, y, z = self.random_effect() # 获取的随机控制码组合解构赋值。
if x%10 == y%10:
continue # 前景色、背景色相同,不计数并从此处跳转再次(下一轮)循环。
print(self.set_color(f"{x};{y};{z:^3}", x, y, z), end=' ') # 打印组合效果,打印字符即为该效果控制码组合。
if not n%5: # 打印五个效果组合后折行。
print('\n')
n += 1
print(f"\n{'~'*50}\n") # 打印完结分割线。
def __isnum(self, nums):
''' 判定色彩控制码,nums为控制码组合元组。'''
def show_tip(string, num):
''' 错误提示函数:string, 提示字符串。num,居中显示宽度设定。'''
print(f"\n{self.set_color(string, 43, 31).center(num, '~')}\n")
if len(nums) == 0:
show_tip(' 您没有设置色彩控制码!', 51)
return
elif len(nums)>3:
show_tip(f"“{', '.join([str(i) for i in nums])}”,您给出的设置太多!", 52)
return
for i in nums:
n = len(str(i))
if n > 3:
show_tip(f"“{i}”,参数设置错误!", 54)
return
elif n == 1: # 控制码一位,
if i == 6: # 6 没有特殊效果。
show_tip(f"“{i}”,没有特殊效果!", 54)
return
elif n == 2: # 控制码2位,仅十位3、4、9有效,个位8、9没有显示效果。
if i//10 not in (3, 4, 9):
show_tip(f"“{i}”,颜色设置错误!", 54)
return
if i%10 in (8, 9):
show_tip(f"“{i}”,没有颜色效果!", 54)
return
elif n == 3: # 控制码3位,仅十位10有效,个位8、9没有显示效果。
if i//10 not in (10,):
show_tip(f"“{i}”,特殊效果“背景饱和度”设置错误!", 47)
return
if i%100 in (8, 9):
show_tip(f"“{i}”,没有颜色效果!", 54)
return
return True
def __clear(self):
from os import system # 加载os模块的操作系统
l = system('clear') # 运行Linux命令“清屏”。
print('\n'*3) # 打印三个空行。
def readme(self):
''' 自述文本 '''
print(f"\n\n{self.set_color(' color工具“自述文档”', 32):~^53}\n{self.set_color(' (分段显示,任意键继续) ', 2):^48}\n\n")
with open('mycolor_readme.txt') as f:
while True:
s = f.readline() # 读取行。
if s == '':
break
input(self.set_color(s, 34, 4)) # 有色分段打印readme.txt文本内容。
print('-'*50) # 打印目录列完分割线。
if __name__ == '__main__':
my = Color() # 实例类。
color = my.set_color # 别名,简洁代码调用。
print(f"\n{color(' Hello, How are you? ', 45).center(59, '~')}")
print(f"\n\n{color(' 我是颜色打印控制工具 ', 32).center(50)}")
print(f"{color(my.__doc__, 34, 47, 4)}\n\n{'~'*50}\n\n")
__上一篇:__ “杨辉三角”——我的“草根算法”和CSDN“每日一练”题目答案的差距
__下一篇:__ 根据给定字符数和字符,打印输出“沙漏”和剩余数
我的HOT博:
- 练习:银行复利计算(用 for 循环解一道初中小题)(1077阅读)
- pandas 数据类型之 DataFrame(1428阅读)
- 班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)(2112阅读)
- Python字符串居中显示(1569阅读)
- 练习:求偶数和、阈值分割和求差( list 对象的两个基础小题)(1652阅读)
- 用 pandas 解一道小题(1978阅读)
- 可迭代对象和四个函数(1071阅读)
- “快乐数”判断(1233阅读)
- 罗马数字转换器(构造元素取模)(1943阅读)
- Hot:罗马数字(转换器|罗生成器)(3842阅读)
- Hot:让QQ群昵称色变的代码(28882阅读)
- Hot:斐波那契数列(递归| for )(4052阅读)
- 柱状图中最大矩形(1657阅读)
- 排序数组元素的重复起止(1243阅读)
- 电话拨号键盘字母组合(1356阅读)
- 密码强度检测器(1816阅读)
- 求列表平衡点(1822阅读)
- Hot: 字符串统计(4290阅读)
- Hot:尼姆游戏(聪明版首发)(3430阅读)尼姆游戏(优化版)(1042阅读)
推荐条件
点阅破千
精品文章:
- 好文力荐:《python 完全自学教程》齐伟书稿免费连载
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
Python 入门指南【Python 3.6.3】
好文力荐:
-
全栈领域优质创作者——寒佬(还是国内某高校学生)好文:《非技术文—关于英语和如何正确的提问》,“英语”和“会提问”是学习的两大利器。