如果我不使用内置打印功能,有没有办法在 python 中打印彩色文本?

Is there a way to print coloured text in python if I'm not using the built-in print function?

我正在制作一个基于文本的游戏,理想情况下我希望在特定部分使用不同颜色的文本

我已经想出如何使用基本的内置打印功能更改文本的颜色,如下所示:

import colorama
from colorama import Fore, Back, Style
colorama.init()

print('3[31m' + 'red text here')
print('3[39m')
input("\n[Press enter to continue]")

在我的游戏中,我使用以下代码使大部分文本逐字母显示:

import time 
import sys 
import keyboard 

def print_ci(s):    
    for c in s:
        if keyboard.is_pressed("ctrl"):
            sys.stdout.write(c)
            sys.stdout.flush()
        else:
            sys.stdout.write(c)
            sys.stdout.flush()
            time.sleep(0.035)

print_ci ("sample text that appears letter by letter")

我想让逐个字母出现的文本在程序的特定位置呈现某种颜色。

我试过这个:

import time 
import sys 
import keyboard
import colorama
from colorama import Fore, Back, Style
colorama.init()

def print_ci(s):    
    for c in s:
        if keyboard.is_pressed("ctrl"):
            sys.stdout.write(c)
            sys.stdout.flush()
        else:
            sys.stdout.write(c)
            sys.stdout.flush()
            time.sleep(0.035)

print_ci ("3[31m" + "sample text that appears letter by letter")
print_ci ('3[39m')

但我只得到这个输出:

[31msample text that appears letter by letter[39m

我也试过这种变色方法:

import time 
import sys 
import keyboard
from colorama import init
from termcolor import colored

init()

def print_ci(s):   
    for c in s:
        if keyboard.is_pressed("ctrl"):
            sys.stdout.write(c)
            sys.stdout.flush()
        else:
            sys.stdout.write(c)
            sys.stdout.flush()
            time.sleep(0.035)

print_ci(colored('Hello, World!', 'green',))

但我仍然得到相同的输出。 有什么办法可以解决这个问题?

感谢 Reddit 上的 u/socal_nerdtastic,我找到了一个方法

首先,我将 sys.stdout 代码更改为

import time  
import keyboard   

def print_ci(s): 
    for c in s:        
         print(c, end='', flush=True)
         if not keyboard.is_pressed("ctrl"):
             time.sleep(0.035)  

print_ci ("sample text that appears letter by letter") 

然后我把它编辑成这个

import time  
import keyboard   
import colorama 
from colorama import Fore, Back, Style 
colorama.init()  

def print_ci(s, color=''): 
    print(color) # set the text color
    for c in s:        
         print(c, end='', flush=True)
         if not keyboard.is_pressed("ctrl"):
             time.sleep(0.035)  
    print('3[39m') # reset the terminal color

print_ci("sample text that appears in red", color='3[31m')
print_ci("normal text")

它实际上并没有回到我的正常文本,但如果你制作不同的打印功能,你可以使用它们制作多种不同颜色的文本

这里是 link 到 reddit 上的帖子,如果你需要的话: https://www.reddit.com/r/learnpython/comments/lc7e8o/is_there_a_way_to_print_coloured_text_in_python/