python - 动态网格创建
问题描述
我正在尝试在 python 中制作一个二维网格。网格的大小可以变化,但最大的可能是 20 X 20,并且给定列表的内容应打印在每个单元格内,每个单元格的宽度为 4 个字段空间。最左边的单元格中的内容应该左居中,最远的单元格中的内容应该右居中,其余的应该在单元格内居中这是我的代码:
def first(a):
print('+', end = ' ')
for i in range(a-1):
print('%4s%s' %('-','+'), end = ' ')
print('%4s%s' %('-','+'))
def second(list_):
for index in list_:
print('|', end = ' ')
for num in index:
print('%s%d%2s|' %('', num, ''), end = ' ')
print('%4s|' %(''))
def create_(a,b,list_):
first(a)
for i in range(b):
second(list_)
first(a)
list_ = [[1,2,3],[4,5,6],[7,8,9]]
create_(3,3,list_)
The output of the code is:
+ -+ -+ -+ -+
| 1 | 2 | 3 | |
| 4 | 5 | 6 | |
| 7 | 8 | 9 | |
.... (this is because it repeats 4 more times)
+ -+ -+ -+ -+
| 1 | 2 | 3 | |
| 4 | 5 | 6 | |
| 7 | 8 | 9 | |
+ -+ -+ -+ -+
And the output that I want is
+----------------+
|1 | 2 | 3|
+----+-----+-----+
|4 | 5 | 6|
+----+-----+-----+
|7 | 8 | 9|
+----------------+
我的问题显然是,我的输出不一样,但我如何才能更动态地编码它,无论给出多少列或行,它都会产生预期的网格,我已经硬编码了一些东西来获得我的输出不要认为这是最好的方法。
解决方案
尝试这个:
def get_row_split(inner_list_):
return '+' + '+'.join('-' * 5 for _ in inner_list_) + '+' + '\n'
def get_row(inner_list_):
cells = []
for i, _ in enumerate(inner_list_):
if i == 0:
cell = "{} "
elif i + 1 == len(inner_list_):
cell = " {}"
else:
cell = " {} "
cells.append(cell)
return '|' + '|'.join(
cell.format(str(item)) for cell, item in zip(cells, inner_list_)
) + '|' + '\n'
def main():
list_ = [[1,2,3,4],[4,5,6,6],[7,8,9,8]]
output = ""
for inner_list_ in list_:
output += get_row_split(inner_list_ = inner_list_)
output += get_row(inner_list_ = inner_list_)
output += get_row_split(inner_list_ = inner_list_)
print(output)
if __name__ == "__main__":
main()
输出:
+-----+-----+-----+-----+
|1 | 2 | 3 | 4|
+-----+-----+-----+-----+
|4 | 5 | 6 | 6|
+-----+-----+-----+-----+
|7 | 8 | 9 | 8|
+-----+-----+-----+-----+
唯一的问题是,如果数字是两位数或更多位数,这将中断。不确定是否有办法解决这个问题。
推荐阅读
- sql - 将财务期间计算到临时表中
- postgresql - 如何使用sql命令将表数据导出到postgresql中的文件
- android - 如何使用 android volley 基本身份验证发送请求?
- android - Android Studio:编译失败:org.gradle.internal.exceptions.LocationAwareException
- elasticsearch - Kibana 得到这个,parsing_exception : [multi_match] unknown token [START_OBJECT] after [query] error
- angularjs - 在 ng-repeat angularjs 中使用文本字段
- thymeleaf - Thymeleaf 静态导入 java 包
- git - 合并:被相似性索引击中错误 - 如何修复?
- c# - 为什么此字符串未绑定到 ASP.NET .Core API 操作中的文件名参数?
- reactjs - 反应 onChange 陷入无限循环