16

Python 和 StackOverflow 的新手,我需要一点帮助。我想在 Python 中打印颜色并用谷歌搜索,但运气不佳:(我每次都很困惑,没有一个工作。这是我输入的代码。

answer = input ("Wanna go explore? OPTIONS : Yes or No")
if answer == "no":
    print("Awww, come on, don't be like that, lets go!")
elif answer == "yes":
    print ("Great! Lets go!")
else: 
    print("Whats that? I couldn't hear you!")

现在,我想要 OPTIONS 为绿色,Yes 为蓝色,No 为红色。一个人将如何实现这一目标?

4

8 回答 8

9

如果您想在 IDLE shell 中打印颜色,则使用 ASCI 转义码不会对您有所帮助,因为它没有实现此功能。

有一个特定于 IDLE 的 hack,可让您直接写入它的PyShell对象并指定 IDLE 已经定义的文本标签,例如"STRING"默认情况下将显示为绿色的文本标签。

import sys

try:
    shell = sys.stdout.shell
except AttributeError:
    raise RuntimeError("you must run this program in IDLE")

shell.write("Wanna go explore? ","KEYWORD")
shell.write("OPTIONS","STRING")
shell.write(" : ","KEYWORD")
shell.write("Yes","DEFINITION")
shell.write(" or ","KEYWORD")
shell.write("No","COMMENT")
answer = input()

在 IDLE 中运行时会出现以下提示:

在此处输入图像描述

以下是所有可用标签的列表:

print("here are all the valid tags:\n")

valid_tags = ('SYNC', 'stdin', 'BUILTIN', 'STRING', 'console', 'COMMENT', 'stdout',
              'TODO','stderr', 'hit', 'DEFINITION', 'KEYWORD', 'ERROR', 'sel')

for tag in valid_tags:
    shell.write(tag+"\n",tag)

请注意,'sel'它表示被选中的文本是特殊的,因此一旦单击其他内容,它将被取消选中。它也可用于开始选择要复制的一些文本。

于 2016-03-23T16:40:54.617 回答
8

如果您只是想要一种非常简单直接的方式在终端中打印 ansi 颜色,您可以查看ansicolor 包模块

通过 pip 安装

$ pip install ansicolors

用法片段

from colors import red, green, blue
print red('This is red')
print green('This is green')
print blue('This is blue')

from colors import color
for i in range(256):
    print color('Color #%d' % i, fg=i)

关于点子的注意事项

pip 是一个 python 包管理器。如果你还没有pip安装,你可以安装它easy_install pip

如果你发现你没有easy_install,然后下载这个: http: //peak.telecommunity.com/dist/ez_setup.py并执行:

python ez_setup.py
easy_install pip

Windows 命令外壳的颜色

上面的 ansi 颜色在 windows 命令 shell 中对你不起作用。尝试查看这个activestate 代码片段

于 2012-06-19T20:14:03.853 回答
6

如果您使用的是支持 ANSI 转义序列的终端和/或 shell,则应该可以使用以下内容:

print("Blah blah \033[0;32mthis part will be green\033[00m blah blah.")
print("Blah blah \033[0;31mthis part will be red\033[00m blah blah.")

我可以确认它确实可以在bashLinux 上运行。有关更多详细信息,请参阅有关 ANSI 转义码的 Wikipedia 页面,包括描述不同字符序列/值的影响的综合表格。我不主张将此作为规范的解决方案,但它可能足以满足您的目的。

于 2012-06-19T20:24:30.433 回答
5

检查curses模块。这将替换print语句并让您完全控制屏幕上的文本定位和属性。

于 2012-06-19T20:10:43.290 回答
3

python中的颜色

一种使用python很好地打印文本或设置文本样式的简单方法,无需任何插件或包。


# the ANSI codes are stored in variables, making them easier to use
black = "\033[0;30m"
red = "\033[0;31m"
green = "\033[0;32m"
yellow = "\033[0;33m"
blue = "\033[0;34m"
magenta = "\033[0;35m"
cyan = "\033[0;36m"
white = "\033[0;37m"
bright_black = "\033[0;90m"
bright_red = "\033[0;91m"
bright_green = "\033[0;92m"
bright_yellow = "\033[0;93m"
bright_blue = "\033[0;94m"
bright_magenta = "\033[0;95m"
bright_cyan = "\033[0;96m"
bright_white = "\033[0;97m"

print(black + "Hello world")
print(red + "Hello world")
print(green + "Hello world")
print(blue + "Hello world")
print(yellow + "Hello world")
print(magenta + "Hello world")
print(cyan + "Hello world")
print(bright_black + "Hello world")
print(bright_red + "Hello world")
print(bright_green + "Hello world")
print(bright_blue + "Hello world")
print(bright_cyan + "Hello world")
print(bright_magenta + "Hello world")
print(bright_yellow + "Hello world")

输出

查看:彩色输出

于 2020-09-20T07:56:26.503 回答
2

我建议使用这个新库Printy,它带有 print() 和 input() 的替代函数。刚刚发布了 1.2.0 版作为跨平台库。

它基于标志,因此,对于您的使用情况,您可以执行以下操作:

from printy import inputy
# with inline formats, this will apply a green(n)
# to the word 'OPTIONS', blue (b) to the word 'Yes', and red (r) to 
# the word No
inputy("Wanna go explore? [n]OPTIONS@ : [b]Yes@ or [r]No@")

在此处输入图像描述

您还可以应用一些验证,并且返回的值已经转换为布尔值(或取决于指定的类型)

在此处输入图像描述

它可以让你做更多有趣的事情,看看: Printy on github

于 2020-04-15T01:27:35.843 回答
2

Clint命令输入接口工具)是我用过的一个很好的这是一个与终端有关的多功能库。那里有颜色、是/否提示、进度条等功能。

使用 Clint 进行彩色输出如下所示:

>>> from clint.textui import colored, puts
>>> puts(colored.red('red text'))
red text
于 2018-02-20T23:52:24.877 回答
0

如果要以彩色打印到终端,则必须为正在使用的终端使用转义码。对于 unix/linux 系统,您可以使用该curses模块 - 或者直接使用bash 颜色代码作为输出字符串的一部分。根据这个问题,在 Windows 中似乎没有一种简单的方法可以做到这一点。

于 2012-06-19T20:17:14.320 回答