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

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

  • (-1,0,1) 这应该是最初的步骤,但它采取了多个步骤(x-1 和 z+1),怎么会发生这种情况?

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

4

2 回答 2

3
  1. N 为 30,因此 count 从 0 变为 30。由于 30 <= 30,您将运行 count=0, 1, ..., 29 AND 30 的循环,即 31 次

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

于 2016-09-20T07:07:14.963 回答
-1

您正在划分两个整数,这只会导致另一个整数。所以基本上你的代码是执行以下操作:

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
于 2016-09-20T07:07:49.507 回答