Python计算轮渡收入R的可能值:代码缺失预期值问题排查
轮渡收入计算问题排查与修正
问题背景
现有一艘可搭载轿车(X)和露营车(Y)的轮渡,单次航行成本约10美元,轿车轮渡费3美元,露营车9美元。不同X、Y取值对应的概率如下表:
| x | y=0 | y=1 | y=2 |
|---|---|---|---|
| 0 | 0.01 | 0.01 | 0.03 |
| 1 | 0.03 | 0.08 | 0.07 |
| 2 | 0.03 | 0.06 | 0.06 |
| 3 | 0.07 | 0.07 | 0.13 |
| 4 | 0.12 | 0.04 | 0.03 |
| 5 | 0.08 | 0.07 | 0.01 |
轮渡收入公式为 R = 3X + 9Y,需要找出R的所有可能取值及对应概率。已知X、Y共有18种组合,但编写的Python函数无法生成所有预期R值。
现有代码
combos = [] def problem_three(): for x in range(0,5): for y in range(0,2): rev = (3*int(x) + 9*int(y)) combos.append(rev) return combos revenue = problem_three() print(revenue)
该代码返回 [0, 9, 3, 12, 6, 15, 9, 18, 12, 21],缺少部分预期值。
问题原因
代码存在三个关键错误:
- 循环范围不完整:
- X的合法取值是0到5(包含5),但代码中
range(0,5)仅生成0-4,漏掉了x=5的情况。 - Y的合法取值是0到2(包含2),但代码中
range(0,2)仅生成0-1,漏掉了y=2的情况。
- X的合法取值是0到5(包含5),但代码中
- 缩进错误:
combos.append(rev)语句没有嵌套在内层循环中,导致仅会在两层循环结束后添加最后一次计算的结果(原代码实际运行只会得到[21],推测用户输入时缩进有误,但即便缩进正确,循环范围的问题仍会导致缺失值)。
- 全局变量使用不规范:
- 全局列表
combos会导致函数多次调用时出现数据累积问题,不符合函数封装的最佳实践。
- 全局列表
修正方案
基础修正(生成所有R值)
调整循环范围,修正缩进,并将列表初始化移至函数内部:
def problem_three(): combos = [] # X覆盖0-5,使用range(0,6)(左闭右开特性) for x in range(0, 6): # Y覆盖0-2,使用range(0,3) for y in range(0, 3): rev = 3 * x + 9 * y combos.append(rev) return combos revenue = problem_three() print(revenue)
执行后将生成全部18种组合对应的R值:[0, 9, 18, 3, 12, 21, 6, 15, 24, 9, 18, 27, 12, 21, 30, 15, 24, 33]
进阶扩展(计算每个R值的对应概率)
如果需要统计每个R值的总概率,可以基于概率表进一步处理:
# 定义X、Y对应的二维概率表 prob_table = [ [0.01, 0.01, 0.03], [0.03, 0.08, 0.07], [0.03, 0.06, 0.06], [0.07, 0.07, 0.13], [0.12, 0.04, 0.03], [0.08, 0.07, 0.01] ] def calculate_revenue_probs(): rev_probs = {} for x in range(6): for y in range(3): rev = 3 * x + 9 * y prob = prob_table[x][y] # 累加相同R值的概率 rev_probs[rev] = rev_probs.get(rev, 0) + prob # 按R值从小到大排序 return sorted(rev_probs.items()) # 输出结果 for rev, prob in calculate_revenue_probs(): print(f"收入R={rev},概率={prob}")
执行后输出:
收入R=0,概率=0.01 收入R=3,概率=0.03 收入R=6,概率=0.03 收入R=9,概率=0.16 收入R=12,概率=0.19 收入R=15,概率=0.15 收入R=18,概率=0.17 收入R=21,概率=0.11 收入R=24,概率=0.08 收入R=27,概率=0.13 收入R=30,概率=0.03 收入R=33,概率=0.01
内容的提问来源于stack exchange,提问作者Brock
相关产品推荐
相关产品推荐

