Une Simple Marche Aléatoire De La Simulation À L'Aide De Python(En Deux Dimensions)

J'essaie de résoudre en deux dimensions, la marche aléatoire problème du livre, en explorant python.
Mais, je ne pouvais pas imaginer comment puis-je résoudre ce problème.J'ai fait quelques recherches mais ceux-ci étaient trop compliqués à comprendre de quoi il s'agit. Je suis un débutant de l'apprenant. Donc, je ne comprends pas le code par la recherche. Merci de m'expliquer ce problème dans les détails.

De toute façon, la question est:

Les deux dimensions de la variation sur la marche aléatoire démarre au milieu
d'une grille, comme un 11 par 11 tableau. À chaque étape de la bu a quatre
choix: le haut, le bas, la gauche ou la droite. Plus tôt dans ce chapitre, nous avons décrit
comment créer un tableau à deux dimensions de nombres. L'utilisation de ces données
type, écrire une simulation des deux dimensions de marche aléatoire.

Ok, Ce que je sais;
Je sais comment créer tableau à deux dimensions en python:

times = [0] * 11
for i in range(0,11):
    times[i] = [0] * 11

Et j'ai eu l'idée de "randint" fonction:

Et j'ai également écrit une variation dimensionnelle de ce problème récemment. Mais c'est un code spaghetti code et et c'est très sale et aussi je ne suis pas sûr si c'est la droite.

Mon code est ici:

'''
Created on Feb 11, 2012
@author: msarialp
'''
from random import randint
def drunken_man():
steps = 0
times = [0] * 11
left_move = 0
right_move = 0
i = 0
while left_move < 5 or right_move < 5:
value = randint(0,1)
times[5] = 1
if value == 1:
steps += 1
print("He moved left")
left_move += 1
if right_move > 0:
right_move -= 1
if left_move == 1:
times[4] += 1
elif left_move == 2:
times[3] += 1
elif left_move == 3:
times[2] += 1
elif left_move == 4:
times[1] += 1
#elif left_move == 5:
#times[0] += 1
elif value == 0:
steps += 1
print("He moved right")
right_move += 1
if left_move > 0:
left_move -= 1
if right_move == 1:
times[6] += 1
elif right_move == 2:
times[7] += 1
elif right_move == 3:
times[8] += 1
elif right_move == 4:
times[9] += 1
#elif right_move == 5:
#times[10] += 1
times[i] += 1                
for i in range(1,10):
print("He took {steps} steps until he reaches end of the sidewalk.".format(steps = steps),  "He stood on {1} square at {0} times".format(times[i], i) )
def main():
drunken_man()
return 0
if __name__ == '__main__':
main()

MODIFIER Un

Après la prise de certains bons conseils de Dan Gerhardsson.
J'ai décidé de modifier ma question.
Alors, où je suis sur cette question:
Je comprends comment puis-je suivre et d'examiner les étapes de mon homme ivre à deux dimesion.

C'était très compréhensible et clair pour utiliser un tuple à résoudre cet exercice.

Donc, après tout mon segment de code est ici, Merci de vérifier et de me donner des retours.

def two_dimensional_random_walk():
steps = 0
times = [0] * 11
for i in range(0,11):
times[i] = [0] * 11
x = 5
y = 5
moves = [(1,0), (0,1), (-1,0), (0,-1)]  
while x<11 and x >= 0 or y < 11 and y >= 0:  
dx, dy = moves[randint(0,3)]
x += dx
y += dy
if dx == 1 and dy == 0:
print("He moved right")
elif dx == 0 and dy == 1:
print("He moved up")
elif dx == -1 and dy == 0:
print("He moved left")
elif dx == 0 and dy == -1:
print("He moved down")
try:
times[x][y] += 1
steps += 1
except IndexError:
break

Et ma fonction d'impression est:

for i in range(0,11):
for j in range(0,11):
print("He took {steps} steps until he reaches end of the sidewalk.".format(steps = steps),  "He stood on {1}x{2} square at {0} times".format(times[i][j], i+1,j+1) )   

Donc dans l'ensemble je suppose qu'avec l'aide de Dan Gerhardsson, j'ai résolu l'exercice.

Mais, Pourquoi je ne parviens pas à modifier mon unidimensionnel solution avec ces conseils.

def drunken_man():
steps = 0
x = 6
times = [0] * 11
moves = [(1), (-1)]
while x < 11 and x >= 0:
dx = moves[randint(0,1)]
print(dx, x)
x += dx
try:
times[x] += 1
steps += 1
except IndexError:
break           
for i in range(1,11):
print("He took {0} steps until he reaches end of the sidewalk.".format(steps),  "He stood on {1} square at {0} times".format(times[i], i) )

ÉDITER Deux(touche Finale)

Je ne suis pas sûr de savoir si il est nécessaire d'éditer mon post pour appliquer les conseils de Dan Gerhardsson. Afin d'aider quelqu'un qui manque de points comme moi, j'ai décidé de combiner le tout.

Donc voici ma fonction qui est combiné avec des notes par Dan Gerhardsson:

def two_dimensional_random_walk():
steps = 0 # Steps counter for understand how many steps that our drunken man take
grid_size = 11 # Grid size variable,
# Creating Two dimensional array by using lists
times = [0] * grid_size 
for i in range(0,grid_size):
times[i] = [0] * grid_size
# Initial variables to start in the middle of grid
x = 5
y = 5
# Tuples to get directions and decide where to go
moves = [(1,0, "right"), (0,1, "up"), (-1,0, "left"), (0,-1, "down")] 
# My loop for evaluate the steps
while True:  
dx, dy, position = moves[randint(0,3)] # By using randint I could make decision randomly
x += dx
y += dy
print("He moved", position)
try:
times[x][y] += 1 # And here is, how many times have he stood on each square
steps += 1
except IndexError: # The exit of loop
break
# My print function which answers these questions (How long will it be until he reaeches the end of the sidewalk, and how many times will he have stood on each square)
for i in range(0,11):
for j in range(0,11):
print("He took {steps} steps until he reaches end of the sidewalk.".format(steps = steps),  "He stood on {1}x{2} square at {0} times".format(times[i][j], i+1,j+1) )

Merci pour votre grande aide Dan Gerhardsson.
Je pense enfin j'ai la solution.