我刚刚开始学习python并且有问题要在3维中打印随机漫步的新位置。弹出没有错误,但很明显,打印的输出(x,y,z)是不合理的!当逐步模拟随机游走时,我假设每次都应该改变(x,y,z)中的一个值。但它似乎不在输出中。我试图调试它,但仍然困惑于确定真正的问题是什么。
输出的标题:
(0,-1,1)
(-1,0,1)
(-2,0,1)
(-2,1,2)
(-2,2,2)
(-2,2,3)
(-1,2,3)
(0,1,3)
我的动机:
此代码的目的是模拟3中随机游走的N个步骤 尺寸。在每个步骤中,选择随机方向(北,南,东,西,上,下),并且在该方向上采取尺寸为1的步骤。然后打印新位置。起始位置是原点(0,0,0)。
我的代码:
import pdb
import random # this helps us generate random numbers
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/6:
x = x + 1 # move east
n = random.random() # generate a new random number
if n >= 1/6 and n < 2/6:
y = y + 1 # move north
n = random.random() # generate a new random number
if n >= 2/6 and n < 3/6:
z = z + 1 # move up
n = random.random() # generate a new random number
if n >= 3/6 and n < 4/6:
x = x - 1 # move west
n = random.random() # generate a new random number
if n >= 4/6 and n < 5/6:
y = y - 1 # move south
n = random.random() # generate a new random number
if n >= 5/6:
z = z - 1 # move down
n = random.random() # generate a new random number
print("(%d,%d,%d)" % (x,y,z))
count = count + 1
print("squared distance = %d" % (x*x + y*y + z*z))
环境:
Jupyter Notebook,Windows 10,Dell XPS 13中的Python 3.5
答案 0 :(得分:2)
您在{em>每n
次测试中将if
设置为新的随机数:
if n < 1/6:
x = x + 1 # move east
n = random.random() # generate a new random number
这意味着下一个 if
测试也可以匹配新的n
,每步为您提供多个更改。
将n = random.random()
步骤移动到循环的 top ,每步只生成一次。您可能也希望使用elif
以避免进行太多测试:
N = 30 # number of steps
x = 0
y = 0
z = 0
for count in range(N):
n = random.random() # generate a new random number
if n < 1/6:
x = x + 1 # move east
elif n < 2/6:
y = y + 1 # move north
elif n < 3/6:
z = z + 1 # move up
elif n < 4/6:
x = x - 1 # move west
elif n < 5/6:
y = y - 1 # move south
else:
z = z - 1 # move down
print("(%d,%d,%d)" % (x,y,z))
我还改为在for
上使用range()
循环,因此您无需手动增加和测试count
。
这可以通过使用列表来存储路线,random.range()
随机选择该列表中的索引,以及random.choice()
来选择指向改变步骤:
N = 30 # number of steps
pos = [0, 0, 0]
for count in range(N):
index = random.randrange(3) # generate a new random index
change = random.choice([-1, 1])
pos[index] += change
print(tuple(pos))