随机游走';python 3中的奇怪结果是什么?
我刚开始学习python,但在打印三维随机行走的新位置时遇到了一个问题。没有出现错误,但是很明显,正在打印的输出(x,y,z)是不合理的!当一步一步地模拟随机游动时,我假设每次只改变(x,y,z)中的一个值。但它似乎不在输出中。我正在试着调试它,但仍然不知道真正的问题是什么 输出的标题行:随机游走';python 3中的奇怪结果是什么?,python,random,Python,Random,我刚开始学习python,但在打印三维随机行走的新位置时遇到了一个问题。没有出现错误,但是很明显,正在打印的输出(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) 我的动机: 这段代码的目的是模拟一个随机游动的N步 尺寸。在每个
(0,-1,1)
(-1,0,1)
(-2,0,1)
(-2,1,2)
(-2,2,2)
(-2,2,3)
(-1,2,3)
(0,1,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))
导入pdb
导入随机数#这有助于我们生成随机数
N=30#步数
n=random.random()#生成一个随机数
x=0
y=0
z=0
计数=0
当计数=1/6且n<2/6时:
y=y+1#向北移动
n=random.random()#生成一个新的随机数
如果n>=2/6且n<3/6:
z=z+1#向上移动
n=random.random()#生成一个新的随机数
如果n>=3/6且n<4/6:
x=x-1#向西移动
n=random.random()#生成一个新的随机数
如果n>=4/6且n<5/6:
y=y-1#向南移动
n=random.random()#生成一个新的随机数
如果n>=5/6:
z=z-1#向下移动
n=random.random()#生成一个新的随机数
打印((%d,%d,%d)“%(x,y,z))
计数=计数+1
打印(“平方距离=%d”%(x*x+y*y+z*z))
环境:
在Jupyter笔记本电脑、Windows 10、Dell XPS 13中的Python 3.5中,您可以在每个
测试中将n
设置为一个新的随机数,如果测试:
我还切换到使用for
循环范围()
,这样就不必手动增加和测试计数
这可以通过使用列表存储方向来进一步简化,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))
请注意,n>=2/6和n<3/6
可以拼写2/6%pos
应该是%tuple(pos)
,否则我会得到一个类型错误,因为格式化不会解压缩列表或直接打印元组:-)
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))
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))