if nombre == 0: liste5.append('zéro euro')
if int(nombre) == 0: liste5.append('zéro euro')
if centimes != 0 and nombre != 0: liste5.append('et')
if centimes != 0 and nombre > 0: liste5.append('et')
nombreEnLettres(test)
Entrez un nombre (0 pour sortir) 12 12 : ['', ' euro(s)'] liste4 : [''] Entrez un nombre (0 pour sortir) 123 123 : ['', ' euro(s)', ' euro(s)'] liste4 : [''] Entrez un nombre (0 pour sortir) 1234 1234 : ['', ' euro(s)', ' euro(s)', 'mille', ' euro(s)'] liste4 : [''] Entrez un nombre (0 pour sortir) 12345 Traceback (most recent call last): File "Bureau/ecrireNombreEnLettres.py", line 124, in <module> nombreEnLettres(test) File "Bureau/ecrireNombreEnLettres.py", line 100, in nombreEnLettres liste5.append(petitEnLettres(milliers)) File "Bureau/ecrireNombreEnLettres.py", line 54, in petitEnLettres liste4.append(liste2(u)) TypeError: 'list' object is not callable
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question# -*- coding:Utf-8 -*- import sys, string, os # Ce code devrait permettre de transcrire un montant en euros en toutes lettres # Seulement, il se trouve que liste4 et liste5 restent desespérement vide... Pourquoi ? ### RAPPEL DES REGLES (je verrai ça quand ce code marchera) ### # On utilise des traits d'union pour écrire les nombres composés plus petits que cent sauf autour du mot et (qui remplace alors le trait d'union). # Partout ailleurs, il n'y a que des espaces. Exemples : dix-sept (17), vingt et un (21), trente-deux mille # Mille est toujours invariable, il ne prend donc pas de s à la fin. # Vingt et cent prennent un s à la fin quand ils sont multipliés et quand ils ne sont pas suivis d’un autre nombre. # Million(s) et milliard(s) prennent un s quand il y en a plusieurs. # Donnees utiles pour la fonction monnaie = [' euro(s)', ' centime(s)'] liste1 = ['', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf'] liste2 = ['dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf'] liste3 = ['', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante', 'quatre-vingt', 'quatre-vingt'] lettresGrdNbre = ['cent', 'mille', 'million', 'milliard'] ############################################################## ##### Sous-fonction écrivant les nombres à 3 chiffres #### ############################################################## def petitEnLettres(petit): liste4 = [''] # Décomposition du nombre restePetit c d = u = 0 restePetit = petit c = int(restePetit / 100) restePetit = restePetit - c * 100 d = int(restePetit / 10) restePetit = restePetit - d * 10 u = restePetit # Chiffre des centaines (variable c) : 1er cas - si c = 0 > AUCUNE ACTION # Chiffre des centaines (variable c) : 2eme cas if c==1: liste4.append('cent') # Chiffre des centaines (variable c) : 3eme cas elif c>1 and d+u == 0: liste4.append(liste1[c]) liste4.append('cents') # Chiffre des centaines (variable c) : dernier cas elif c>1 and d+u != 0: liste4.append(liste1[c]) liste4.append('cent') # Chiffre des dizaines (variable d) : 1er cas - si d = 0 > AUCUNE ACTION # Chiffre des dizaines (variable d) : 2eme cas if d==1: liste4.append(liste2[u]) u = 0 # Chiffre des dizaines (variable d) : 3eme cas elif d>1: liste4.append(liste3[d]) # Chiffre des unités (variable u) : cas des 7x et 9x if d==7 and u==1: liste4.append('et') liste4.append(liste2[u]) u=0 elif d==7 and u!=1: liste4.append(liste2[u]) u=0 elif d==9: liste4.append(liste2[u]) u=0 # Chiffre des unités (variable u) : tous les autres cas else: liste4.append(liste1[u]) return ' '.join(liste4) ######################################################################## ##### Fin de la sous-fonction écrivant les nombres à 3 chiffres #### ######################################################################## def nombreEnLettres(nombre): liste5 = [''] # Decomposition du nombre et conversion en lettres milliards millions milliers = 0 resteNombre = nombre if nombre == 0: liste5.append('zéro euro') milliards = int(nombre / 1000000000) if milliards == 1: resteNombre = resteNombre - milliards * 1000000000 liste5.append(petitEnLettres(milliards)) liste5.append('milliard') if milliards > 1: resteNombre = resteNombre - milliards * 1000000000 liste5.append(petitEnLettres(milliards)) liste5.append('milliards') millions = int(resteNombre/1000000) if millions == 1: resteNombre = resteNombre - millions * 1000000 liste5.append(petitEnLettres(millions)) liste5.append('million') if millions > 1: resteNombre = resteNombre - millions * 1000000 liste5.append(petitEnLettres(millions)) liste5.append('millions') milliers = int(resteNombre/1000) if milliers > 1: resteNombre = resteNombre - milliers * 1000 liste5.append(petitEnLettres(milliers)) liste5.append('mille') if milliers == 1: liste5.append('mille') unites = int(resteNombre) if unites == 1: resteNombre = resteNombre - unites liste5.append(petitEnLettres(unites)) liste5.append('euro') if unites > 1: resteNombre = resteNombre - unites liste5.append(petitEnLettres(unites)) liste5.append('euros') centimes = int(resteNombre * 100) if centimes != 0 and nombre != 0: liste5.append('et') if centimes == 1: resteNombre = resteNombre - centimes / 100 liste5.append(petitEnLettres(centimes)) liste5.append('centime') elif centimes > 1: resteNombre = resteNombre - centimes / 100 liste5.append(petitEnLettres(centimes)) liste5.append('centimes') return ' '.join(liste5) # TEST DE FONCTIONNEMENT test = 1 while test != '0': print 'Entrez un nombre ("exit" pour sortir)' test = input() if test == 'exit': break print "Réponse :", nombreEnLettres(test)