在Python 3.2中如何更改单个打印行的颜色?

9
我正在学习Python 3.2,并且正在编写一个基于文本的冒险游戏来练习和熟悉这门语言。无论如何,我想让在某些特定行为发生时,打印文本的颜色发生变化。我该怎么做呢?
例如,我希望第一次出现这种情况时的文本是:
if 'strength' in uniqueskill.lower():
time.sleep(3)
print('As you are a Warrior, I shall supply you with the most basic tools every Warrior needs.')
time.sleep(3)
print('A sword and shield.')
time.sleep(1)
print('You have gained A SWORD AND SHIELD!')

你很可能需要输出 ANSI 转义序列,就像这个回答中提到的那样。 - samplebias
我建议不要导入外部库,而是像这样编写自己的代码 => https://dev59.com/U3VC5IYBdhLWcg3wcw0m#70599663 - Vinod Srivastav
2个回答

32

Colorama是一个非常好用的跨平台模块,可以在终端/命令行中以不同的颜色进行输出。

示例:

import colorama
from colorama import Fore, Back, Style

colorama.init()

text = "The quick brown fox jumps over the lazy dog"

print(Fore.RED + text)
print(Back.GREEN + text + Style.RESET_ALL)
print(text)

给你:

在这里输入图片描述


不断收到断言错误。 - Jack
已编辑以使用Python3的print语句。您还在遇到错误吗?如果是,请将您正在运行的代码和完整的堆栈跟踪粘贴到某个地方。 - Acorn
还是有错误,代码如下: import colorama from colorama import Fore, Back, Style colorama.init()notedaction = "你获得了一把剑和一个盾牌!"if 'strength' in uniqueskill.lower(): time.sleep(3) print('作为一名战士,我将为你提供每个战士都需要的最基本工具。') time.sleep(3) print('一把剑和一个盾牌。') time.sleep(1) print(Fore.RED + notedaction) - Jack
我看到问题是你在使用IDLE:https://dev59.com/questions/j1bUa4cB1Zd3GeqPC-QM#5902356 - Acorn
伟大的工作在Windows中,谢谢。 - Jackssn
仍然完美地工作着。谢谢。附注:不要像我一样傻瓜般地忘记 colorama.init() - pookie

6
您没有指定您的平台,这在此处非常重要,因为大多数将彩色文本输出到控制台的方法都是特定于平台的。例如,Python附带的curses库仅适用于UNIX系统,而ANSI代码在新版本的Windows上不再起作用。我能想到的最跨平台的解决方案是,在Windows机器上安装curses的Windows版本并使用它。
以下是使用curses进行颜色处理的示例:
import curses

# initialize curses
stdscr = curses.initscr()
curses.start_color()

# initialize color #1 to Blue with Cyan background
curses.init_pair(1, curses.COLOR_BLUE, curses.COLOR_CYAN)

stdscr.addstr('A sword and a shield.', curses.color_pair(1))
stdscr.refresh()

# finalize curses
curses.endwin()

请注意,curses不仅仅是颜色。您可以在控制台屏幕上定义几个窗口,使用绝对或相对坐标定位文本,操作键盘输入等等。您可以在此处找到教程: http://docs.python.org/dev/howto/curses.html

我使用的是Windows 7系统,最终找到了解决方法。我安装了Colorama库并使用了以下代码:print('\x1b[34m' + 'YOU HAVE GAINED A SWORD AND SHIELD!')。问题是,最终产品的输出结果为“34mYOU HAVE GAINED A SWORD AND SHIELD!”,但颜色正确。有没有什么办法可以隐藏字母和数字呢? - Jack
@Crashdown - 例子在发布过程中被切掉了,请阅读编辑。 - Boaz Yaniv
我更喜欢使用curses而不是普通的ANSI代码,原因有两个:它们很丑(特别是当你与你的测试混合时),而且curses更强大。无论如何,我不知道如何在Windows上正确地使用它们,并且我也不想麻烦自己。如果我需要一个仅限于Windows的实现,我会使用像WConioconsole这样的东西。 - Boaz Yaniv
不过,你需要自己编译它们,因为似乎没有适用于Python 3.2的版本。 - Boaz Yaniv
@Boaz:请查看我的答案,了解如何使用colorama。 - Acorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接