这个随机行走代码里面的错误是什么?
问题描述:
我有以下代码意想不到输出:这个随机行走代码里面的错误是什么?
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但是这是第二个输出,为什么显示? 感谢您的帮助
答
N是30,所以计数从0到30,因为30 < = 30将运行回路数= 0,1,...,29和30这是31倍
当你采取措施时,你不确保不采取另一个步骤。如果随机发生的,你可以如果前一个已经是在同一个循环迭代
答
您将两个整数这只会造成另一个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
你逐行调试器会回答这一切与沉着。 – Bathsheba
http://*.com/questions/39587461/random-walks-weird-outcome-in-python-3你的代码看起来很相似,这可能是为一组学生留下的一些任务吗?只是问,因为这几分钟前刚发布。 –