尝试在Python中垂直打印

时间:2015-11-18 13:31:35

标签: python

我正在尝试创建需要垂直打印的图像:

enter image description here

从for循环中,我可以通过缩进新行来打印图像;但是,我希望图像逆时针旋转90度(这是转置吗?)。

我尝试使用from itertools import zip_longest,但它给出了:

  

TypeError:zip_longest参数#1必须支持迭代

class Reservoir:
    def __init__(self,landscape):
        self.landscape = landscape
        self.image = ''
        for dam in landscape:
            self.image += '#'*dam + '\n'

        print(self.image)

landscape = [4, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0,
             1, 1, 2, 5, 6, 5, 2, 2, 2, 3, 3, 3, 4, 5, 3, 2, 2]  
lake = Reservoir(landscape)
print(lake)          

1 个答案:

答案 0 :(得分:2)

我不知道你是否会找到一个功能或者lib来为你做这件事。但您可以手动编码此轮换。

您不想在此处显示真实图像,而是要打印代表景观的字符。你必须打印"图像"逐行,但由于您的横向数组代表'#'你想要在每个中,你必须遍历你想要的总行数,并且对于该行中的每个字符,打印一个&#39>。 '或者#'#'取决于相应的格局列值

使用

h = max(landscape)

通过查找横向值的最大值来计算要打印的总行数。

然后,你循环遍历这些行

for line in reversed(range(h)):

在该循环中,line取值6,5,4等

对于每一行,您必须遍历整个横向数组,以确定每列是否要打印空格或#'#,取决于横向列的值( v)和当前line

for v in self.landscape:
    self.image += ' ' if line >= v else '#'

完整的计划:

class Reservoir:
    def __init__(self, landscape):
        self.landscape = landscape

        h = max(landscape)

        self.image = ''
        for line in reversed(range(h)):
            for v in self.landscape:
                self.image += ' ' if line >= v else '#'
            self.image += '\n'

landscape = [4, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 5, 6, 5, 2, 2, 2, 3, 3, 3, 4, 5, 3, 2, 2]
lake = Reservoir(landscape)
print(lake.image)

结果:

                 #            
                ###       #   
#               ###      ##   
##              ###   ######  
####           ###############
######       #################