Partage
  • Partager sur Facebook
  • Partager sur Twitter

Écrire un nombre en toutes lettres

2011 -> "deux mille onze"

    17 avril 2011 à 3:07:46

    Bonjour


    Un exercice classique mais pas si facile. Il s'agit d'écrire un code Python résolvant le problème suivant :

    On donne un nombre entier entre 0 et 999999999999 (neuf cent quatre-vingt-dix-neuf milliards ...) sous forme d'une suite de chiffres décimaux (genre 421) et on doit renvoyer l'écriture en lettres de ce nombre (genre quatre cent vingt et un). Il s'agit de l'écriture en lettres telle qu'elle se pratique en France et pas en Belgique ou en Suisse.

    On appliquera strictement les règles d'écriture énoncés sur le site Le conjugueur. On pourra tester ses réponses dans l'applet disponible ICI.



    Le code Python testera les nombres suivants :


    0
    1
    2
    3
    4
    5
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    29
    30
    40
    42
    51
    60
    69
    70
    71
    77
    80
    81
    85
    90
    91
    99
    100
    101
    110
    130
    173
    196
    200
    205
    217
    223
    256
    268
    273
    280
    297
    734
    1000
    1001
    1017
    1020
    1032
    1111
    2000
    2011
    2100
    2200
    3003
    3780
    10000
    10005
    10900
    11000
    11700
    12000
    18805
    61400
    77010
    80000
    80078
    90000
    92002
    97459
    100000
    100007
    204003
    310857
    700005
    1000000
    2000000
    2001001
    72424600
    80000000
    79828480
    200000000
    708000000
    1000000000
    2000000000
    2000500000
    2000780001
    111111111111
    990990990990
    999999999999


    • Partager sur Facebook
    • Partager sur Twitter
      9 juillet 2014 à 0:05:23

      Pour vérifier l'écriture d'un nombre, le site ecrire-nombre.com vous aide. L'écriture en toute lettre par exemple de 421
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 juin 2017 à 23:59:32

        Désolé pour le déterrage mais j'ai terminé ma version, cela pourrait toujours servir a quelqu'un :

        import sys,cgi
        bases=[("milliard",1e9),("million",1e6),("mille",1e3),("cent",1e2),("quatre vingt",80),("soixante",60),("cinquante",50),("quarante",40),("trente",30),("vingt",20),("dix",10)]
        units=["zero","un","deux","trois","quatre","cinq","six","sept","huit","neuf",None,"onze","douze","treize","quatorze","quinze","seize"]
        
        def main(value,skip=-1):
        	if value < len(units) and units[value]:
        		return [] if value <= skip else [units[value]]
        	for name,v in bases:
        		if value>=v:
        			return main(int(value/v),1 if v <= 1000 else -1) + [name] + main(int(value%v), 0)
        print("\n"," ".join(main(int(cgi.FieldStorage().getvalue("val")))))

        testable via "python3 -m http.server --cgi" avec num.py dans ./cgi-bin/ ou via un shell:

        ./num.py val=72

        ce qui nous donne (je skip les easy du debut) :

          zero
          un
          ....
          vingt
          vingt un
          vingt neuf
          trente
          quarante
          quarante deux
          cinquante un
          soixante
          soixante neuf
          soixante dix
          soixante onze
          soixante dix sept
          quatre vingt
          quatre vingt un
          quatre vingt cinq
          quatre vingt dix
          quatre vingt onze
          quatre vingt dix neuf
          cent
          cent un
          cent dix
          cent trente
          cent soixante treize
          cent quatre vingt seize
          deux cent
          deux cent cinq
          deux cent dix sept
          deux cent vingt trois
          deux cent cinquante six
          deux cent soixante huit
          deux cent soixante treize
          deux cent quatre vingt
          deux cent quatre vingt dix sept
          sept cent trente quatre
          mille
          mille un
          mille dix sept
          mille vingt
          mille trente deux
          mille cent onze
          deux mille
          deux mille onze
          deux mille cent
          deux mille deux cent
          trois mille trois
          trois mille sept cent quatre vingt
          dix mille
          dix mille cinq
          dix mille neuf cent
          onze mille
          onze mille sept cent
          douze mille
          dix huit mille huit cent cinq
          soixante un mille quatre cent
          soixante dix sept mille dix
          quatre vingt mille
          quatre vingt mille soixante dix huit
          quatre vingt dix mille
          quatre vingt douze mille deux
          quatre vingt dix sept mille quatre cent cinquante neuf
          cent mille
          cent mille sept
          deux cent quatre mille trois
          trois cent dix mille huit cent cinquante sept
          sept cent mille cinq
          un million
          deux million
          deux million mille un
          soixante douze million quatre cent vingt quatre mille six cent
          quatre vingt million
          soixante dix neuf million huit cent vingt huit mille quatre cent quatre vingt
          deux cent million
          sept cent huit million
          un milliard
          deux milliard
          deux milliard cinq cent mille
          deux milliard sept cent quatre vingt mille un
          cent onze milliard cent onze million cent onze mille cent onze
          neuf cent quatre vingt dix milliard neuf cent quatre vingt dix million neuf cent quatre vingt dix mille neuf cent quatre vingt dix
          neuf cent quatre vingt dix neuf milliard neuf cent quatre vingt dix neuf million neuf cent quatre vingt dix neuf mille neuf cent quatre vingt dix neuf
        

        Oui, il manque les liaisons type vingt -ET- un, mais bon :-)


        -
        Edité par Anonyme 28 juin 2017 à 0:32:52

        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2020 à 18:02:41

          a écrit:

          Désolé pour le déterrage mais j'ai terminé ma version, cela pourrait toujours servir a quelqu'un :

          import sys,cgi
          bases=[("milliard",1e9),("million",1e6),("mille",1e3),("cent",1e2),("quatre vingt",80),("soixante",60),("cinquante",50),("quarante",40),("trente",30),("vingt",20),("dix",10)]
          units=["zero","un","deux","trois","quatre","cinq","six","sept","huit","neuf",None,"onze","douze","treize","quatorze","quinze","seize"]
          
          def main(value,skip=-1):
          	if value < len(units) and units[value]:
          		return [] if value <= skip else [units[value]]
          	for name,v in bases:
          		if value>=v:
          			return main(int(value/v),1 if v <= 1000 else -1) + [name] + main(int(value%v), 0)
          print("\n"," ".join(main(int(cgi.FieldStorage().getvalue("val")))))

          testable via "python3 -m http.server --cgi" avec num.py dans ./cgi-bin/ ou via un shell:

          ./num.py val=72

          ce qui nous donne (je skip les easy du debut) :

            zero
            un
            ....
            vingt
            vingt un
            vingt neuf
            trente
            quarante
            quarante deux
            cinquante un
            soixante
            soixante neuf
            soixante dix
            soixante onze
            soixante dix sept
            quatre vingt
            quatre vingt un
            quatre vingt cinq
            quatre vingt dix
            quatre vingt onze
            quatre vingt dix neuf
            cent
            cent un
            cent dix
            cent trente
            cent soixante treize
            cent quatre vingt seize
            deux cent
            deux cent cinq
            deux cent dix sept
            deux cent vingt trois
            deux cent cinquante six
            deux cent soixante huit
            deux cent soixante treize
            deux cent quatre vingt
            deux cent quatre vingt dix sept
            sept cent trente quatre
            mille
            mille un
            mille dix sept
            mille vingt
            mille trente deux
            mille cent onze
            deux mille
            deux mille onze
            deux mille cent
            deux mille deux cent
            trois mille trois
            trois mille sept cent quatre vingt
            dix mille
            dix mille cinq
            dix mille neuf cent
            onze mille
            onze mille sept cent
            douze mille
            dix huit mille huit cent cinq
            soixante un mille quatre cent
            soixante dix sept mille dix
            quatre vingt mille
            quatre vingt mille soixante dix huit
            quatre vingt dix mille
            quatre vingt douze mille deux
            quatre vingt dix sept mille quatre cent cinquante neuf
            cent mille
            cent mille sept
            deux cent quatre mille trois
            trois cent dix mille huit cent cinquante sept
            sept cent mille cinq
            un million
            deux million
            deux million mille un
            soixante douze million quatre cent vingt quatre mille six cent
            quatre vingt million
            soixante dix neuf million huit cent vingt huit mille quatre cent quatre vingt
            deux cent million
            sept cent huit million
            un milliard
            deux milliard
            deux milliard cinq cent mille
            deux milliard sept cent quatre vingt mille un
            cent onze milliard cent onze million cent onze mille cent onze
            neuf cent quatre vingt dix milliard neuf cent quatre vingt dix million neuf cent quatre vingt dix mille neuf cent quatre vingt dix
            neuf cent quatre vingt dix neuf milliard neuf cent quatre vingt dix neuf million neuf cent quatre vingt dix neuf mille neuf cent quatre vingt dix neuf
          

          Oui, il manque les liaisons type vingt -ET- un, mais bon :-)


          -
          Edité par Anonyme 28 juin 2017 à 0:32:52



          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2020 à 19:04:03

            il y a un sujet dessus lancé récemment par josmiley https://openclassrooms.com/forum/sujet/lheure-en-texte (ah et c'est un second déterrage du sujet à ce que je voit finalement)
            • Partager sur Facebook
            • Partager sur Twitter

            Écrire un nombre en toutes lettres

            × 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