Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dictionnaires python

Sujet résolu
    14 septembre 2020 à 20:03:39

    Bonjour, j'ai vraiment besoin de votre aide s'il vous plaît. Je n'ai pas fais de python l'année dernière du coup j'ai un an de retard et je ne comprends pas du tout mon exercice ( je dois le rendre demain midi).

    Voici l'énoncé : Créer un dictionnaire qui contient les 10 (de 0 à 9) premiers nombres entiers naturels en nombre pour la clé et en français pour la valeur. Faites en sorte qu'une phrase du type "j'ai 3 pommes" se transforme toute seule en 'j'ai trois pommes'. Penser à la leçon sur chr, ord et le codage ASCII (UTF8 dans les faits). Pour être clair, vous direz: "entrez une phrase avec des nombres entiers sous forme de nombres" et votre programme remplacera les nombres par des chaines de caractères. (on s'arrête à 9, mais on peut réfléchir à plus...)

    J'ai créé le dictionnaire mais je ne sais pas quoi faire ensuite.

    Merci d'avance!

    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2020 à 20:27:37

      Ensuite un input pour que l'utilisateur puisse entrer sa phrase, puis une boucle sur la phrase pour chercher les chiffres par exemple.

      Vu l'énoncé je suppose que tu es censé utiliser chr et/ou ord pour détecter si un caractère est un nombre ou pas.

      -
      Edité par LoupSolitaire 14 septembre 2020 à 20:28:03

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

      Anonyme
        15 septembre 2020 à 1:32:03

        Ou pas ;)

        Je verrais un truc beaucoup plus simple puisque tu as un dictionnaire :

        num_words = {
            0: "Zero",
            1: "Un",
            2: "Deux",
            3: "Trois",
            4: "Quatre",
            5: "Cinq",
            6: "Six",
            7: "Sept",
            8: "Huit",
            9: "Neuf",
            10: "Dix"
        }
        
        phrase = "Bonjour on est le 10 Octobre"
        mots = phrase.split()
        
        for nombre in mots:
            for key, value in num_words.items():
                if nombre == str(key):
                    phrase = phrase.replace(nombre, value)
        
        print(phrase)



        -
        Edité par Anonyme 15 septembre 2020 à 1:46:16

        • Partager sur Facebook
        • Partager sur Twitter
          15 septembre 2020 à 6:38:55

          Diablo76 a écrit:

          Ou pas ;)

          Je verrais un truc beaucoup plus simple puisque tu as un dictionnaire :

          num_words = {
              0: "Zero",
              1: "Un",
              2: "Deux",
              3: "Trois",
              4: "Quatre",
              5: "Cinq",
              6: "Six",
              7: "Sept",
              8: "Huit",
              9: "Neuf",
              10: "Dix"
          }
          
          phrase = "Bonjour on est le 10 Octobre"
          mots = phrase.split()
          
          for nombre in mots:
              for key, value in num_words.items():
                  if nombre == str(key):
                      phrase = phrase.replace(nombre, value)
          
          print(phrase)



          -
          Edité par Diablo76 il y a environ 4 heures

          Merci beaucoup j’ai a peu près tout compris  mais a quoi sert "split" ?

          • Partager sur Facebook
          • Partager sur Twitter
            15 septembre 2020 à 8:21:47

            Marieeeeeeeee a écrit:

            Merci beaucoup j’ai a peu près tout compris  mais a quoi sert "split" ?

            Bonjour,

            As tu consulté ce que dit l'aide au sujet de la méthode split()?

            help(phrase.split)





            • Partager sur Facebook
            • Partager sur Twitter
            • J'aime les bananes, le python, le gnu, le pingouin.
              • Vive le libre !
            Anonyme
              15 septembre 2020 à 8:22:35

              Marieeeeeeeee a écrit:

              Diablo76 a écrit:

              Ou pas ;)

              Je verrais un truc beaucoup plus simple puisque tu as un dictionnaire :

              num_words = {
                  0: "Zero",
                  1: "Un",
                  2: "Deux",
                  3: "Trois",
                  4: "Quatre",
                  5: "Cinq",
                  6: "Six",
                  7: "Sept",
                  8: "Huit",
                  9: "Neuf",
                  10: "Dix"
              }
              
              phrase = "Bonjour on est le 10 Octobre"
              mots = phrase.split()
              
              for nombre in mots:
                  for key, value in num_words.items():
                      if nombre == str(key):
                          phrase = phrase.replace(nombre, value)
              
              print(phrase)



              -
              Edité par Diablo76 il y a environ 4 heures

              Merci beaucoup j’ai a peu près tout compris  mais a quoi sert "split" ?


              split sert à séparer chaque mot dans la phrase à partir des espaces et les ajouter à la liste "mots".

              De cette manière on peut comparer chaque "mot" avec le dictionnaire, on aurai pu comparer dans la boucle for chaque lettre de la phrase comme ceci:

              for nombre in phrase:

              mais au delà de 9 le script aurai affiché "UnZero" au lieu de "Dix

              -
              Edité par Anonyme 15 septembre 2020 à 8:23:18

              • Partager sur Facebook
              • Partager sur Twitter
                15 septembre 2020 à 8:52:05

                On aurait pu éviter une boucle je suppose,

                num_words = {
                    '0': "Zero",
                    '1': "Un",
                    '2': "Deux",
                    '3': "Trois",
                    '4': "Quatre",
                    '5': "Cinq",
                    '6': "Six",
                    '7': "Sept",
                    '8': "Huit",
                    '9': "Neuf",
                    '10': "Dix"
                }
                
                phrase = "Bonjour on est le 10 Octobre"
                mots = phrase.split()
                
                for nombre in mots:
                    valeur = num_words.get(nombre, nombre)
                    phrase = phrase.replace(nombre, valeur)
                
                print(phrase)



                • 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)

                Anonyme
                  15 septembre 2020 à 9:04:55

                  Exact @fred1599 ;)

                  Mais c'est peut-être plus parlant pour un(e) débutant(e)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 septembre 2020 à 9:07:27

                    Diablo76 a écrit:

                    Exact @fred1599 ;)

                    Mais c'est peut-être plus parlant pour un(e) débutant(e)


                    J'ai du mal avec ce genre de remarques, la documentation Python est française, et plutôt simple à comprendre.

                    Dans ce cas, à penser de cette manière, on ne profite qu'à 10% de l'ensemble de la syntaxe Python ?

                    • 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)

                    Anonyme
                      15 septembre 2020 à 9:18:00

                      fred1599 a écrit:

                      Diablo76 a écrit:

                      Exact @fred1599 ;)

                      Mais c'est peut-être plus parlant pour un(e) débutant(e)


                      J'ai du mal avec ce genre de remarques, la documentation Python est française, et plutôt simple à comprendre.

                      Dans ce cas, à penser de cette manière, on ne profite qu'à 10% de l'ensemble de la syntaxe Python ?


                      Ce n'est pas une remarque, mais un constat, la plupart des questions sur ce forum sont posées par des lycéens qui travaillent en python parce qu'on leurs impose....... et non parce qu'ils sont passionnés
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 septembre 2020 à 9:42:51

                        0000000

                        -
                        Edité par __p_b2cs 4 décembre 2020 à 10:58:47

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 septembre 2020 à 14:22:35

                          Diablo76 a écrit:

                          Marieeeeeeeee a écrit:

                          Diablo76 a écrit:

                          Ou pas ;)

                          Je verrais un truc beaucoup plus simple puisque tu as un dictionnaire :

                          num_words = {
                              0: "Zero",
                              1: "Un",
                              2: "Deux",
                              3: "Trois",
                              4: "Quatre",
                              5: "Cinq",
                              6: "Six",
                              7: "Sept",
                              8: "Huit",
                              9: "Neuf",
                              10: "Dix"
                          }
                          
                          phrase = "Bonjour on est le 10 Octobre"
                          mots = phrase.split()
                          
                          for nombre in mots:
                              for key, value in num_words.items():
                                  if nombre == str(key):
                                      phrase = phrase.replace(nombre, value)
                          
                          print(phrase)



                          -
                          Edité par Diablo76 il y a environ 4 heures

                          Merci beaucoup j’ai a peu près tout compris  mais a quoi sert "split" ?


                          split sert à séparer chaque mot dans la phrase à partir des espaces et les ajouter à la liste "mots".

                          De cette manière on peut comparer chaque "mot" avec le dictionnaire, on aurai pu comparer dans la boucle for chaque lettre de la phrase comme ceci:

                          for nombre in phrase:

                          mais au delà de 9 le script aurai affiché "UnZero" au lieu de "Dix

                          -
                          Edité par Diablo76 il y a environ 5 heures


                          Dans l'énoncé, on va seulement de 0 à 9, donc on a une entrée en trop dans le dictionnaire et du coup (toujours pour être "conforme" avec l'énoncé), on utiliserai chr(48+key) ou chr(ord('0')+key) au lieu de str(key)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 septembre 2020 à 21:31:37

                            En tout cas merci à tous pour votre aide .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 septembre 2020 à 3:26:24

                              > (on s'arrête à 9, mais on peut réfléchir à plus...)
                              C'est bien connu, la langue française est truffée d'exceptions ...
                              (l'anglais n'est guère mieux, mais on n'a pas twenty AND one, ninety nine est plus simple que quatre-vingt dix-neuf)
                              100 = cent, et pourquoi pas un cent
                              1000000 = un million et pas seulement million
                              on a de 1 à 20 puis de 20 à 50, puis 60 à79, 80 à 99 ...
                              21 = vingt et un, 22 = vingt deux , non?
                              71 s'écrit-il soixante et onze ... chez vous?
                              pourquoi pas de 's' à deux mille, et un 's' à deux millions?
                              On pourrait y aller par tranches de 1000 en indiquant si le 'mille' en question requière un 's' au pluriel.
                              puis une fonction pour les centaines et ce qui est inférieur à cent dans le groupe de 'mille' concerné.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Le Tout est souvent plus grand que la somme de ses parties.

                                17 septembre 2020 à 6:25:31

                                J'ai écrit un petit programme en Python pour convertir en mots les nombres de 1 à 10**18 - 1
                                Je   pense que l'orthographe est correcte et j'ose croire qu'il respecte les règles du français.
                                Ce serait plus simple en anglais, où il me semble que la seule exception soit pour les nombres de 1 à 20.
                                -
                                couple=lambda a, b: a+["", " "][a!="" and b!=""]+b
                                def dizaines(n):
                                    global vingt
                                    et=["", "et"][2<=n//10<=7 and n%10==1]
                                    if n//20 in [0, 3, 4]:
                                        return couple({0: "", 3: "soixante", 4: "quatre-vingt"}[n//20], couple(et, vingt[n%20]))
                                    else:
                                        return couple({2: "vingt", 3: "trente", 4: "quarante", 5: "cinquante"}[n//10], couple(et, vingt[n%10]))
                                def centaines(n):
                                    global vingt
                                    cen=""
                                    diz=dizaines(n%100)
                                    n=n//100
                                    if n>0:
                                        if n>1:
                                            cen=dizaines(n)
                                        cen=couple(cen, "cent")
                                    return couple(cen, diz)
                                def milliers(n):
                                    mil=""
                                    for p in range(15, 0, -3):
                                        if n >= 10**p:
                                            c=n//10**p
                                            if c==1 and p==3:
                                                c=0
                                            mil=couple(mil, centaines(c))
                                            mil=couple(mil, {3: 'mille', 6: 'million', 9: 'milliard', 12: 'billion', 15: 'billiard'}[p]+["", "s"][c>1 and p!=3])
                                            n=n%10**p
                                    return couple(mil, centaines(n))
                                vingt = {
                                    0: "", 1: 'un', 2: 'deux', 3: 'trois', 4: 'quatre', 5: 'cinq', 6: 'six',
                                    7: 'sept', 8: 'huit', 9: 'neuf', 10: 'dix', 11: 'onze',
                                    12: 'douze', 13: 'treize', 14: 'quatorze', 15: 'quinze', 16: 'seize',
                                     17: 'dix-sept', 18: 'dix-huit', 19: 'dix-neuf'
                                     }
                                while True:
                                    n=int(input("Nombre: "))
                                    print(milliers(n))
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Le Tout est souvent plus grand que la somme de ses parties.

                                Dictionnaires 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