Factorisation boucle 'for'

Résolu
ArthurGONAY -  
 ArthurGONAY -
Bonjour,
Je suis en classe de terminal et j'ai choisi la spe ISN. il fallait qu'on code un mastermind en utilisant des boucles for. Le problème étant que je l'ai déjà codé avec des boucle if et qu'il m'a dit de "factorisé" avec des boucle for. Je vous demande donc de bien vouloir m'aider a factorisé cela:

#détermination des couleurs présentes mais mal placé
        if (essai[0]) in code:
                cl_bon = cl_bon+1
        if (essai[1]) in code:
                cl_bon = cl_bon+1
        if (essai[2]) in code:
                cl_bon = cl_bon+1
        if (essai[3]) in code:
                cl_bon = cl_bon+1
#détermination de couleur bien placé
        if (essai[0]) == (code[0]):
                cl_bienplace = cl_bienplace+1
                cl_bon = cl_bon-1
        if (essai[1]) == (code[1]):
                cl_bienplace = cl_bienplace+1
                cl_bon = cl_bon-1
        if (essai[2]) == (code[2]):
                cl_bienplace = cl_bienplace+1  
                cl_bon = cl_bon-1      
        if (essai[3]) == (code[3]):
                cl_bienplace = cl_bienplace+1  
                cl_bon = cl_bon-1

Merci d'avance

8 réponses

  1. Utilisateur anonyme
     
    Bonsoir,

    est ce que dans ton code, il n'y aurait pas une partie répétitive ou la seule différence est un nombre?
    0
  2. ArthurGONAY
     
    J'ai en effet une boucle while au début. Je donne le code en entier pour que cela soit plus simple:

    code = [c1,c2,c3,c4]
    print('votre code est:')
    print(code)
    cl_bienplace = 0
    #conteur de tour
    nb_detour = 0
    #demande de la combinaison au joueur
    while cl_bienplace < 4:
            cl_bon = 0
            cl_bienplace = 0
            print('rentrez votre hypothèse')<code>
            e1 = input('première couleur: ')
            e2 = input('deuxième couleur: ')
            e3 =input('troisième couleur: ')
            e4 =input('quatrième couleur: ')
            essai = [e1,e2,e3,e4]
    #détermination des couleurs présentes mais mal placé
            if (essai[0]) in code:
                    cl_bon = cl_bon+1
            if (essai[1]) in code:
                    cl_bon = cl_bon+1
            if (essai[2]) in code:
                    cl_bon = cl_bon+1
            if (essai[3]) in code:
                    cl_bon = cl_bon+1
    #détermination de couleur bien placé
            if (essai[0]) == (code[0]):
                    cl_bienplace = cl_bienplace+1
                    cl_bon = cl_bon-1
            if (essai[1]) == (code[1]):
                    cl_bienplace = cl_bienplace+1
                    cl_bon = cl_bon-1
            if (essai[2]) == (code[2]):
                    cl_bienplace = cl_bienplace+1  
                    cl_bon = cl_bon-1      
            if (essai[3]) == (code[3]):
                    cl_bienplace = cl_bienplace+1  
                    cl_bon = cl_bon-1
            print('___________________________')
            print('tu as'),
            print(cl_bon),
            print('bonnes couleurs mais au mauvais endroit')
            print('___________________________')
            print('tu as'),
            print(cl_bienplace),
            print('bonne couleurs au bon endroit')
            print('___________________________')
            nb_detour = nb_detour+1
    0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour

    C'est au niveau de la variable
    essai[...]
    

    Que tu peux passer dans une boucle... au lieu de faire

    essai[0]

    essai[1]
    essai[etc...]


    0
  4. Utilisateur anonyme
     
    En fait ton while, ne nous apporte rien, pour la question actuelle.

    Ton prof t'as demandé de factoriser avec un for.
    Je t'ai ciblé "large" la partie à travailler et Jordane a resserré la zone.

    Quel intérêt a un for?

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ArthurGONAY
     
    D'accord je pense savoir, il faut utiliser
    for essaie in range(...)

    Mais par contre on a pas vu comment faire avec des lettres... je vais essayer de trouver une solution quand même. Merci en tous cas
    0
  7. Utilisateur anonyme
     
    Pourquoi avec des lettres?

    Et arrête de mettre +1 à chacune de nos réponses ça n'a aucun interêt.
    +1 c'est quand tu as solutionné ton problème.

    0
  8. ArthurGONAY
     
    J'ai effectivement oublié de dire que les couleurs dans mon exercices doivent être remplacées par des lettres.
    Et ok je n'étais pas au courant.
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Je vais te formuler en français ce que devrait être ta boucle...
      Sachant que les couleurs a comparer sont stockées dans la variable essai...
      Pour chaque essai je regarde si dans code puis si à la bonne place.
      0
    2. Utilisateur anonyme
       
      ou encore
      pour une variable i variant de 0 à 3
      si essai[i] == code[i] alors...
      0
    3. ArthurGONAY
       
      C'est bon je pense avoir trouvé:

      for i in range(4):
      
         if essai[i] in code:
              cl_bon = cl_bon+1
          if essai[i] == code[i]:
              cl_bienplace = cl_bienplace + 1
              cl_bon = cl_bon - 1
      0
  9. Utilisateur anonyme
     
    Ha voilà en réfléchissant un peu.

    Pour gagner un peu de temps à taper, ceci
    cl_bienplace = cl_bienplace + 1
    peut se contracter
    cl_bienplace += 1
    += veut dire "lui même + ce qui est à droite".
    0
    1. ArthurGONAY
       
      D'accord, merci pour l'info :)
      0