2011-05-04 96 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