Accueil > Forum > > > > Mon premier programme ne marche pas mais ne plante pas non plus
Mon premier programme ne marche pas mais ne plante pas non plus
mardi 16 février 2010 à 00:07:17 |
Mon premier programme ne marche pas mais ne plante pas non plus

ericstoclet
|
Bonjour a tous,
Je ne trouve pas l'erreur qui fait que mon programme ne fonctionne pas (liste4 et liste5 restent vides) :
Code Python : # -*- 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']
liste4 = ['']
liste5 = ['']
lettresGrdNbre = ['cent', 'mille', 'million', 'milliard']
##############################################################
##### Sous-fonction écrivant les nombres à 3 chiffres ####
##############################################################
def petitEnLettres(petit):
# Décomposition du nombre
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))
# Chiffre des dizaines (variable d) : 3eme cas
elif d>1:
liste4.append(liste3(d))
# Chiffre des unités (variable u) : 1er cas
if d==7 and u==1:
liste4.append('et')
# 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):
# Decomposition du nombre et conversion en lettres
milliards = millions = milliers = 0
resteNombre = nombre
milliards = int(nombre / 1000000000)
if milliards != 0:
resteNombre = resteNombre - milliards * 1000000000
liste5.append(petitEnLettres(milliards))
liste5.append('milliard')
if milliards > 1:
liste5.append('s')
millions = int(resteNombre/1000000)
if millions != 0:
resteNombre = resteNombre - millions * 1000000
liste5.append(petitEnLettres(millions))
liste5.append('million')
if millions > 1:
liste5.append('s')
milliers = int(resteNombre/1000)
if milliers > 1:
resteNombre = resteNombre - milliers * 1000
liste5.append(petitEnLettres(milliers))
liste5.append('mille')
if milliers == 1:
liste5.append('mille')
# Ajout de la monnaie, du reste en partie décimale
if nombre < 1:
liste5.append('zéro')
decimale = resteNombre - int(resteNombre)
liste5.append(monnaie[0])
if decimale != 0:
liste5.append(petitEnLettres(decimale))
liste5.append(monnaie[1])
return ' '.join(liste5)
# TEST DE FONCTIONNEMENT
test = 1
while test != '0':
print 'Entrez un nombre (0 pour sortir)'
test = input()
if test == 0:
break
print test, ':' , liste5, 'liste4 : ',liste4
|
|
vendredi 19 février 2010 à 17:20:48 |
Re : Mon premier programme ne marche pas mais ne plante pas non plus

laurent1024
|
C'est peut être parce que les deux fonctions (petitEnLettres et nombreEnLettres) qui mettent à jour les listes liste4 et liste5 ne sont pas appelées....
|
|
vendredi 19 février 2010 à 20:09:10 |
Re : Mon premier programme ne marche pas mais ne plante pas non plus

ericstoclet
|
Merci... J ai rajouté à la ligne 124 :
Code Python :
Malgrès ça, j'ai aucun retour pour les nombres à 1, 2 et 3 chiffres et un plantage pour les nombres à 4 :
Code : 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
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
Je raaame ! c pas si facile le python !
|
|
samedi 20 février 2010 à 00:41:11 |
Re : Mon premier programme ne marche pas mais ne plante pas non plus

laurent1024
|
TypeError: 'list' object is not callable
=> pour récupéré l'élément à la position i, il fait faire liste[i] et non liste(i).
Pour tes autres problème, il faut revoir ton code.
Rajoute, par exemple des print pour voir le contenu de tes variables "intermédiaires", et déterminer les blocs de code qui sont exécutés.
Cdt
|
|
samedi 20 février 2010 à 21:26:49 |
Re : Mon premier programme ne marche pas mais ne plante pas non plus

