这个随机行走代码里面有什么错误



我有以下代码的意外输出:

import random
N = 30  # number of steps
n = random.random()  # generate a random number
x = 0
y = 0
z = 0
count = 0 
while count <= N:
if n < 1/3:
    x = x + 1           # move east
    n = random.random() # generate a new random number
if n >= 1/3 and n < 2/3:
    y = y + 1           # move north
    n = random.random() # generate a new random number
if n >= 2/3:
    z = z + 1           # move up
    n = random.random() # generate a new random number

print("(%d,%d,%d)" % (x,y,z))
count = count + 1

当我运行代码时,问题是:

  • 代码输出显示31个坐标,比步数(N)变量多1个。
  • 每一步的迭代应该只需要一步,但有时需要多个步骤。

当我测试代码时,问题是确定的。为了测试代码,我将N = 1赋值,并看到以下输出:

  • (-1,0,1)这应该是初始步骤,但它需要多个步骤(x-1和z+1),这是怎么发生的?

  • (-2,0,1)阶跃变量(N)的个数= 1,但这是第二个输出,为什么显示它?谢谢你的帮助

  1. N为30,所以计数从0到30。因为30 <= 30,你将运行循环for count= 0,1,…

  2. 当你迈出一步时,你不能确保另一步不会被采取。如果随机发生,你可以进入第二个或第三个如果已经在同一循环迭代的前一个

两个整型数相除只会得到另一个整型数。所以基本上你的代码是这样做的:

if n < 0:
    x = x + 1           # move east
    n = random.random() # generate a new random number
if n >= 0 and n < 1:
    y = y + 1           # move north
    n = random.random() # generate a new random number
if n >= 1:
    z = z + 1           # move up
    n = random.random()
通过将每个if行更改为包含一个浮点数 来修复

if n < 1.0/3

相关内容

最新更新