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

为何我的随机游走代码仅按特定方式编写才生效?

硬币抛掷随机游走计数问题解析

你想要模拟硬币抛掷的随机游走过程,记录每次抛掷后累计的反面(tails)出现次数,但第一段代码未能实现预期的累加效果,第二段代码则正常工作,核心差异在于变量更新的逻辑。

错误代码示例

tails = [0]
preceding_tails = tails[-1]

for x in range (10):
    coin = np.random.randint(0,2)
    if coin == 0:
        tails.append(preceding_tails)
    else: 
       new_tails = preceding_tails + 1
       tails.append(new_tails)

print(tails)

示例输出:[0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0]

正确代码示例

tails = [0]
preceding_tails = tails[-1]

for x in range (10):
    coin = np.random.randint(0,2)
    if coin == 0:
        tails.append(preceding_tails)
    else: 
       preceding_tails = preceding_tails + 1
       tails.append(preceding_tails)

print(tails)

示例输出:[0, 0, 1, 2, 3, 3, 3, 4, 4, 4, 5]

问题根源解析

你的猜测完全正确,问题核心是**preceding_tails变量从未被更新**:

  • 在错误代码中,preceding_tails初始值为0(取自列表第一个元素),之后就再也没被修改过。每次遇到反面时,你只是计算了new_tails = preceding_tails +1并添加到列表,但preceding_tails本身始终保持初始的0值。这就导致每次加1后只能得到1,永远无法实现累计递增。
  • 而在正确代码中,遇到反面时会先更新preceding_tails本身,把它的值加1,再将更新后的变量值添加到列表。这样每次循环时,preceding_tails都会保存最新的累计反面次数,下一次遇到反面时就能基于这个最新值继续累加,自然实现了持续递增的效果。

说白了,错误代码只把累加结果存进了列表,但没同步更新用来追踪当前累计数的变量;正确代码则同时更新了变量和列表,确保后续循环能基于最新状态计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:30:54