ericstoclet
|
Merci infiniment de ton aide ! Je n'aurais pas du faire cette erreur de syntaxe (liste (i) au lieu de liste[i])... A ma décharge je n'ai commencé à apprendre la programmation (et donc python) que depuis 8 jours...
Tes lumieres m'ont permis d'avancer et de corriger 7 erreurs de sémantique mais il m'en reste 2 :
Erreur n°1 : Malgrès la double condition en ligne 135, le nombre 0.23 retourne "et vingt trois centimes"
Erreur n°2 : Si le nombre entré a nécessité une éxecution des lignes 60 à 72 (traitant du cas des "70 à 79" et "90 à 99"), il me traduit le nombre mais avec un centime en moins...
une idée ? Voici mon code corrigé :
Code Python : # -*- 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)
|
|
samedi 20 février 2010 à 22:50:41 |
Re : Mon premier programme ne marche pas mais ne plante pas non plus

laurent1024
|
Réponse acceptée !
pb 1:
soit remplacer
Code Python : if nombre == 0:
liste5.append('zéro euro')
par
Code Python : if int(nombre) == 0:
liste5.append('zéro euro')
pour afficher "zéro euros et vingt trois centimes"
Soit remplacer
Code Python : if centimes != 0 and nombre != 0:
liste5.append('et')
par
Code Python : if centimes != 0 and nombre > 0:
liste5.append('et')
Pour l'autre problème, je ne vois pas trop, il faut vérifier la valeur de la variable u. Et vérifier l'item correspondant dans la liste.
Cdt
|
|
dimanche 21 février 2010 à 19:27:26 |
Re : Mon premier programme ne marche pas mais ne plante pas non plus

ericstoclet
|
Merci beaucoup, grâce à ton aide, j'ai pu finir ce script...
Reste plus qu'à fabriquer une interface qt pour me faire la main et continuer mon initiation !
Je projette de réaliser pyRecens, un logiciel gérant le recensement militaire des jeunes de 16 ans et donc, destiné aux mairies...
Si quelqu'un est interessé pour participer à ce projet ;)
Il existe bien la gamme OpenMairie mais c'est en PHP...
Mon projet sera dans un premier temps en Python/Qt4 et, je l espère, traduit ensuite en C++/Qt4
|
|
Cette discussion est classée dans : append, if, liste5, liste4, restenombre
Répondre à ce message
Sujets en rapport avec ce message
svp urgent [ par hasna1980 ]
salut je suis entrain de faire une view qui sert a afficher des modules autorises pour un utilisateur donne ,pr certains ca va afficher 1 module pr d
bot irc python problème rejoindre channel [ par Kuby ]
Bonjour, voila, après avoir un petit peu fouiller sur le net, j'ai reussi a trouver / modifier ceci : Mais je n'arrive pas à rejoindre de channel... a
tri de fichier [ par mtanfin ]
Bonjour;Alors voilà en fait je voudrais trier des fichiers en fonction de leur date de création. en fait le but est de regarder dans chaque fichier si
aide tkinter [ par coco02 ]
Bonjour,Je debute en programmation avec python depuis quelques jours.J'essaie de creer un petit programme simple pour controler l'efficacité d'une cli
programme a améliorer [ par samuel310 ]
Bonjour a tous,Je suis nouveau sur ce forum et débutant avec python.Je dois créer un petit jeu avec language python pour l'école, programme noté bien
Caractère de coupure + formfeed [ par bowbz ]
Bonjour, J'essaie de créer de multiples fichiers à partir d'un gros fichier. Dans ce gros fichier, il y a un séparateur que j'aimerai utiliser comme
changement des propriétés d'un objet [ par nikko76600 ]
Bonjour a tous et a toutes, Je suis débutant dans la programmation en python (j'ai commencé il y a 3 jours) et je pose ma première question ici (qui
gestion du temps de presence du personnel:rapatriement des données des pointeuses [ par etiennenono ]
bonjour, Il ya environ deux mois que je vous ai posé un probleme concernant les pointeuses, mais en ce moment je n'avais vraiment aucune idée. Entre t
aide pour Jeu puissance 4 [ par soso586 ]
bonjour, j'aimerai modifier ce code python pour que le jeu ne s'arrete pas lorsque le joueur à fait un alignement de 4 pions , mais 3 alignements.
Problèmme de code [ par DAAEz ]
Salut, Je me suis lancé dans un programme et la je rame ( à ce niveau la c'est plus des rames mais des cuillères...). Voyez plutôt par vous mêmes. Je
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|