为何Python楼层模拟函数返回全0而非随机数?
问题分析与修复方案
我来帮你找出代码的问题并完成修复!你的函数返回全0列表的核心原因是没有将楼层计算的结果重新赋值给变量f,另外还有几处语法和逻辑细节需要调整,具体梳理如下:
主要错误点
- 未更新
f的实际值:比如f-1只是执行了减法运算,但没有把运算结果存回f,导致f一直保持初始的0值。正确写法应该是f = f - 1或者简写f -= 1,同理f+1和f + randint(1,6)都需要赋值操作。 - 条件判断逻辑不严谨:
if numb is 1 or 2不符合Python的逻辑判断规则,应该明确判断numb等于1或等于2;同时is用于判断对象同一性,判断数值相等应该用==,用in关键字会更简洁。 - 缺少随机函数的导入:代码里用到了
randint,但没有导入random模块,这会导致运行报错。
修正后的代码
from random import randint def roll(): f = 0 arry = [] count = 0 # 用count < 100比判断is not更直观,避免count出现非预期值的问题 while count < 100: numb = randint(1,6) if numb in (1, 2): # 简洁判断numb是1或2 f -= 1 # 等价于f = f -1,更新楼层值 elif numb in (3, 4, 5): f += 1 # 更新楼层值 else: # numb等于6的情况 f += randint(1,6) # 随机加1-6层,同时赋值给f count += 1 arry.append(f) return arry
效果验证
调用这个函数后,你会得到一个长度为100的列表,每个元素都是根据随机数计算出的楼层变化值,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Tarun Murugan
相关产品推荐
相关产品推荐

