我正在尝试在提供的列表周围打印“#”边框,并且到目前为止设法获得正确的长度。但是有条件会打印'。'在右侧的行中,“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#
######
答案 0 :(得分: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))
答案 1 :(得分:0)
编辑:为' 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...
########
较短的列表将用空格填充。