Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP en nsi: contrainte de caractères

Sujet résolu
    29 octobre 2019 à 18:33:39

    Bonsoir c'est encore moi pour ce tp de NSI,

    J'ai pu continué et bien avancé dans mon tp néanmoins je suis tombé sur un très gros os pour moi, de plus il y a encore plus de contraintes cette fois-ci.. Les informations que j'ai sont:

    MINUSCULES = "abcdefghijklmnopqrstuvwxyz"
    MAJUSCULES = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    CHIFFRES = "0123456789"
    SPECIAUX = "?-.!_%$&"
    
    SYMBOLES = MINUSCULES + MAJUSCULES + SPECIAUX + CHIFFRES
    def contrainte_caractere(mot):
        """
        mot -- chaine de caractères 
        
        renvoie True si mot présente au moins une majuscule,
        au moins une minuscule,
        au moins un caractère spécial et au moins un chiffre.
        
        ** Contrainte: le code de cette fonction ne doit contenir ni boucle, ni if. **
        ** utilisez and **
        
        >>> contrainte_caractere("Ab")
        False
        >>> contrainte_caractere("Ab&")
        False
        >>> contrainte_caractere("Ab2&")
        True
        >>> contrainte_caractere("A&")
        False
        >>> contrainte_caractere("s&")
        False
        """

    Et là ça me bloque vraiment parce que je ne vois pas vraiment comment procéder.. Je viens d'y passer l'après midi et je suis revenu plusieurs fois sur la même fonction mais ça ne fonctionne pas, voici ce que je pense dont j'étais le plus près:

        return MAJUSCULES and MINUSCULES and CHIFFRES and SPECIAUX in mot
    

    Avec quelque chose dans la même forme qui réponde aux contraintes du docstring ça donnerait quoi s'il vous plaît ? Merci d'avance pour votre aide ;)



    -
    Edité par Un NinChat 29 octobre 2019 à 18:34:02

    • Partager sur Facebook
    • Partager sur Twitter
      29 octobre 2019 à 18:58:14

      juste pour la majuscule :

      any(lettre in MAJUSCULE for lettre in mot)



      • Partager sur Facebook
      • Partager sur Twitter
        29 octobre 2019 à 21:28:47

        Pourrais-tu m'expliquer qu'est-ce que "any" s'il te plaît ? je connais la traduction en français mais je ne sais pas comment ça marche en python. Et quand je fais ça
        return any(lettre in MAJUSCULES and SPECIAUX and MINUSCULES and CHIFFRES for lettre in mot)
        ça me retourne quand même true même s'il n'y a pas de chiffres, pourquoi ?
        • Partager sur Facebook
        • Partager sur Twitter
          30 octobre 2019 à 8:16:49

          ça veut dire "au moins un".

          et on fait comme ça :

          any(lettre in MAJUSCULE for lettre in mot) and any(lettre in MINUSCULE for lettre in mot) ...


          Après c'est simplifiable avec une expression régulière ...

          • Partager sur Facebook
          • Partager sur Twitter
            30 octobre 2019 à 11:56:53

            Bonjour,

            Ça doit exister sur la toile ce genre d'exercice,

            Allez hop ! 2 secondes de recherche... ICI

            • Partager sur Facebook
            • Partager sur Twitter

            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

              30 octobre 2019 à 12:43:11

              L'énoncé de l'exercice comporte la contrainte :

              le code de cette fonction ne doit contenir ni boucle, ni if.  utilisez and 

              Ca dépend ce qui est entendu par boucle mais pour moi une liste en compréhension ou une expression génératrice sont considérées comme des boucles (certes ce ne sont pas des instructions mais on utilise explicitement for). Et de toute façon je doute que cela ait vu en NSI, idem pour any.

              Voilà, j'ai juste un doute sur le faisabilité de cette exo avec ces contraintes.

              La seule chose que je vois et qui respecte les contraintes serait :

              MINUSCULES = "abcdefghijklmnopqrstuvwxyz"
              MAJUSCULES = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
              CHIFFRES = "0123456789"
              SPECIAUX = "?-.!_%$&"
              
              
              def contrainte_caractere(mot):
                  s = set(mot)
                  return bool(
                      set(MINUSCULES) & s and set(MINUSCULES) & s and set(CHIFFRES) & s
                      and set(SPECIAUX) & s)
              
              
              for mot in ["Ab", "Ab&", "Ab2&", "A&", "s&"]:
                  print(mot, '->', contrainte_caractere(mot))


              donc j'ai hâte que tu nous donne la solution de ton professeur !

              -
              Edité par PascalOrtiz 30 octobre 2019 à 12:44:28

              • Partager sur Facebook
              • Partager sur Twitter
                30 octobre 2019 à 13:03:19

                Merci de vos aides, mais en effet il y a une contrainte que Pascal a pris en compte, mais pour moi une boucle c'est avec un for puisque d'une façon générale (si j'ai bien appris les seuls cours que j'ai) c'est fait pour parcourir des éléments dans une suite. Je vous informe de la solution de mon professeur dès que je l'ai et encore merci !

                Et à quoi sert 

                bool(

                ? :')

                -
                Edité par Un NinChat 30 octobre 2019 à 13:10:24

                • Partager sur Facebook
                • Partager sur Twitter
                  30 octobre 2019 à 13:27:54

                  Un NinChat a écrit:

                  Et à quoi sert 

                  bool(

                  ? :')

                  -
                  Edité par Un NinChat il y a 3 minutes

                  bool sert à donner la valeur booléenne d'un objet. Par exemple un conteneur Z non vide a une valeur booléenne bool(Z) qui vaut True.

                  Ici, on a besoin de bool car une expression du type A and B and C and D où A, B, C et D sont des conteneurs non tous vides renvoie le premier conteneur non vide. Or dans ton exo, on demande de renvoyer un booléen et pas un conteneur.

                  De mon point de vue, tout ceci me paraît trop compliqué pour NSI où la programmation n'est qu'un aspect parmi d'autres.

                  PS Vous avez vu les liste en compréhension ?

                  -
                  Edité par PascalOrtiz 30 octobre 2019 à 13:28:57

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 octobre 2019 à 13:48:08

                    D'accord merci je comprend maintenant son utilité, ça me paraît trop compliqué pour moi aussi et pour mes camarades aussi haha :'')

                    et oui on a vu les listes mais pas en intégralité, je suppose puisque je ne connais pas encore l'imensité de l'univers Python

                    Et désolé du retard mais 

                    set(...)

                    sert à quoi lui ?

                    -
                    Edité par Un NinChat 30 octobre 2019 à 13:49:33

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 octobre 2019 à 14:39:05

                      Un NinChat a écrit:

                      D'accord merci je comprend maintenant son utilité, ça me paraît trop compliqué pour moi aussi et pour mes camarades aussi haha :'')

                      Tu peux t'en dispenser en écrivant ceci :

                      def contrainte_caractere(mot):
                          s = set(mot)
                          return (len(set(MINUSCULES) & s) > 0 and len(set(MINUSCULES) & s) > 0 
                                  and len(set(CHIFFRES) & s) > 0 and len(set(SPECIAUX) & s) > 0)
                      
                      



                      Un NinChat a écrit:

                      et oui on a vu les listes mais pas en intégralité,

                      Oui mais les listes en compréhension ? car c'est autre chose

                      Un NinChat a écrit:

                      Et désolé du retard mais 

                      set(...)

                      sert à quoi lui ?

                      Il sert à transformer un conteneur (dans ton cas, une chaîne) en ensemble. Si tu veux en savoir d'avantage, regarde ICI. L'intérêt dans le cadre de ton exercice c'est qu'on peut en une seule opération savoir si ton mot contient par exemple un chiffre. Illustration :

                      >>> s=set("0123456789") & set("Py.th.on_2020")
                      >>> s
                      {'2', '0'}
                      >>> contient_chiffre = len(s)>0
                      >>> contient_chiffre
                      True
                      >>> 

                      -
                      Edité par PascalOrtiz 30 octobre 2019 à 15:01:10

                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 novembre 2019 à 18:54:56

                        PascalOrtiz a écrit:

                        Tu peux t'en dispenser en écrivant ceci :

                        def contrainte_caractere(mot):
                            s = set(mot)
                            return (len(set(MINUSCULES) & s) > 0 and len(set(MINUSCULES) & s) > 0 
                                    and len(set(CHIFFRES) & s) > 0 and len(set(SPECIAUX) & s) > 0)

                        D'accord merci pour ceci, serait-il possible que vous m'expliquiez l'ensemble suivant ?

                        (len(set(MINUSCULES) & s) > 0

                        Je suis pas sûr de comprendre mais d'après ce que j'ai lu sur votre site, si j'ai bien compris, si la longueur de l'ensemble MINUSCULES et celui de mot est supérieur à zéro ça retourne True ?

                        PascalOrtiz a écrit:

                        Oui mais les listes en compréhension ? car c'est autre chose

                        En ce qui concerne les listes en compréhension je ne connais pas...

                        En tout cas merci beaucoup pour l'aide que vous me donnez je comprends vraiment d'avantage d'informations!

                        -
                        Edité par Un NinChat 2 novembre 2019 à 18:57:04

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 novembre 2019 à 19:06:47

                          Un NinChat a écrit:

                          D'accord merci pour ceci, serait-il possible que vous m'expliquiez l'ensemble suivant ?

                          (len(set(MINUSCULES) & s) > 0

                          Je suis pas sûr de comprendre mais d'après ce que j'ai lu sur votre site, si j'ai bien compris, si la longueur de l'ensemble MINUSCULES et celui de mot est supérieur à zéro ça retourne True ?

                          C'est presque ça. L'expression 

                          set(MINUSCULES) & s

                          désigne l'intersection (opérateur &) de l'ensemble des minuscules et de l'ensemble des lettres de votre mot, autrement dit l'ensemble des lettres minuscules présentes dans votre mot.

                          L'expression

                          len(set(MINUSCULES) & s)) 

                          désigne le nombre d'éléments de l'ensemble précédents (les minuscules de votre mot)

                          et l'expression

                          (len(set(MINUSCULES) & s) > 0



                          teste si ce nombre n'est pas nul autrement s'il existe au moins une lettre en minuscule dans votre mot.

                          Un NinChat a écrit:

                          En ce qui concerne les listes en compréhension je ne connais pas...


                          Je vous conseille de les apprendre (en tous cas si vous êtes amené à coder en Python dans le futur), les usages sont multiples, voir par exemple ici.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 novembre 2019 à 19:34:15

                            D'accord super merci pour tout je vous remercie vraiment pour votre aide et j'irai voir les listes en compréhension, ça ne pourra que m'être utile. Bonne soirée et sûrement à une prochaine fois ^^
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 novembre 2019 à 19:17:32

                              Re bonjour c'est encore moi, j'ai trouvé un équivalent à la proposition de Pascal, et qui je pense est la solution attendue par le prof, je la post vers mardi soir, normalement tout les élèves auront rendu leur travaux et ainsi la solution ne sera pas volé, pas que je suis égoïste mais un travail personnel "volé" c'est embêtant, bien belle soirée à vous tous.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 novembre 2019 à 19:21:15

                                Désolé du retard, j'avoue avoir oublié, pour conclure ce sujet, la correction et la version qu'attendait le professeur est:
                                def contrainte_caractere(mot):
                                    return au_moins_une_minuscule(mot) and au_moins_une_majuscule(mot) and au_moins_un_symbole(mot) and au_moins_un_chiffre(mot)
                                
                                Bonne continuation à tous et encore merci
                                • Partager sur Facebook
                                • Partager sur Twitter

                                TP en nsi: contrainte de caractères

                                × 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