当前位置:网站首页>哈哈!一个 print 函数,还挺会玩啊!
哈哈!一个 print 函数,还挺会玩啊!
2022-08-01 18:56:00 【菜鸟学Python】
(点击上方快速关注并设置为星标,一起学Python)
作者:HOLL4ND
原文链接:
https://www.kleinlam.space/%E5%8D%9A%E5%AE%A2/python/python-%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%E9%A2%9C%E8%89%B2%E5%AD%97%E4%BD%93/
在终端中,输出的字体总是单一颜色的,黑底白字。但是在一些场景并不能很好的满足输出的需求,比如在大量而快速输出中,输出一些提示性或者警告性的信息,普通的黑底白字输出可能或起不到作用。
本文将介绍如何输出颜色字体到终端界面中。
# 1. ANSI 转义序列
其实终端不仅能够显示程序的输出。它可以显示移动光标、为文本着色、清除整个屏幕,并且不仅仅是静态输出。比如颜色字体或者闪烁的光标或者是进度条。
我们通过使用特殊的输出字符串改变终端的输出行为,最简单的例子便是换行这个例子:\n
# 2. 配色方案
有两种配色方案广泛应用于终端中:
16 色 (8 背景 + 8 前景)前景即是字体本身的颜色
255 色
16 色
16色的配色方案包含两个颜色设置,每个8色,一个是背景色一个是字体色(也即前景色),这个配色方案的语法格式如下:

