Python循环绘制点数问题:掷骰子指数衰减绘图逻辑故障
分析与修正:掷骰子指数衰减可视化异常问题
我看你在做掷骰子的指数衰减点数可视化时碰到了异常,先帮你梳理下——这大概率是代码里的绘图逻辑疏漏,不是绘图系统的故障哦~
先看你给出的截断代码
import math import numpy as np import matplotlib.pyplot as plt import random N = int(input('Enter Total Number Of Dice: ')) S = int(input('Enter Number of Sides on Each Dice: ')) xval = [] yval = [] count = 0 max1 = N xval.append(0) yval.append(N) numOfTurns = 1 while(N != 0): for i in range(0, N): x = random.randint(1 , S) count = 0 if(N == max1 / 2): plt.axvline(numOfTur...
代码里的核心问题
- 代码截断:
plt.axvline(numOfTur...没写完,这会直接导致语法错误,程序根本跑不起来 - 条件判断失效:
if(N == max1 / 2)这个逻辑有问题——如果初始骰子数max1是奇数,max1/2是小数,而N是整数,这个条件永远不会触发;就算是偶数,也可能因为N的变化跳过这个值(比如一次移除多个骰子) - 数据收集不完整:你只在开头给
xval和yval加了初始值,但循环里没有持续记录每一轮的numOfTurns和当前N,最后绘图时没有足够的数据点 - 循环逻辑缺失:代码里没有处理掷骰子后
N的更新规则(比如是不是掷出1就移除这个骰子?),没有N的变化的话,while(N != 0)会无限循环
修正后的示例代码
假设你的规则是:每轮掷所有剩余骰子,掷出1的骰子被移除,记录每轮剩余的骰子数,同时在剩余骰子数降到初始一半时画一条竖线,最终绘制衰减曲线:
import matplotlib.pyplot as plt import random # 获取输入 N = int(input('Enter Total Number Of Dice: ')) S = int(input('Enter Number of Sides on Each Dice: ')) # 初始化数据存储 xval = [0] # 轮次,0是初始状态 yval = [N] # 对应轮次的剩余骰子数 max_dice = N num_of_turns = 1 half_mark_drawn = False # 标记是否已经画过半值竖线 # 模拟掷骰子过程 while N > 0: removed = 0 # 遍历当前所有骰子 for _ in range(N): roll = random.randint(1, S) # 假设掷出1就移除这个骰子 if roll == 1: removed += 1 # 更新剩余骰子数 N -= removed # 记录当前轮次的数据 xval.append(num_of_turns) yval.append(N) # 修正条件判断:用小于等于代替等于,避免错过触发时机,且只画一次 if not half_mark_drawn and N <= max_dice / 2: plt.axvline(x=num_of_turns, color='r', linestyle='--', label='Half Dice Remaining') half_mark_drawn = True num_of_turns += 1 # 绘制衰减曲线 plt.plot(xval, yval, marker='o', linestyle='-', label='Remaining Dice') plt.xlabel('Number of Turns') plt.ylabel('Remaining Dice Count') plt.title('Dice Roll Exponential Decay') plt.legend() plt.grid(True) plt.show()
关键修改说明
- 补全了骰子移除逻辑:明确每轮统计被移除的骰子数,更新
N的值,让循环能正常结束 - 完善数据收集:每轮结束后把当前轮次和剩余骰子数加入
xval和yval,保证绘图有完整的曲线数据 - 修正竖线触发逻辑:用
N <= max_dice / 2代替等于,同时加了half_mark_drawn标记确保只画一次竖线,避免重复触发 - 补全了完整绘图流程:添加了坐标轴标签、标题、图例和网格,让可视化更清晰直观
内容的提问来源于stack exchange,提问作者Wow Facts Wrong
相关产品推荐
相关产品推荐

