Python, jeu de memory

Fermé
Mattd50 - 14 avril 2010 à 14:35
 Jean Airienafoutre - 10 avril 2013 à 15:45
Bonjour, je suis en train de plancher sur un jeu de mémory sur python ( pour un partiel :/ ) , donc je suis en train de suivre les instructions, à savoir :

Question 1 . Définissez les variables globales n que vous initialiserez à 6 et la matrice
matriceLettres qui contient n lignes et n colonnes, chacune des cases de la matrice contiendra
la chaîne vide "".
Définissez une fonction remplissage matrice qui va remplir matriceLettres avec les lettres de
A à R. Pour cela, définissez (dans la fonction) une liste lettres qui contiendra toutes les lettres.
Construisez un dictionnaire dicoLettres où les clefs sont les lettres de A à R et la valeur est 2
pour chaque clef. Remplissez toutes les cases de la matrice en tirant à chaque fois aléatoirement
une lettre dans le dictionnaire. N'oubliez pas de mettre à chaque fois à jour le dictionnaire.

donc pour le coup j'ai fais ça :

def matriceLettres():
n=6
matrice=n*[0]
for i in range(len(matrice)):
matrice[i] = n*[0]

from random import*
def remplissage_matrice(matrix):
dicoLettres={}
lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"]
matrix=matriceLettres()
for i in lettres:
dicoLettres[i]=2
for a in range(6):
for b in range(6):
c=lettres[randrange(17)]
dicoLettres[c]=dicoLettres[c]-1
if dicoLettres[c]>=0:
matrix[a][b]=c
return matrix

mais il semblerait que cela ne fonctionne pas ... Si quelqu'un pouvait m'éclairer assez rapidement, je lui en serais gré. ( Pour info, j'utilise Python2.6 sur conseil de la prof.)
A voir également:

5 réponses

tu pourrais SVP mettre ton code sous la forme "code" pour voir ton indentation
et si tu pouvais mettre le message d'erreur que ça te génère ça pourrait aider

essaies comme ça, je pense que ça doit mieux fonctionner car:
- tu appelais la fonction matriceLettres() mais elle ne retournais rien
- tu remplissais matrix qui venait de je ne sais où alors que tu voulais remplir matrice que tu venit de créer non?


def matriceLettres():  
  n=6  
  matrice=n*[""]  
  for i in range(len(matrice)):  
     matrice[i] = n*[""]  
  return matrice  


def remplissage_matrice():  
  dicoLettres={}  
  lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"]  
  matrice=matriceLettres()  
  for i in lettres:  
    dicoLettres[i]=2  
  for a in range(6):  
    for b in range(6):  
      c=lettres[randrange(17)]  
      if dicoLettres[c]>=0:  
        matrice[a][b]=c  
  return matrice
0
je viens de le tester et apparemment ça fonctionne mais sans le paramètre qu'une même lettre n'apparait que 2 fois), voilà le résultat

>>> remplissage_matrice() 
[['B', 'Q', 'K', 'B', 'C', 'A'], ['M', 'F', 'M', 'E', 'K', 'A'], ['L', 'I', 'P', 'J', 'C', 'Q'], ['N', 'F', 'P', 'L', 'P', 'O'], ['O', 'H', 'J', 'K', 'A', 'C'], ['L', 'H', 'I', 'D', 'D', 'P']]
0
Merci pour ta solution cependant, il y a plusieurs fois la lettre 'K' par exemple, or il me la faut seuleument 2 fois c'est pour cela que j'avais noté :

 
for b in range(6):  
      c=lettres[randrange(17)]
      dicoLettres[c]=dicoLettres[c]-1
      if dicoLettres[c]>=0:  
        matrice[a][b]=c
      else:


mais en réessayant, avec cette ligne, j'ai pu constater que j'avais des blancs dans mes sous-listes.

>>> remplissage_matrice()
[['A', 'F', 'D', 'A', 'P', 'H'], ['N', 'B', '', 'P', 'L', 'D'], ['', 'N', '', 'L', 'M', ''], ['C', 'E', 'J', 'H', 'I', 'J'], ['', 'F', 'M', 'K', '', 'K'], ['', 'I', 'O', '', 'Q', '']]
0
oui j'avais vu mais je n'avais pas le temps de complètement finir ;)
pour les '' c'est normal car si tu te trouve dans le cas d'un else, ben il fait rien et passe à la case suivante

je regarde ça plus tard

Edit: Voilà normalement ça doit fonctionner maintenant:

def remplissage_matrice():  
	dicoLettres={}  
	lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"]  
	matrice=matriceLettres()  
	for i in lettres:  
		dicoLettres[i]=2  
	for a in range(6):
		for b in range(6):		
			c=lettres[randrange(len(lettres))]
			dicoLettres[c]=dicoLettres[c]-1
			# la première fois que la lettre est trouvée: Insertion dans matrice
			if dicoLettres[c]>0:
				matrice[a][b]=c
			# la seconde fois, la lettre est ajoutee dans la matrice et supprimee de lettres
			elif dicoLettres[c] == 0:	
				matrice[a][b]=c
				lettres.remove(c)
	return matrice
0
Merci beaucoup, je n'avais pas pensais à lettres.remove(c). =) Si jamais je rencontre d'autre problème pourrais-je revenir te poser quelques questions, parce que je parviens à trouver la solution ( à peu près) mais il y a toujours des détails qui m'échappent ?
0