Programmation python
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Programmation python



  1. #1
    invite559d53a0

    Programmation python


    ------

    Bonjour,

    J'ai utilisé python pour écrire un algorithme du jeu mastermind. Mon programme est comme suit :

    Code:
    Ligne	Instruction
    01	from random import randrange
    02	from Tkinter import *
    03	class Aleatoire():
    04		def __init__(self):
    05			nbEssaisAutorises = 10
    06			l = [randrange(0,9) , randrange(0,9) , randrange(0,9) , randrange(0,9) , randrange(0,9)]
    07			self.aleatoire=l
    08	
    09	class Choix_joueur(Tk):
    10		def __init__(self,l):
    11		Tk.__init__(self)
    12			self.chiffre = l
    13			self.textnom = Entry(self)
    14			self.textnom.pack()
    15			but1 = Button(self, text = "Quitter",command = self.quit)
    16			but1.pack()
    17			but2 = Button(self, text = "Envoyer",command = self.envoi)
    18			but2.pack()
    19
    20		def envoi(self):
    21			self.proposition = self.textnom.get()
    22			print(self.proposition)
    23
    24		def nombresimilaire(self):
    25			self.proposition = str(self.proposition)
    26			i = 0
    27			res = 0
    28			while i<len(l):
    29				if l.count(i) != self.proposition.count(i):
    30					if l.count(i) > self.proposition.count(i):
    31						res = l.count(i) - l.proposition.count(i)
    32					else:
    33						res = l.proposition.count(i)
    34						i=i+1
    35			return res
    36	
    37		def compteur_places(self):
    38			l1 = self.aleatoire
    39			l2 = self.proposition
    40			i = 0
    41			a = 0
    42			b = 0
    43			j = 0
    44			while i < len[l2] and i < len[l1]:
    45				if l2[i] == str(l1[i]):
    46					a = a + 1
    47				else:
    48					while j < len[l2]:
    49						if str(l1[j]) != l2[i]:
    50							b = b + 1
    51                                                                   print(b)     
    52					            j = j + 1
    53				i = i + 1
    54                        print("Nombre de bien placés : " + " " + str(a) + "Nombre de mal placés : " + " " + str(b)
    Comme vous pouvez le voir j'ai utilisé des classes et des méthodes. L'ensemble fonctionne bien sauf le compteur (ligne 37 à 54). Je n'arrive pas à trouver le problème. Pouvez-vous m'aider s'il vous plaît? D'avance je vous remercie.

    -----

  2. #2
    invite559d53a0

    Re : Programmation python

    Bonjour,

    Ce petit mot pour dire que j'ai à nouveau testé le programme et cette fois j'ai été agréablement surpris de voir que tout fonctionne bien, y compris le compteur. J'avais fait des erreurs d'indentation que j'ai par la suite corrigé.

    Par contre si je veux inclure une méthode qui me donne un récapitulatif des propositions du joueur, pouvez-vous me dire comment je dois faire?

    Merci

  3. #3
    invite559d53a0

    Re : Programmation python

    Bonjour à tous,

    Je viens de vérifier mon compteur pour la énième fois et il ne marche pas. Dans mon programme, le nombre à deviner contient 5 chiffres et lorsque je veux connaître les chiffres bien et mal placés, je peux avoir une réponse telle que 5 BP et 1MP par exemple, ce qui n'est pas juste. Je ne vois vraiment pas à quel niveau se trouve le problème. Si quelqu'un a une solution à me donner ou alors trouve une autre façon d'écrire la méthode pour compter les chiffres bien et mal placés, je lui serais vraiment reconnaissant.

  4. #4
    invitee840409b

    Re : Programmation python

    Bonjour,

    Essayes d'uniformiser tes indentations : soit uniquement des espaces (méthode
    recommandée) à raison de 4 espaces pour une indentation (encore une fois,c'est
    uniquement une recommandation), soit uniquement avec des tabulations.

    Mais là, on a un joyeux mélange, et je m'y perd autant que Python.

    ProgVal

  5. A voir en vidéo sur Futura
  6. #5
    inviteccac9361

    Re : Programmation python

    Bonjour,

    c'est du python ça ?
    Citation Envoyé par Selver057
    Comme vous pouvez le voir j'ai utilisé des classes et des méthodes
    D'accord, je comprend que je ne connait pas.
    C'est donc écrit en classe, j'adore.
    Impressionnant comment c'est lisible.

    Une petite remarque juste de forme alors que je vois que le programme est correctement écrit par ailleurs.
    Les variables qui commencent en l, c'est à banir pour la tranquilité de celui qui le lit. Un i un l un 1 c'est dangereux.
    C'est une patte de mouche vite arrivée.

    Sinon pour l'algorithme.
    Code:
    while i < len[l2] and i < len[l1]:
    C'est normal qu'il faille vérifier la longueur des deux ?
    C'est en temps réel, de l'objet. D'accord.

    Code:
    if l2[i] == str(l1[i]):
    Pourquoi un str que d'un coté ?
    Ok, pas de probleme, c'est l1.aleatoire est numerique,
    et l2.proposition est une chaine.
    Donc ici ça compte bien les BP
    Par comparaison des deux "chaines" deux à deux.
    Ok.

    Citation Envoyé par Selver057
    Je viens de vérifier mon compteur pour la énième fois et il ne marche pas. Dans mon programme, le nombre à deviner contient 5 chiffres et lorsque je veux connaître les chiffres bien et mal placés, je peux avoir une réponse telle que 5 BP et 1MP par exemple, ce qui n'est pas juste. Je ne vois vraiment pas à quel niveau se trouve le problème
    Par contre apres je pense effectivement qu'il y a un soucis dans le comptage. Mais c'est peut-être dans la logique.

    Tu utilises le compteur j pour parcourir l1.aleatoire pour chaque i de l2.proposition. Tu comptes combien sont mal placés MP.
    Tu passes à l'indice i suivant de l2.proposition,
    et tu recommences jusqu'à ce que tu atteigne à l'index i la fin d'une de tes deux "chaines".

    Si je comprend bien.
    Mal placé désigne un pion de l2.proposition qui n'est pas à la place qu'il aurais du occuper dans l1.aleatoire.

    Mais si le pion de proposition de l2.proposition etait bien plaçé,
    il serais comptabilisé 4 fois mal plaçé à tord dans l1.aléatoire.
    Puisqu'on parcours J qui indexe l1.aleatoire...
    Qu'avait-il à être comptabilisé dans l1.aleatoire ?

  7. #6
    invite559d53a0

    Re : Programmation python

    Bonsoir,

    Et tout d'abord merci pour vos réponses.

    @ Progval : J'ai suivi votre conseil concernant l'indentation. J'ai tout uniformisé en utilisant des espaces (4 comme vous me l'avez conseillé) ... malheureusement, j'ai eu des messages d'erreur. En rétablissant toutes les indentations comme avant je n'ai plus eu ces messages. Je ne pense pas vraiment que le problème soit à ce niveau là.

    @ Xoxopixo : tu as bien cerné le problème que je n'arrive pas à résoudre, à savoir comment compter les chiffres mal placés. Et puis un autre problème se pose : qu'en est-il des propositions incorrectes? Aurais-tu une solution à me proposer?

  8. #7
    invite8666d089

    Re : Programmation python

    J'ai la vague impression qu'il me manque la fin du code. Pour moi 54 lignes que j'ai dû effectivement réindenter (choisi la tabulation par habitude). Tu pourrais nous mettre ton .py sur ce fil ou sur un autre serveur si c'est interdit ?

  9. #8
    invite559d53a0

    Re : Programmation python

    Bonjour,

    @ Dormeur74 : J'ai mis la totalité du code et cela fait bien 54 lignes. Il ne manque rien si ce n'est une méthode(fonction) pour afficher le récapitulatif des propositions, que je souhaite rajouter... mais je ne sais pas vraiment comment faire.

  10. #9
    invitee840409b

    Re : Programmation python

    Citation Envoyé par selver057 Voir le message
    @ Progval : J'ai suivi votre conseil concernant l'indentation. J'ai tout uniformisé en utilisant des espaces (4 comme vous me l'avez conseillé) ... malheureusement, j'ai eu des messages d'erreur. En rétablissant toutes les indentations comme avant je n'ai plus eu ces messages. Je ne pense pas vraiment que le problème soit à ce niveau là.
    Dans ce cas, utilise uniquement des indentations.

  11. #10
    polo974

    Re : Programmation python

    il manque une parenthèse en fin de ligne 54

    et comment tu lance ça?
    Dernière modification par polo974 ; 04/05/2011 à 11h32.
    Jusqu'ici tout va bien...

  12. #11
    polo974

    Re : Programmation python

    et une tabulation ligne 11
    sans parler de la soupe d'espace vers la fin...
    Jusqu'ici tout va bien...

  13. #12
    inviteccac9361

    Re : Programmation python

    Bonjour,

    Citation Envoyé par Selver057
    @ Xoxopixo : tu as bien cerné le problème que je n'arrive pas à résoudre, à savoir comment compter les chiffres mal placés. Et puis un autre problème se pose : qu'en est-il des propositions incorrectes? Aurais-tu une solution à me proposer?
    Je pense qu'il faudrais repenser l'algorithme.
    Donc analyser déja comment un joueur humain fait pour donner les indications au deuxieme joueur humain lors d'une partie.

    Pour le Mastermind original, les chiffres proposés ici sont des couleurs.

    Si le joueur qui pose l'enigme est le joueur A.
    Que le joueur qui résoud l'énigme est le joueur B.

    Le joueur A regarde sa combinaison, la solution (.aleatoire)
    Il prend le premier element.
    Il regarde si celui positionné au même endroit dans la proposition du joueur B est équivalent et lui attribue un point BP le cas échéant.
    Il effectue de même pour toutes les autres cases.
    Il peut donc avoir 0 à 5 BP.
    Ce sont les pions noir au Mastermind, dont le nombre dépend des versions. http://fr.wikipedia.org/wiki/Mastermind

    Inutile de chercher les MP si tous les BP sont placés.
    On a donc une condition pour continuer la recherche ou donner à MP la valeur 0.

    Si BP<5 alors
    On recherche les MP, ce sont les pions blancs au Mastermind.
    Rechercher les elements mal placés revient à prendre les pions de la proposition un à un et de vérifier, pour chacun :
    -Qu'il s'agit d'un chiffre faisant partie de la solution ou pas.
    en parcourant avec j la chaine .aleatoire.
    Et sortant de la boucle sitot que ceci a été vérifie. Mais on peut aussi basculer une valeur booleen à 1 autant de fois que l'on veut pour garder une boucle for, plutot que de prendre une boucle while ou until.

    -Et dans le cas ou il s'agit d'un chiffre faisant partie de la solution (on vient de le vérifier et on a conservé ce resulat dans une variable booleen par exemple), le comptabiliser en MP,
    s'il n'est pas en outre identique à celui de la position de la solution (le BP déja compté)

    On voit donc que la premiere boucle se fait avec des i qui indexent la chaine solution. (aleatoire)

    Que la deuxieme partie du programme refait une recherche sur la boucle i qui indexe la proposition. (et non plus la solution)
    avec une "boucle" j qui indexe la solution .aleatoire. qui peut s'arreter avant la fin ou pas.

    Voila déja ces quelques indications.

Discussions similaires

  1. Programmation d'un modem en python
    Par invitea0da0615 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 26/04/2011, 17h22
  2. Programmation python : objets
    Par invite559d53a0 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 13/02/2011, 15h22
  3. Programmation Python angles entre deux vecteurs
    Par inviteda408dc6 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 17/11/2009, 11h37
  4. Python
    Par invite3e3c726d dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 13/03/2009, 12h55
  5. aide programmation python
    Par invited0b2ef3b dans le forum Logiciel - Software - Open Source
    Réponses: 30
    Dernier message: 10/06/2006, 13h58