首先举一个例子 :
\033[1;32;40m
这里 \033[ 是转义字符 1 代表高亮,32 代表前景色为绿色,背景色为黑色
输出到终端则是这个效果:

转义字符
转义字符可以有三种形式
十六进制:\x16[
Unicode:\u001b[
八进制:\033[
样式
这个样式指的是字体的显示样式:
0(默认值)、1(高亮)、22(非粗体)
4(下划线)、24(非下划线)、 5(闪烁)
25(非闪烁)、7(反显)、27(非反显)
print('\033[0;32;40m这是一行测试字体\033[0m')
print('\033[1;32;40m这是一行测试字体\033[0m')
print('\033[22;32;40m这是一行测试字体\033[0m')
print('\033[4;32;40m这是一行测试字体\033[0m')
print('\033[24;32;40m这是一行测试字体\033[0m')
print('\033[5;32;40m这是一行测试字体\033[0m')
print('\033[25;32;40m这是一行测试字体\033[0m')
print('\033[7;32;40m这是一行测试字体\033[0m')
print('\033[27;32;40m这是一行测试字体\033[0m')具体效果看下面的动图:

需要注意的是具体的效果可能收到使用的终端的限制,目前在CMD中输出并不会被识别,但是在window terminal中是成功的输出以上内容。
颜色设置
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)
前景色,即字体颜色的展示:
print('\033[1;30;40m这是一行黑色测试字体\033[0m')
print('\033[1;31;40m这是一行红色测试字体\033[0m')
print('\033[1;32;40m这是一行绿色测试字体\033[0m')
print('\033[1;33;40m这是一行黄色测试字体\033[0m')
print('\033[1;34;40m这是一行蓝色测试字体\033[0m')
print('\033[1;35;40m这是一行洋红测试字体\033[0m')
print('\033[1;36;40m这是一行青色测试字体\033[0m')
print('\033[1;37;40m这是一行白色测试字体\033[0m')
背景色:
print('\033[1;37;40m这是一行黑色测试背景\033[0m')
print('\033[1;37;41m这是一行红色测试背景\033[0m')
print('\033[1;37;42m这是一行绿色测试背景\033[0m')
print('\033[1;37;43m这是一行黄色测试背景\033[0m')
print('\033[1;37;44m这是一行蓝色测试背景\033[0m')
print('\033[1;37;45m这是一行洋红测试背景\033[0m')
print('\033[1;37;46m这是一行青色测试背景\033[0m')
print('\033[1;37;47m这是一行白色测试背景\033[0m')
Colorama 一个颜色输出的模块
每次输入输出都需要如此配置是非常麻烦的事,Colorama 提供方便的字体颜色输出的配置
from colorama import init, Fore, Back, Style
# Initializes Colorama
init(autoreset=True)
print(Style.BRIGHT + Back.YELLOW + Fore.RED + "from colorama import init, Fore, Back, Style
# Initializes Colorama
init(autoreset=True)
print(Style.BRIGHT + Back.YELLOW + Fore.RED + "Colorama ")")
简单的变色函数
background_color_dict={
'BLACK':40,
'RED':41,
'GREEN':42,
'YELLOW':43,
'BLUE':44,
'MAGENTA':45,
'CYAN':46,
'WHITE':47
}
text_color_dict={
'BLACK':30,
'RED':31,
'GREEN':32,
'YELLOW':33,
'BLUE':34,
'MAGENTA':35,
'CYAN':36,
'WHITE':37
}
style_dict={
'normal':0,
'bold':1,
'light':2,
'italicize':3,
'underline':4,
'blink':5
}
def set_text_color(str_text, style, text_color, background_color):
str = str_text
style_code = style_dict[style]
text_color_code = text_color_dict[text_color]
back_color_code = background_color_dict[background_color]
print_text = f'\033[{style_code};{text_color_code};{back_color_code}m{str}\033[0m'
return print_text256色
256色的输出格式和16色的有点不一样

转义字符和上面的是一样的:
十六进制:\x16[
Unicode:\u001b[
八进制:\033[
标注显示模式则是38或者48选择一个表名后面颜色代码是前景色还是背景色。
如果想要同时修改,则使用两个这样的语句即可:
print("\033[48;5;160m\033[38;5;231m背景前景修改ABCDE \033[38;5;226m前景修改ABCDE\033[0;0m")
输出一下所有的前景颜色
def print_colors_256(color_code):
num1 = str(color_code)
num2 = str(color_code).ljust(3, ' ')
if color_code % 16 == 0:
return(f"\033[38;5;{num1}m {num2} \033[0;0m\n")
else:
return(f"\033[38;5;{num1}m {num2} \033[0;0m")
print("256 color scheme:")
print('',end=' ')
print(' '.join([print_colors_256(x) for x in range(256)]))
这个效果可能和你的终端输出不一致,这可能是因为我们的终端使用了不同的主题,对颜色有着不同的修改。
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|年度爆款文案
点阅读原文,看B站我的视频!
边栏推荐
- WinRAR | 将多个安装程序生成一个安装程序
- 483-82 (23, 239, 450, 113)
- Use of message template placeholders
- 123123123123
- C#/VB.NET 从PDF中提取表格
- 想随时、随地、随心使用数据库的朋友们,全体注意!
- How to make the fixed-point monitoring equipment display the geographic location on the EasyCVR platform GIS electronic map?
- Keras deep learning practice - traffic sign recognition
- ExcelPatternTool: Excel表格-数据库互导工具
- ACID Characteristics and Implementation Methods of MySQL Relational Database Transactions
猜你喜欢

生命周期和作用域

硬件大熊原创合集(2022/07更新)

The life cycle and scope

JVM运行时数据区与JMM内存模型是什么

Zabbix6.0钉钉机器人告警

亚马逊云科技Build On2022技能提升计划第二季——揭秘出海爆款新物种背后的黑科技

C#/VB.NET: extracted from the PDF document all form

#yyds dry goods inventory# Interview must brush TOP101: the last k nodes in the linked list

PanGu-Coder:函数级的代码生成模型

GZIPOutputStream 类源码分析
随机推荐
The elder brother of the goldfish RHCA memoirs: CL210 experiment management it network - chapter
How to build a CMDB driven by consumption scenarios?
Live chat system technology (8) : vivo live IM message module architecture practice in the system
What is the JVM runtime data area and the JMM memory model
SQL函数 TO_DATE(二)
The function realization of the national standard GB28181 protocol EasyGBS platform compatible with the old version of the inflow port
行业沙龙第二期丨如何通过供应链数字化业务协同,赋能化工企业降本增效?
modbus总线模块DAM-8082
Friends who want to use the database anytime, anywhere and as you like, all attention!
想随时、随地、随心使用数据库的朋友们,全体注意!
TestNG多个xml进行自动化测试
Industry Salon Phase II丨How to enable chemical companies to reduce costs and increase efficiency through supply chain digital business collaboration?
30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?
LeetCode 0151. Reverse a string of words
2022年 PHP面试问题记录
金鱼哥RHCA回忆录:CL210管理OPENSTACK网络--网络配置选项
将ENS域名转化为音乐需要几步?
直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
What is the implementation principle of Go iota keyword and enumeration type
kubernetes-部署nfs存储类