Partage
  • Partager sur Facebook
  • Partager sur Twitter

projet Mastermind sur python

    19 janvier 2020 à 17:40:40

    Bonjour, je dois programmer le jeux de mastermind sur python, or je rencontre certains problèmes de programmation puisque je débute à peine dans ce domaine.

    J'ai, pour l'instant, programmé que l'ordi choisissait au hasard , parmi une liste, 4 couleurs. J'ai ensuite demandé au joueur de choisir 4 couleurs. Puis j'ai créer une fonction qui indique si des couleurs sont biens placées ou pas et s'ils sont bien placées il les remplace pas des X ( pour faciliter ce qui vient maintenant ).

    Je veux donc maintenant créer une fonction qui indique ou qui analyse, les couleurs choisit par le joueur pour ensuite dire s'il y a des couleurs mal placés en fonction de la liste de départ choisit par l'ordi. 

    Je ne sais pas si j'ai réussi à m'exprimer clairement... je m'en excuse.

    Je vous mets par la suite les fonctions que j'ai déjà crée dans l'ordre dont j'en ai parlé dans mes explications :

    # -*- coding: utf-8 -*-
    
    from random import*
    
    #***********************************************************************#
    liste_couleur = ['R','V','B','J','O','M']
    liste_finale = []
    
    
    def tirage_4couleurs(maListe) :
        i = 0
        while i<4 :
            couleur_choisi = str(choice(maListe))
            liste_finale.append(couleur_choisi)
            i = i + 1
        return liste_finale
    #**********************************************************************#    
    liste_ordi = tirage_4couleurs(liste_couleur)
    #**********************************************************************#
    def analyse_proposition (proposition, tirage_ordi):
        i = 0
        nbr_couleurs_bien_places = 0
        tirage_ordi2 = list(tirage_ordi)
        
        while i < 4:
            if proposition[i] == tirage_ordi[i]:
                nbr_couleurs_bien_places = nbr_couleurs_bien_places + 1
                tirage_ordi2[i] = "X" 
                i = i + 1
            else :
                i = i + 1
        
        return nbr_couleurs_bien_places, tirage_ordi2
    #*********************************************************************#  
       
    liste_joueur = list(input("Entrez 4 couleurs (seulement leurs initiales en majuscules ) sans espaces entre :"))
    
    nbre, liste = analyse_proposition(liste_joueur,liste_ordi)
    
    #*********************************************************************#



    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2020 à 19:17:17

      Pour coder ta fonction, il faut avoir très bien compris le scoring du jeu (pour les noirs c'est facile) en particulier en cas de doublons, voir ICI par exemple. Comprends pas le rôle de tirage_ordi dans ta fonction qui par ailleurs devrait renvoyer le nombre de blancs et le nombre de noirs. Attention, tu écris à deux reprises une boucle while au lieu d'une boucle for. Et sinon, il y beaucoup de détails à améliorer. Par exemple tes variables ont un nom trop long.
      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2020 à 21:54:59

        PascalOrtiz a écrit:

        Pour coder ta fonction, il faut avoir très bien compris le scoring du jeu (pour les noirs c'est facile) en particulier en cas de doublons, voir ICI par exemple. Comprends pas le rôle de tirage_ordi dans ta fonction qui par ailleurs devrait renvoyer le nombre de blancs et le nombre de noirs. Attention, tu écris à deux reprises une boucle while au lieu d'une boucle for. Et sinon, il y beaucoup de détails à améliorer. Par exemple tes variables ont un nom trop long.

        Merci pour vos conseils. Or je ne dois pas faire quelque chose de graphique, je peux simplement me contenter de la console sur python. Mais quelle est la différence entre la boucle while et for ?

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2020 à 23:35:50

          Si vous écrivez une boucle où à chaque étape vous faites évoluer un indice par exemple de 42 à 100, typiquement on utilisera une boucle for (dans l'écrasante majorité des cas) et pas une boucle while. Grosso modo, chaque fois qu'une boucle va tourner un nombre prédéterminé de fois, on privilégiera la boucle for. Quand vous ne savez pas quelle va être la longueur de la boucle, bien souvent on utilise une boucle while. [Toutefois dans des situations plus avancées, cela peut-être aussi une boucle for].

          Typiquement, ce code

          i = 0
          while i<4 :
              couleur_choisi = str(choice(maListe))
              liste_finale.append(couleur_choisi)
              i = i + 1

          va se simplifier en 

          for i in range(4):
              couleur_choisi = str(choice(maListe))
              liste_finale.append(couleur_choisi)

          Utiliser une boucle while quand une boucle for est attendue est moins lisible et plus lent car la boucle for internalise des opérations. Exemple : ce code

          N=10**4
          S=0
          i=0
          while i<N:
              j=1
              while 1<= j < i+1:
                  S+=j
                  j+=1
              i+=1
          print(S)

          met plus de 8s à comparer avec ce code écrit avec des boucles for :

          N=10**4
          S=0
          for i in range(N):
              for j in range(1,1+i):
                  S+=j
          print(S)

          plus lisible et 4s plus rapide (dans votre cas, la vitesse n'est pas un argument).


          Sinon, c'est un bon exo que de faire un mastermind en console.

          • Partager sur Facebook
          • Partager sur Twitter
            22 janvier 2020 à 11:15:39

            Ah d'accord je savais pas et effectivement ça raccourci le code. Mais du coup il faudrait que je fasse pareil pour les autres fonctions ? Et si je remplace le while par le for, je dois faire quoi avec les if et while qui sont a l'intérieur ?
            • Partager sur Facebook
            • Partager sur Twitter
              22 janvier 2020 à 12:18:19

              Vous changez vos while en for et les if ne changent pas.
              • Partager sur Facebook
              • Partager sur Twitter
                22 janvier 2020 à 14:02:37

                D'accord.

                J'aimerais également modifier ma fonction "tirage_4couelurs" pour que le joueur ait le choix d'avoor des doublon sou pas. Et sinon si vous n'y arrivez pas alors pourriez vous m'aider à quand même modifier cette fonction mais en sorte qu'une couleur ne peux pas revenir deux fois svp ?

                • Partager sur Facebook
                • Partager sur Twitter
                  22 janvier 2020 à 19:27:46

                  Votre code fait déjà un tirage avec doublons possibles. Pour sans doublon, il suffit d'utiliser la fonction sample de random. Pour que la fonction gére les deux cas, il suffit d'écrire un paramètre sansDoublon qui vaudra True/false à l'appel.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  projet Mastermind sur python

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown