Accueil > Forum > > > > besoin d'aide pour une fonction
besoin d'aide pour une fonction
mercredi 21 avril 2010 à 23:43:38 |
besoin d'aide pour une fonction

Nitnekk
|
Bonjour à tous je suis étudiant et j'apprends depuis janvier le langage python.
Je dois actuellement réaliser un jeu de mémory ou chaque carte est une lettre. J'ai presque terminé, mais j'ai des problèmes avec la dernière fonction.
Voici l'énoncé:
Créez une fonction action(ligne,colonne)pour retourner une carte. On distinguera s'il s'agit de la première ou deuxième carte du tour. Lorsque l'on retourne la deuxième carte, les deux cartes restent à découvert si elles sont identiques.
Le sujet complet est disponible ici.
Après plusieurs essais, voila ma meilleure tentative (apparemment l'indentation ne marche pas sa ne va pas faciliter le travail  ):
carte=0
lettre1=""
def action(ligne,colonne):
global carte
global lettre1
if carte==0: #Autrement dit je retourne la première carte
for lig in range (nombreCases):
for col in range (nombreCases):
if decouvert[lig][col]==False:
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5))
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5)) #Je cache les deux cartes précedemment tirées si elles ne sont pas identiques
canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne]) #J'affiche la carte
carte=1
lettre1=matriceLettres[ligne][colonne] #je mémorise la valeur de la carte
else: #je tire la deuxième carte
carte=0
canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne])
lettre2=matriceLettres[ligne][colonne]
if lettre1==lettre2: #Si les deux cartes sont les mêmes
decouvert[ligne][colonne]=True #sa c'étais dans la question 2. Cela indique que la carte est trouvée et qu'il faut la laisser affichée.
if fini():
termine.config(text="La partie est finie") #Sa sa indique que si toutes les cartes on la valeur True, la partie est finie
Mon problème c'est qu'avec cette fonction, seule la deuxième carte prends la valeur True, je ne voit pas comment je peux le faire pour la première. C'est un peu la même chose au début:
for lig in range (nombreCases):
for col in range (nombreCases):
if decouvert[lig][col]==False:
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5))
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5))
Il faudrait que je mémorise le lig et le col des 2 cartes précédentes.
Je ne sais pas si vous allez réussir à me suivre avec ce seul bout de code. Je peux si vous le souhaitez écrire tout mon programme.
En esperant avoir été clair et avoir des réponses, merci d'avance.
|
|
lundi 26 avril 2010 à 10:36:48 |
Re : besoin d'aide pour une fonction

