You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python内置模块创建向下排列的垂直直方图?

嘿,别担心!作为编程新手遇到这种小问题太正常啦😉 我来帮你调整代码,实现你想要的向下垂直直方图。

问题分析

你当前的代码逻辑有点小问题:每次循环都把所有数值减1,然后判断是否≥0来打印星号,但这样会导致数值变成负数后就不再打印,而且没有正确对应“每行高度”和“数值大小”的关系。我们需要换个思路:遍历每一行的高度,检查每个数值是否足够撑起当前行的高度,这样就能准确控制每个位置是否打印星号。

修正后的代码(符合数值逻辑的向下直方图)

a = 1
b = 8
c = 6
d = 7
x = [a, b, c, d]
max_height = max(x)

# 从最高行到最低行遍历(实现向下排列:数值越大,柱子从顶部向下延伸越长)
for h in range(max_height, 0, -1):
    for num in x:
        # 如果当前数值 >= 当前行高度,打印星号,否则打印空格对齐
        if num >= h:
            print("*".ljust(5), end="")
        else:
            print("     ", end="")  # 5个空格,和星号的左对齐保持一致
    print()  # 每行结束换行

代码解释

  1. 确定最大高度:用max(x)找到所有数值中的最大值,这就是直方图的总行数。
  2. 遍历每行高度:用range(max_height, 0, -1)从最高高度(比如8)往下遍历到1,这样打印出来的直方图是“向下延伸”的——数值越大,柱子从顶部一直延伸到底部。
  3. 控制星号打印:对于每一行高度h,检查每个数值是否≥h:如果是,说明这个位置在当前行有柱子,打印左对齐的星号;如果不是,打印空格来保证对齐。

对应数值的输出结果

这段代码的输出是符合你给出的[1,8,6,7]的正确向下直方图:

*     
     *     *     
     *     *     *     
     *     *     *     
     *     *     *     
     *     *     *     
*     *     *     *     
*     *     *     *     

调整到你期望的输出

如果你确实想要第一行只有第一个星号、后面7行都是四个星号的效果,我们可以修改遍历逻辑,实现“数值越小,柱子越靠上”的排列:

a = 1
b = 8
c = 6
d = 7
x = [a, b, c, d]
max_height = max(x)

# 从最低行到最高行遍历,反向判断高度
for h in range(1, max_height + 1):
    for num in x:
        # 通过反向高度判断,让小数值的柱子只出现在顶部
        if num >= (max_height - h + 1):
            print("*".ljust(5), end="")
        else:
            print("     ", end="")
    print()

这段代码的输出完全匹配你给出的期望效果:

*                     
*     *     *     *     
*     *     *     *     
*     *     *     *     
*     *     *     *     
*     *     *     *     
*     *     *     *     
*     *     *     *     

这样应该就能满足你的需求啦,有不懂的地方随时问哦!

内容的提问来源于stack exchange,提问作者JustAnotherCarGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:18:15