我有以下代码的意外输出:
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,但这是第二个输出,为什么显示它?谢谢你的帮助
-
N为30,所以计数从0到30。因为30 <= 30,你将运行循环for count= 0,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