在另一个for循环中使用for循环

时间:2015-09-12 06:15:53

标签: python python-3.x

我正在尝试以彩虹色打印文件。但是我有问题,这是我的代码:

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。但是我怎么能解决这个问题呢?

3 个答案:

答案 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]