我正在尝试以彩虹色打印文件。但是我有问题,这是我的代码:
color = [91, 93, 92, 96, 94, 95]
with open(sys.argv[1]) as f:
for i in f.read():
for c in color:
print('\033[{0}m{1}\033[{0};m'
.format(c, i), end='', flush=True)
问题是,我希望输出如下:Hello
(红色为H
,黄色为e
等),但我得到的结果如下:{{ 1}}(红色的第一个HHHHHeeeeellll...
,黄色的第二个H
等。)
我知道,因为第一个H
将循环第二个for
。但是我怎么能解决这个问题呢?
答案 0 :(得分:2)
你不想循环遍历颜色的每个字母的颜色,你可以使用itertools.cycle
循环调用next()
的颜色来获得下一个颜色:
from itertools import cycle
color = cycle([91, 93, 92, 96, 94, 95])
with open(sys.argv[1]) as f:
for i in f.read():
print('\033[{0}m{1}\033[{0};m'
.format(next(color), i), end='', flush=True)
答案 1 :(得分:1)
你必须以“拉链”的方式迭代它们,可能会重复第二个。
color = [91, 93, 92, 96, 94, 95]
with open(sys.argv[1]) as f:
for i, c in itertools.izip(f.read(), itertools.cycle(color)):
print('\033[{0}m{1}\033[{0};m'
.format(c, i), end='', flush=True)
答案 2 :(得分:0)
如你所说,你不应该使用第二个for循环。
你可以使用color_index
(初始值:0),然后在每个循环中递增它(以颜色数为模),并使用它:color[color_index]
。