Rafikiki
|
Bonjour, désolé pour la lenteur de ma réponse mais des problèmes internet mon empêcher de retourner sur mon compte principal ... Donc je pense que tu pourrais résoudre ce problème via une autre fonction que tu appelles, pour cela j'aurais besoin de pouvoir accéder à l'intégralité de ton code si cela était possible ( j'ai cru comprendre dans ton lien, que cela était plutôt urgent, j'essaierais de jeter un coup d'½il dessus dès que tu m'auras envoyer l'intégralité de ton code.
( PS: Le 3ème "logo" dans la barre en partant de la fin permet d'insérer du code python.)
|
|
lundi 26 avril 2010 à 11:30:50 |
Re : besoin d'aide pour une fonction

Nitnekk
|
Merci de ta réponse mais effectivement c'est pour demain. J'ai réussi à m'en sortir. Le jeu en lui même fonctionne très bien mais le code est vraiment moche. Je peux te le montrer si tu veux.
|
|
lundi 26 avril 2010 à 12:07:07 |
Re : besoin d'aide pour une fonction

Rafikiki
|
Je veux bien si tu veux je pourrais essayer de l'embellir un petit peu, on ne sait jamais ^^.
|
|
lundi 26 avril 2010 à 15:33:46 |
Re : besoin d'aide pour une fonction

Nitnekk
|
Voila c'est assez long, et la fonction action est vraiment très très moche...
Code Python : # ----------------- Modules nécessaire ---------------------------------------------------------------------------------------------
from Tkinter import *
from random import *
# ----------------- Variables Globales ---------------------------------------------------------------------------------------------
nombreCases=6 #nombre de cases par ligne
x0,y0=10,10 #coordonnées du début de la grille
c=80 #longueur et largeur d'une case
matriceLettres=[["" for x in range (nombreCases)]for x in range (nombreCases)] #matrice vide destinée à accueillir les lettres
decouvert=[[False for x in range (nombreCases)]for x in range (nombreCases)] #matrice destinée à afficher les lettres trouvées
carte=0 #Nombre de cartes tirées. Si 0 je tire la première, si 1 je tire la deuxième
lettre1="" #Va prendre la valeur de la première lettre pour la comparer à la deuxième
#------------------Fonctions -------------------------------------------------------------------------------------------------------
#------------------Question 1: Cette fonction remplit aléatoirement la matrice matriceLettres avec les lettres disponible-----------
def remplissage_matrice():
global matriceLettres
global nombreCases
lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"]
dicoLettres={"A":2,"B":2,"C":2,"D":2,"E":2,"F":2,"G":2,"H":2,"I":2,"J":2,"K":2,"L":2,"M":2,"N":2,"O":2,"P":2,"Q":2,"R":2}
for ligne in range (nombreCases):
for colonne in range (nombreCases):
matriceLettres[ligne][colonne]=choice(dicoLettres.keys()) #Pour chaque case je choisit une lettre au hasard
dicoLettres[matriceLettres[ligne][colonne]]-=1 #Je supprime une fois cette lettre du dictionnaire
if dicoLettres[matriceLettres[ligne][colonne]]==0: #Si la lettre a été utilisée deux fois, je la supprime
del dicoLettres[matriceLettres[ligne][colonne]]
return matriceLettres
#-------------------Question 2: On repère la fin de la partie----------------------------------------------------------------------
def fini():
for ligne in range (nombreCases):
for colonne in range (nombreCases):
if decouvert[ligne][colonne]==False: #S'il reste une case False, la partie n'est pas finie
return False
return True
#-------------------Question 4: On affiche les lettres trouvées (ayant la valeur True)---------------------------------------------
def dessin_grille():
for ligne in range (nombreCases):
for colonne in range (nombreCases):
if decouvert[ligne][colonne]==True: # Pour chaque case découvert, j'affiche la lettre dans le canvas
canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne])
#-------------------Question 5: On crée la grille et on associe une lettre par case. (Bouton Recommencer)--------------------------
def init():
global lettre1
lettre1="" #On commencera forcément par tirer la première carte
canvas.delete(ALL) #J'efface tout ce qui était affiché dans le canvas
termine.config(text="Bonne Partie") #J'affiche le texte bonne partir
for ligne in range (nombreCases):
for colonne in range (nombreCases): #J'indique qu'aucune case n'est trouvée
decouvert[ligne][colonne]=False
for i in range(nombreCases+1): #Je crée les lignes
canvas.create_line(x0+c*i, y0,x0+c*i,y0 + nombreCases*c)
canvas.create_line(x0, y0+c*i,x0+nombreCases*c ,y0+c*i)
remplissage_matrice() #J'utilise cette fonction pour associer à chaque case une lettre
#-------------------Question 5: On retourne une carte, une autre et on les compare------------------------------------------------
def action(ligne,colonne):
global carte
global lettre1
if decouvert[ligne][colonne]==False: #Si je clique sur une carte non affichée
if carte==0: # Premier cas, je tire la première carte
carte=1 #Au prochain coup je tirerais la deuxième
#Je veux effacer les deux cartes précédentes si elles sont différentes, la méthode est certainement perfectible
canvas.delete(ALL) #Je commence par tous supprimer
for i in range(nombreCases+1): #Je retrace les lignes
canvas.create_line(x0+c*i, y0,x0+c*i,y0 + nombreCases*c)
canvas.create_line(x0, y0+c*i,x0+nombreCases*c ,y0+c*i)
dessin_grille() #J'affiche les lettres qui étaient déja trouvée (valeur True)
decouvert[ligne][colonne]=True #J'affiche la première lettre
dessin_grille()
lettre1=matriceLettres[ligne][colonne] #Je la mémorise
else: # Deuxième cas, je tire la deuxième carte
carte=0 #Au prochain coup je tirerais la première et recommencerais un tour
canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne]) #J'affiche la deuxième lettre
lettre2=matriceLettres[ligne][colonne] #Je la mémorise
if lettre1!=lettre2:
for lig in range (nombreCases):
for col in range (nombreCases): #Je recherce donc quelle case avait la lettre1
if matriceLettres[lig][col]==lettre1:
decouvert[lig][col]=False #Et je la laisse découvert
else: #Si les deux lettres sont identiques:
decouvert[ligne][colonne]=True #La deuxième carte doit donc rester découverte (True)
if fini(): #Je regarde si la partie est terminée
termine.config(text="La partie est finie") #Si oui je change le texte
#-------------------Question 5: On remmene le clic a une case ---------------------------------------------------------------------
def correspond(x,y):
return (x-x0)/c,(y-y0)/c
#-------------------Question 5: On repère la case du clic et on appelle action(ligne,colonne)--------------------------------------
def retourner(event):
pos=correspond(event.x,event.y)
ligne=pos[0]
colonne=pos[1]
if ligne in range(nombreCases) and colonne in range (nombreCases):
action(ligne,colonne)
#-------------------Fonction quitter ----------------------------------------------------------------------------------------------
def quitter():
memory.quit()
memory.destroy()
#-------------------Fenetre Tkinter -----------------------------------------------------------------------------------------------
memory=Tk()
#-------------------Création des widgets-------------------------------------------------------------------------------------------
titre=Label(memory, text="Jeu du memory") #le titre
termine=Label(memory, text="Bonne Partie") #l'encouragement qui se transforme en félicitation
canvas=Canvas(memory, width=500, height=500) #le canvas
boutonQuitter=Button(memory, text="Quitter", command=quitter) #le bouton quitter
boutonRecommencer=Button(memory, text="Recommencer une partie", command=init) #le bouton recommencer
#-------------------Placement des widgets------------------------------------------------------------------------------------------
titre.grid(row=0, column=0)
canvas.grid(row=1, column=0)
boutonQuitter.grid(row=2, column=0)
boutonRecommencer.grid(row=1, column=1)
termine.grid(row=2, column=1)
canvas.bind("<Button-1>",retourner)
memory.mainloop() #Je ferme le tout
|
|
Cette discussion est classée dans : ligne, colonne, carte, col, lig
Répondre à ce message
Sujets en rapport avec ce message
Recuperation d'argument (ligne de commande) [ par Bl0tCh ]
Bonjour, J'aimerais savoir comment récupérer les arguments que l'on passe ds la ligne de commande. Exemple :prog.exe -a 18 -s mComment récuperer le 18
Tkinter et Python [ par Telimektar1er ]
Voila j'ai commencé e python il y a une semaine et jusqu à aujourd'hui aucun problème. Mais voilà, je viens de commencer la création d'interface graph
poser des points d'insertion sur une ligne [ par undertaker4000 ]
Bonjour à tous, Je suis un gros nul sur Python (eh oui, personne n'est parfait ) Comme je n'y connais rien à la programmation Python, je voudrais savo
Condition ne fonctionne pas [ par Fabrizio001 ]
Bonjour,Je débute (1 semaine )en python et je sollicite votre aide. Voici ce que j'essaye de faire:Je veux contrôler le contenu d'un fichier .txt qui
script python [ par emma66 ]
Bonjour, Je recherche un code en python d'une fonction mapList dont le role est de recopier dans la variable Map passée en paramétre les lignes du fic
Python / SQLite / for...in... [ par samylatortue ]
Bonjour à tous,je suis face à un problème depuis quelque jours...j'ai une base de donnée dans laquel il y a 2 tables j'aimerais prendre une partie des
Programmation robot suiveur de ligne [ par coolbart ]
Bonjour,dans le cadre de mes études avec 2 collègues, nous devons réaliser de A à Z un robot qui suit une ligne blanche sur fond noire. Malheureusemen
executer un script perl linux sous windows [ par bensirack ]
bonjour j'ai un script perl ki marche correctement sur linux mais que je dois executer sous windows. j'ai essaye de faire quelque modif pour qu'elle m
opération sur les fichiers [ par bossou ]
Bonjour à tous. je suis très novice en programmation avec python et je souhaite avoir un exemple de script qui me permettra de charger un fichier text
Serveur/Client (Je comprend pas 2lignes) [ par Guillamue06 ]
Bonjour, voila j'ai vue cette source serveur et j'éssai de la comprendre et 2 ligne m'échape : import socket HOST = '127.0.0.1' # The remote host
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PYVISA PROBLèMEPYVISA PROBLèME par sandrine44
Cliquez pour lire la suite par sandrine44
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|