2017-10-07 9 views
1

Pour une intelligence artificielle assingment Je suis en train d'obtenir 4 tableaux séparés en envoyant un tableau en fonction de générer une valeur de retour. Lors de l'envoi du tableau 1, cela fonctionne normalement. Mais lors de l'envoi des tableaux 2, 3 et 4, il remplacera le tableau généré précédemment. La sortie à la dernière rangée, array4 est en ce moment:tableau Python lors du retour en écrasant de la fonction

['#', '#', '#', '#', '#'] 
['#', 'G', '☐', 'G', '#'] 
['#', '☐', 'P', '•', '#'] 
['#', 'P', '•', 'P', '#'] 
['#', '#', '#', '#', '#'] 

La sortie idéale pour array4 est:

['#', '#', '#', '#', '#'] 
['#', 'G', '•', 'G', '#'] 
['#', '☐', '☐', '•', '#'] 
['#', 'P', '•', '•', '#'] 
['#', '#', '#', '#', '#'] 

ci-dessous est tout mon code Python:

def solver(): 
matrix = [['#', '#', '#', '#', '#'], ['#', 'G', '•', 'G', '#'], ['#', '☐', '☐', '•', '#', ], 
     ['#', '•', 'P', '•', '#'], ['#', '#', '#', '#', '#']] 
countx = 0 
county = 0 
cordp = [] 
for x in matrix: 
    county += 1 
    for y in x: 
     countx += 1 
     if y == 'P': 
      cordp = [countx, county] 
    countx = 0 
    print(x) 
# nieuwe stap 
    # wat is huidige positie 
cordp[0], cordp[1] = cordp[1]-1, cordp[0]-1 

n = gen_matrix(matrix, cordp, 0,-1) 
e = gen_matrix(matrix, cordp, 1,0) 
s = gen_matrix(matrix, cordp, 0,1) 
w = gen_matrix(matrix, cordp, -1,0) 

for x in n: 
    print(x) 

def gen_matrix(matrixnew, cordp, x, y): 
print (x) 
print(y) 
if matrixnew[cordp[0]+y][cordp[1]+x] == '☐': 
    if matrixnew[cordp[0]+y*2][cordp[1]+x*2] == '#': 
     print("ik kan doos niet verplaatsen") 
    else: 
     print("IK HEB EEN BOX en kan deze verplaatsen") 
     matrixnew[cordp[0]+y*2][cordp[1]+x*2] = '☐' 
     matrixnew[cordp[0]+y][cordp[1]+x] = 'P' 
     matrixnew[cordp[0]][cordp[1]] = '•' 
elif matrixnew[cordp[0]+y][cordp[1]+x] == '•': 
    print("ik heb een bolletje") 
    matrixnew[cordp[0]+y][cordp[1]+x] = 'P' 
    matrixnew[cordp[0]][cordp[1]] = '•' 
elif matrixnew[cordp[0]+y][cordp[1]+x] == '#': 
    print("ik heb een muur") 

return matrixnew 
solver() 
+3

fonctionne python par référence, il est donc probable (que votre code est quelque peu floue) vous réutilisez une référence. Essayez plutôt de passer une copie de la matrice à gen_matrix, puis de les mettre à jour séparément. https://docs.python.org/2/library/copy.html –

+1

Veuillez corriger votre indentation. –

Répondre

0

Comme Paul a souligné dans les commentaires, que vous écrasez votre matrice puisque Python transmet les listes par référence plutôt que par valeur.

Le correctif est de copier les matrices avant de les modifier.

Nous pouvons copier une matrice 2d, soit une liste de listes, comme ceci:

matrix_copy = [list(row) for row in original_matrix] 

afin que nous puissions remplacer ce

n = gen_matrix(matrix, cordp, 0,-1) 
e = gen_matrix(matrix, cordp, 1,0) 
s = gen_matrix(matrix, cordp, 0,1) 
w = gen_matrix(matrix, cordp, -1,0) 

avec ce

n = gen_matrix([list(row) for row in matrix], cordp, 0,-1) 
e = gen_matrix([list(row) for row in matrix], cordp, 1,0) 
s = gen_matrix([list(row) for row in matrix], cordp, 0,1) 
w = gen_matrix([list(row) for row in matrix], cordp, -1,0) 

pour donner gen_matrix une nouvelle copie de la matrice pour chaque exécution.