2016-09-20 71 views
-2

我有以下代码意想不到输出:这个随机行走代码里面的错误是什么?

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点的坐标,比步数1以上(N )变量。
  • 1步骤的每次迭代应该只需要1步,但有时需要多个步骤。

当我测试代码时,问题得到了保证。要测试的代码,我分配N = 1,看见下面的输出:

  • (-1,0,1)这应该是初始步骤,但它采取多个步骤(包括X-1和z + 1),这怎么会发生?

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

+1

你逐行调试器会回答这一切与沉着。 – Bathsheba

+4

http://stackoverflow.com/questions/39587461/random-walks-weird-outcome-in-python-3你的代码看起来很相似,这可能是为一组学生留下的一些任务吗?只是问,因为这几分钟前刚发布。 –

回答

3
  1. N是30,所以计数从0到30,因为30 < = 30将运行回路数= 0,1,...,29和30这是31倍

  2. 当你采取措施时,你不确保不采取另一个步骤。如果随机发生的,你可以如果前一个已经是在同一个循环迭代

-1

您将两个整数这只会造成另一个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 n < 1.0/3 
+0

划分两个整数只是Python 2中的一个整数。在Python 3中,整数之间的“真分度”(使用'/'运算符)给出了一个'float'。这个问题没有用Python版本标记,但print函数调用使它看起来像Python 3。 – Blckknght