彩色文本,Python print() 居然还能这样玩?

大家好,在学习Python编程的过程中,我们习惯于使用 print() 函数来输出文本。然而,许多人不知道的是,print() 函数不仅能输出普通的黑白文本,还能输出彩色文本。

image-20240605162416364

原理

终端与ANSI转义序列

在深入代码之前,我们需要了解一些基础知识。终端(Terminal)是我们与操作系统交互的重要工具,而ANSI转义序列(ANSI escape sequences)则是控制终端行为的指令集合。通过这些转义序列,我们可以改变文本颜色、背景色等。

什么是ANSI转义序列?

ANSI转义序列是一串以 \033[ 开头的字符,用于控制终端的显示属性。常见的颜色码如下:

  • 字体颜色(Foreground color)
    • 黑色: 30
    • 红色: 31
    • 绿色: 32
    • 黄色: 33
    • 蓝色: 34
    • 洋红: 35
    • 青色: 36
    • 白色: 37
  • 背景颜色(Background color)
    • 黑色: 40
    • 红色: 41
    • 绿色: 42
    • 黄色: 43
    • 蓝色: 44
    • 洋红: 45
    • 青色: 46
    • 白色: 47

案例代码

基本用法

下面是一个简单的示例,展示如何使用ANSI转义序列打印彩色文本:

# 打印红色文本
print("\033[31m这是红色文本\033[0m")

# 打印绿色文本
print("\033[32m这是绿色文本\033[0m")

image-20240605161801134

在上述代码中,\033[31m 设置文本颜色为红色,\033[32m 设置文本颜色为绿色,\033[0m 则用于重置所有属性,以确保后续文本不受影响。

彩色文本函数

为了便于使用,我们可以封装一个函数,来简化彩色文本的打印:

def print_color(text, color):
    color_codes = {
        "black": "30",
        "red": "31",
        "green": "32",
        "yellow": "33",
        "blue": "34",
        "magenta": "35",
        "cyan": "36",
        "white": "37"
    }
    color_code = color_codes.get(color.lower(), "37")
    print(f"\033[{color_code}m{text}\033[0m")

# 使用封装的函数打印彩色文本
print_color("这是红色文本", "red")
print_color("这是绿色文本", "green")
print_color("这是蓝色文本", "blue")

image-20240605161829774

高级用法

我们还可以通过组合多种属性来实现更复杂的效果。例如,打印带有不同背景色的文本:

def print_color_bg(text, fg_color, bg_color):
    fg_color_codes = {
        "black": "30",
        "red": "31",
        "green": "32",
        "yellow": "33",
        "blue": "34",
        "magenta": "35",
        "cyan": "36",
        "white": "37"
    }
    bg_color_codes = {
        "black": "40",
        "red": "41",
        "green": "42",
        "yellow": "43",
        "blue": "44",
        "magenta": "45",
        "cyan": "46",
        "white": "47"
    }
    fg_code = fg_color_codes.get(fg_color.lower(), "37")
    bg_code = bg_color_codes.get(bg_color.lower(), "40")
    print(f"\033[{fg_code};{bg_code}m{text}\033[0m")

# 使用封装的函数打印带背景色的彩色文本
print_color_bg("红色文字,黄色背景", "red", "yellow")
print_color_bg("绿色文字,蓝色背景", "green", "blue")

image-20240605161922613

完整案例:彩色日志系统

我们可以利用上述知识,创建一个简单的彩色日志系统,用不同的颜色表示不同级别的日志信息:

class ColorLogger:
    def __init__(self):
        self.level_colors = {
            "info": "32",    # 绿色
            "warning": "33", # 黄色
            "error": "31"    # 红色
        }
    
    def log(self, message, level="info"):
        color_code = self.level_colors.get(level.lower(), "37")
        print(f"\033[{color_code}m[{level.upper()}] {message}\033[0m")

# 使用彩色日志系统
logger = ColorLogger()
logger.log("这是信息日志", "info")
logger.log("这是警告日志", "warning")
logger.log("这是错误日志", "error")

image-20240605161947596

彩色文本的输出不仅让代码更加生动,还能在实际开发中,如日志系统等,发挥重要作用。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西坡不是东坡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值