我使用以下代码输出了意外的输出:
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
当我运行代码时,问题是:
当我测试代码时,问题得到了保证。为了测试代码,我分配了N = 1,并看到了以下输出:
( - 1,0,1)这应该是第一步,但它需要多个步骤(x-1和z + 1),这怎么可能发生?
( - 2,0,1)步数变量(N)= 1但这是第二个输出,为什么显示? 感谢您的帮助
答案 0 :(得分:3)
N是30,所以count从0到30.由于30&lt; = 30,你将运行循环count = 0,1,...,29和30这是31次
当您迈出一步时,您无法确保不采取其他步骤。如果发生随机,你可以输入第二个或第三个,如果已经在同一个循环迭代中的前一个之后
答案 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