Python 3.x - 使用表示整数的符号创建垂直列表



python新手,想知道是否有人可以帮助我解决我面临的这个问题。 我能够打印一个水平显示信息的列表,但是当我尝试创建垂直列表时,我似乎无法实现它或找到任何其他可以指导我完成类似情况的帮助。

cat1 = 4
cat2 = 3
cat3 = 5
cat4 = 3
print(" 0 to 29:   ", end=" ")
for i in range(cat1):
print("*", end=" ")
else:
print("n 30 to 39:  ", end=" ")
for i in range(cat2):
print("*", end=" ")
else:
print("n 40 to 69:  ", end=" ")
for i in range(cat3):
print("*", end=" ")
else:
print("n 70 to 100: ", end=" ")
for i in range(cat4):
print("*", end=" ")
break
This outputs: 
0 to 29:   * * * *
30 to 39:  * * *
40 to 69:  * * * * *
70 to 100: * * *
What I am trying to do is:
| 0 to 29 | 30 to 39 | 40 to 69 | 70 to 100 |
*          *          *         *
*          *          *         *
*          *          *         *
*                     *         
*         

任何帮助将不胜感激! 谢谢!

此代码片段将生成所需的输出:

cats = [cat1, cat2, cat3, cat4]
print('| 0 to 29 | 30 to 39 | 40 to 69 | 70 to 100 |')
for i in range(max(cats)):
c1, c2, c3, c4 = ['*' if i < cat else ' ' for cat in cats]
print('    {}          {}          {}          {}'.format(c1, c2, c3, c4))

如果需要,您可以调整{}缩进星号之间的间距量

编辑:正如@Bram Vanroy指出的那样,我的for循环可以改进为使用print('' + ''.join(['*' if i < cat else ' ' for cat in cats]))而不是我的两行,将代码减少到。

cats = [cat1, cat2, cat3, cat4]
print('| 0 to 29 | 30 to 39 | 40 to 69 | 70 to 100 |')
for i in range(max(cats)):
print('    ' + '          '.join(['*' if i < cat else ' ' for cat in cats]))

在这里,它将适用于python 3.6及更高版本

cat_dict = {'0 to 29': 4, '30 to 39': 3, '40 to 69': 5, '70 to 100': 3}
print(' | '.join(cat_dict.keys()))
for i in range(max(cat_dict.values()) + 1):
for v in cat_dict.values():
print(f'   {"*" if i < v else " "}       ', end = '')
print('n')

对于 Python 2.7,您可以使用以下内容

cat_dict = {'0 to 29': 4, '30 to 39': 3, '40 to 69': 5, '70 to 100': 3}
print(' | '.join(cat_dict.keys()))
for i in range(max(cat_dict.values()) + 1):
for v in cat_dict.values():
print('   {0}       '.format("*" if i < v else " "), end = '')
print('n')

这就是我格式化的方式

cats_stats = {
"cat1": 4,
"cat2": 3,
"cat3": 5,
"cat4": 3
}

print("|   0 to 29   |   30 to 39   |   40 to 69   |   70 to 100   |")
max_cats = max(cats_stats.values())
for row in range(max_cats):
line = ""
for cats in cats_stats.values():
if cats <= row:
line += "               "
else:
line += "       *       "
print(line)

输出:

|   0 to 29   |   30 to 39   |   40 to 69   |   70 to 100   |
*              *              *              *       
*              *              *              *       
*              *              *              *       
*                             *                      
*                      

最新更新