¿El extraño resultado de la caminata aleatoria en Python 3?
Acabo de comenzar a aprender Python y tengo un problema para imprimir una nueva ubicación de caminata aleatoria en 3 dimensiones. No aparece ningún error, pero es obvio que la salida (x, y, z) que se imprime no es razonable. Al simular una caminata aleatoria paso a paso, supongo que solo se debe cambiar un valor en (x, y, z) cada vez. Pero parece que no en la salida. Estoy tratando de depurarlo, pero sigo confundido acerca de identificar cuál es el verdadero problema.
Las líneas principales de la salida:
(0,-1,1)
(-1,0,1)
(-2,0,1)
(-2,1,2)
(-2,2,2)
(-2,2,3)
(-1,2,3)
(0,1,3)
Mi motivación:
El propósito de este código es simular N pasos de una caminata aleatoria en 3 dimensiones. En cada paso, se elige una dirección aleatoria (norte, sur, este, oeste, arriba, abajo) y se toma un paso de tamaño 1 en esa dirección. Luego se imprime la nueva ubicación. La ubicación inicial es el origen (0, 0, 0).
Mi código:
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))
Ambiente:
Python 3.5 en Jupyter Notebook, Windows 10, Dell XPS 13