【问题标题】:Function: Print border around list功能:在列表周围打印边框
【发布时间】:2017-03-12 10:59:45
【问题描述】:

我正在尝试在提供的列表周围打印一个“#”边框,并且到目前为止设法获得了正确的长度。但是有一个条件,它会打印一个'。在右侧的行中,“A”将作为“开头”出现在列表中的第一个位置。我如何创造一个条件来正确打印它?

我也会将此函数用于其他不同长度的列表。

我拥有的代码:

area0   =   [['.', 'A', 'A', '.', '.', '.'],['.', '.', '.', '.', '.',]]
def show_locale(area):
    count = len(area) + 4 
    mark = "#"*count 
    return "#{mark}#\n# {area} \n#{mark}#".format(mark=mark,area=area)
show_locale(area0)

我要打印的内容:

print(show_lot(lot0))
########
#.AA....
#......#
########

示例 2:

print(show_lot(lot3))
######
#...f#
#AA.e.
#...f#
#.XXX#
#....#
#.yZZ#
######

【问题讨论】:

  • 您可以只检查每行的长度并附加“。”或相应的“#”。还是我错过了什么?你能分享更多的例子吗?
  • 添加了另一个打印示例。

标签: python python-3.x format output-formatting


【解决方案1】:
  • 首先,count 不正确。您在计算行数,应该计算列数。
  • 其次,您必须使用str.join 将列表转换为字符串
  • 第三,我在列表理解中的三元表达式中编码的结尾有一个条件:如果该行包含A,它“打开”结尾,否则它以#结尾。不确定它是否涵盖所有情况...

编辑:将条件更改为:如果所有点,则以 # 结尾,否则保持“打开”。

这就是您想要的(行的长度由黑客 ATM 处理,您提供的示例不完整)

area0   =   [['.', 'A', 'A', '.', '.', '.'],['.', '.', '.', '.', '.',]]
def show_locale(area):
    count = len(area[0]) + 2
    mark = "#"*count
    ##return "\n".join([mark]+["".join(['#']+a+['.' if 'A' in a else '.#']) for a in area0]+[mark])
    return "\n".join([mark]+["".join(['#']+a+['.#' if all(x=='.' for x in a) else '.']) for a in area0]+[mark])
print(show_locale(area0))

【讨论】:

    【解决方案2】:

    编辑:添加“A”出现在列表第一个位置的条件

    这是另一种解决方案,适用于不同长度的列表。

    area0   =   [['.', 'A', 'A', '.', '.', '.'],['.', '.', '.', '.', '.',], ['A', '.', '.', '.',]]
    
    def print_box(l):
        max_len = 0
        for i in l:
            max_len = max(max_len, len(i))
        print("#" * (max_len+2))
        for i in l:
            if i[0] == 'A':
                # Print an open end
                print("#{}".format("".join(i).ljust(max_len, " ")))
            else:
                print("#{}#".format("".join(i).ljust(max_len, " ")))
        print("#" * (max_len+2))
    
    print_box(area0)
    

    输出

    ########
    #.AA...#
    #..... #
    #A...  
    ########
    

    较短的列表将用空格填充。

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2017-01-25
      • 2018-08-17
      相关资源
      最近更新 更多