J'essaie de faire un solveur de sudoku 4x4 en Python (je ne suis qu'un débutant!) Et en essayant de définir une fonction pour nettoyer mon code quelque peu, je suis tombé sur un étrange comportement que je ne comprends pas vraiment. Apparemment, il y a une différence entre ceci:Échec de l'abstraction de la variable dans la boucle
sudoku = "0200140000230040"
sudoku = map(lambda x: '1234' if x=='0' else x, list(sudoku))
for i in range(16):
for j in range(4):
if sudoku[i] == str(j+1):
for k in range(4):
if len(sudoku[i/4*4+k]) > 1:
sudoku[i/4*4+k] = sudoku[i/4*4+k].translate(None, str(j+1))
for k in range(4):
if len(sudoku[4*k+i%4]) > 1:
sudoku[4*k+i%4] = sudoku[4*k+i%4].translate(None, str(j+1))
Et celui-ci:
sudoku = "0200140000230040"
def sd(l):
for k in range(4):
if len(sudoku[l]) > 1:
sudoku[l] = sudoku[l].translate(None, str(j+1))
sudoku = map(lambda x: '1234' if x=='0' else x, list(sudoku))
for i in range(16):
for j in range(4):
if sudoku[i] == str(j+1):
sd(i/4*4+k)
sd(4*k+i%4)
Les expressions étranges sont destinées à vérifier les lignes et les colonnes (boîtes ne sont pas encore terminées). Je suis terriblement désolé de perdre votre temps si ce genre de chose a déjà été demandé, mais essayez d'exécuter les deux extraits de code et d'observer les différents résultats que vous obtenez. Merci d'avance.
(j'ai ce sentiment bizarre que je vais me faire engueuler. Huh.)
Pouvez-vous être plus précis sur ce qu'est le problème? "Ça ne fonctionne pas!" ne nous aide pas à évaluer vos problèmes. Il y a certainement une différence entre les deux - le segment inférieur du code est invalide, par exemple, puisque vous ne définissez pas 'k' à l'intérieur du bloc' if sudoku [i] == '. –