Python, probleme de type...
Résolu/Fermé
pyhtnewbie
-
10 mars 2010 à 11:57
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 10 mars 2010 à 15:14
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 10 mars 2010 à 15:14
A voir également:
- Python, probleme de type...
- Citizen code python avis - Accueil - Outils
- Clear type - Guide
- Faiblesse type psy ✓ - Forum Jeux vidéo
- Indiquez l'unité pour la taille de ces fichiers. type document texte brut taille 8,1 ?? première réponse à trouver longueur 8085 caractères type image jpeg taille 3,0 ?? deuxième réponse à trouver dimension 3776 × 2124 px type vidéo mpeg-4 taille 1,1 ?? troisième réponse à trouver durée 02:01:15 - Forum Google Chrome
4 réponses
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
10 mars 2010 à 13:54
10 mars 2010 à 13:54
Bonjour,
De quel problème parles-tu ? Il faut indiquer ce qui ne va pas, et même poster le message d'erreur pour être aidé plus facilement.
Python a une gestion des erreurs très intéressante , il faut en profiter. Non seulement en postant le message d'erreur, mais en l'analysant. Ça m'étonnerait que sur un programme aussi simple, le message d'erreur ne permette pas de comprendre rapidement la source d'un problème.
J'ai essayé ton code: il tourne correctement. Pas vu de problème.
Par contre il peut être amélioré dans sa rédaction.
Inutile de faire
Il faut prendre l'habitude de te dire que Python ne laisse pas au progammeur la charge de taches aussi bas niveau. Il y a plus d'aisance à utiliser Python. Le I=len(n)-1 , il le fait lui même dans xarnge(len())
for i in xrange(1,4) signifie que i prend les valeurs 1, 2,3 et s'arrète AVANT 4
for i in xrange(4) signifie que i prend les valeurs 0,1,2,3. Le zéro comme premier argument est implicite.
for i in xrange(1,16,3) sgnifie que le pas d'itération est 3: i prend les valeurs 1,4,7,0,13 (il s'arrête AVANtT 16
Et ensuite, si tu veux itérer en sens inverse, Python s'en occupe aussi
for i in xrange(20,12,-3) : i prend les valeurs 20,18,16,14 (il s'arrête AVANT 12)
Donc ton code peut devenir:
Ensuite, il faut t'imprégner de l'esprit Python:
quand le programme s'y prête , on a la facilité de pouvoir itérer sur les objets eux mêmes et non pas leur indice dans une liste:
On itère sur les objets mais ça n'empêche pas de sélectionner les objets par jeu d'indices:
donne
artichaut
456
vinaigrette
89
Et avec des pas
donne
artichaut
vinaigrette
salami
donne
876
12
89
456
donne
876
coriandre
12
salami
89
vinaigrette
456
artichaut
18
Ton code peut donc encore se simplifier en
Ce n'est pas fini, on peut encore simplifier. Mais je te laisse absorber ceci.
PS
jette un œil sur la fonction enumerate() : elle est très très utile, et très rapide, et peut être utilisée pour ton code
De quel problème parles-tu ? Il faut indiquer ce qui ne va pas, et même poster le message d'erreur pour être aidé plus facilement.
Python a une gestion des erreurs très intéressante , il faut en profiter. Non seulement en postant le message d'erreur, mais en l'analysant. Ça m'étonnerait que sur un programme aussi simple, le message d'erreur ne permette pas de comprendre rapidement la source d'un problème.
J'ai essayé ton code: il tourne correctement. Pas vu de problème.
Par contre il peut être amélioré dans sa rédaction.
Inutile de faire
I=len(n)-1 while I>=0: .... I=I-1 ....
Il faut prendre l'habitude de te dire que Python ne laisse pas au progammeur la charge de taches aussi bas niveau. Il y a plus d'aisance à utiliser Python. Le I=len(n)-1 , il le fait lui même dans xarnge(len())
for i in xrange(1,4) signifie que i prend les valeurs 1, 2,3 et s'arrète AVANT 4
for i in xrange(4) signifie que i prend les valeurs 0,1,2,3. Le zéro comme premier argument est implicite.
for i in xrange(1,16,3) sgnifie que le pas d'itération est 3: i prend les valeurs 1,4,7,0,13 (il s'arrête AVANtT 16
Et ensuite, si tu veux itérer en sens inverse, Python s'en occupe aussi
for i in xrange(20,12,-3) : i prend les valeurs 20,18,16,14 (il s'arrête AVANT 12)
Donc ton code peut devenir:
# coding: utf-8 def coef(x,n): C=0 F=0 for I in xrange( len(n)-1,-1,-1): A=n[I] int(A) F=F+A*(x**C) C=C+1 return F
Ensuite, il faut t'imprégner de l'esprit Python:
quand le programme s'y prête , on a la facilité de pouvoir itérer sur les objets eux mêmes et non pas leur indice dans une liste:
liste = [18,'artichaut',456,'vinaigrette',89,'salami',12,'coriandre',876] for u in liste: print u
On itère sur les objets mais ça n'empêche pas de sélectionner les objets par jeu d'indices:
liste = [18,'artichaut',456,'vinaigrette',89,'salami',12,'coriandre',876] for u in liste[1:5]: print u
donne
artichaut
456
vinaigrette
89
Et avec des pas
liste = [18,'artichaut',456,'vinaigrette',89,'salami',12,'coriandre',876] for u in liste[1:7:2]: print u
donne
artichaut
vinaigrette
salami
liste = [18,'artichaut',456,'vinaigrette',89,'salami',12,'coriandre',876] for u in liste[8:0:-2]: print u
donne
876
12
89
456
liste = [18,'artichaut',456,'vinaigrette',89,'salami',12,'coriandre',876] for u in liste[::-1]: print u
donne
876
coriandre
12
salami
89
vinaigrette
456
artichaut
18
Ton code peut donc encore se simplifier en
# coding: utf-8 def coef(x,n): C=0 F=0 for A in n[::-1]: F=F+A*(x**C) C=C+1 return F
Ce n'est pas fini, on peut encore simplifier. Mais je te laisse absorber ceci.
PS
jette un œil sur la fonction enumerate() : elle est très très utile, et très rapide, et peut être utilisée pour ton code
Pour l'éreur:
line 10, in coef
F=F+A*(x**C)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Si je rajoute:
F=F+int(A*(x**C))
Il n'y a plus d'ereurs mais le résultat est tout a fait abérant...
Sinon merci beaucoup pour tes conseil de simplification: je débute et toute aide est la bien venue :) !!!
line 10, in coef
F=F+A*(x**C)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Si je rajoute:
F=F+int(A*(x**C))
Il n'y a plus d'ereurs mais le résultat est tout a fait abérant...
Sinon merci beaucoup pour tes conseil de simplification: je débute et toute aide est la bien venue :) !!!
Je vient de trouver la solution et je suis vraiment trop bete: j'ai écrit int(A) au lieu de A=int(A), éreur que tu a dus corriger sans meme t'en rendre compte ^^'...En tout cas je travaille sur tes simplifications, merci!
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
10 mars 2010 à 15:14
10 mars 2010 à 15:14
Non , je n'ai rien corrigé: en recopiant ton code, en mettant l'indentation correcte, et run, ça m'affiche 4.
Mais je passe une liste d'entiers à la fonction, pas une liste de strings. Le int(A) ne sert à rien dans ce cas et ne cause pas non plus d'errreur
Est-ce que toi tu passes une liste de strings ?
# coding: utf-8 def coef(x,n): I=len(n)-1 C=0 F=0 while I>=0: A=n[I] int(A) F=F+A*(x**C) I=I-1 C=C+1 return F print coef(3,[1,-2,1])
Mais je passe une liste d'entiers à la fonction, pas une liste de strings. Le int(A) ne sert à rien dans ce cas et ne cause pas non plus d'errreur
Est-ce que toi tu passes une liste de strings ?