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 |
* * * *
* * * *
* * * *
* *
*