这个随机行走代码中有哪些错误?

时间:2016-09-20 07:00:59

标签: python debugging random-walk

我使用以下代码输出了意外的输出:

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个。
  • 1步的每次迭代应该只需要1步,但有时需要多个步骤。

当我测试代码时,问题得到了保证。为了测试代码,我分配了N = 1,并看到了以下输出:

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

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

2 个答案:

答案 0 :(得分:3)

  1. N是30,所以count从0到30.由于30&lt; = 30,你将运行循环count = 0,1,...,29和30这是31次

  2. 当您迈出一步时,您无法确保不采取其他步骤。如果发生随机,你可以输入第二个或第三个,如果已经在同一个循环迭代中的前一个之后

答案 1 :(得分:-1)

你要划分两个int,这只会导致另一个int。所以基本上你的代码执行以下操作:

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