2011-05-04 108 views
4

我正在学习Python 3.2中的一个基于文本的小冒险,以便练习和熟悉这门语言。无论如何,我想这样做是为了当某些行为发生时,打印文本的颜色会发生变化。我该怎么做呢。在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!') 
+0

你很可能需要输出ANSI转义序列,如[在此答复中提到(HTTP:// stackoverflow.com/questions/2330245/python-change-text-color-in-shell)。 – samplebias 2011-05-04 22:14:10

回答

6

你没有指定平台,这是非常重要的位置,因为输出彩色文本安慰大部分方法都是平台具体。例如,Python附带的curses库是纯UNIX,而ANSI代码不再适用于新版本的Windows。我能想到的最多的跨平台解决方案是在Windows机器上安装Windows version of 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() 

请注意,诅咒不仅仅是具有色彩更复杂。您可以使用它在控制台屏幕上定义多个窗口,使用绝对坐标或相对坐标定位文本,操作键盘输入等。你可以在这里找到一个教程: http://docs.python.org/dev/howto/curses.html

+0

@波兹嗯,没有例子? – nchpmn 2011-05-04 22:37:46

+0

我在Windows 7上,并最终弄清楚了。我安装了Colorama库,并使用了代码:print('\ x1b [34m'+'您已经获得了一把剑和盾牌!')。问题在于最终产品是“34m你获得了剑和盾牌!”但它是正确的颜色。任何方式来隐藏字母和数字? – Jack 2011-05-04 22:38:45

+0

@Crashdown - 发布时切割示例,阅读编辑。 – 2011-05-04 22:40:58

26

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) 

为您提供:

enter image description here

+0

继续收到AssertionError。 – Jack 2011-05-04 23:52:12

+0

编辑为使用Python3打印语句。你还在收到错误吗?如果是这样,请将您正在运行的代码和完整的stacktrace粘贴到某处。 – Acorn 2011-05-05 00:16:52

+0

仍然得到了一个错误,代码如下:从COLORAMA进口脱颖而出,后退,风格 colorama.init() notedaction = 进口彩色光 “你已经获得了一个剑与盾!” 如果'strength'在uniqueskill.lower(): 时间。睡觉(3) print('因为你是战士,我会为你提供每个战士需要的最基本的工具。') time.sleep(3) print('A sword and shield。') 时间。睡觉(1) 打印(Fore.RED +着名的行动) – Jack 2011-05-05 17:53:43