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

如何使用Python列表将双骰子模拟结果输出为垂直条形图

双骰子投掷垂直条形图实现方案

完整可运行代码

import random
from itertools import zip_longest

# 获取用户输入投掷次数
n = int(input('enter how many times: '))
# 初始化频次列表,索引0对应点数和为2,索引10对应点数和为12
freq = [0] * 11

# 模拟投掷过程,修正原代码少执行1次的问题
for _ in range(n):
    x = random.randint(1, 6)
    y = random.randint(1, 6)
    sum_val = x + y
    freq[sum_val - 2] += 1

# 生成每个点数对应的星号条,每个星号加空格保证列对齐
bars = []
for count in freq:
    bars.append(['* '] * count)

# 用zip_longest对齐所有星号条,空缺位置填充等长空格
# 倒序遍历行实现从上到下的垂直显示
for line in reversed(list(zip_longest(*bars, fillvalue='  '))):
    print(''.join(line))

# 打印底部刻度
print('2 3 4 5 6 7 8 9 10 11 12')

实现逻辑

  • 优化原代码冗余的多列表存储逻辑,用单频次列表统计11种点数和的出现次数,避免大量重复判断
  • 每个星号后带空格,保证各列宽度一致,避免条形错位
  • 调用zip_longest将不同长度的星号列表按最长频次对齐,空缺位置填充2个空格(和* 长度匹配)
  • 倒序遍历对齐后的行,实现从顶部高值到底部低值的垂直条形显示,最后输出对齐的底部刻度

输出示例(输入100时)

*         
      *         
      *         
      *  *      
      *  *      
   *  *  *      
   *  *  *  *   
   *  *  *  *   
*  *  *  *  *  *
*  *  *  *  *  *  *
*  *  *  *  *  *  *  *
*  *  *  *  *  *  *  *  *
*  *  *  *  *  *  *  *  *  *
*  *  *  *  *  *  *  *  *  *  *
2 3 4 5 6 7 8 9 10 11 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:15:00