Question débutant python
Fermé
psykaram
Messages postés
86
Date d'inscription
mardi 28 décembre 2010
Statut
Membre
Dernière intervention
26 juin 2017
-
24 juil. 2012 à 05:59
psykaram Messages postés 86 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 26 juin 2017 - 24 juil. 2012 à 17:53
psykaram Messages postés 86 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 26 juin 2017 - 24 juil. 2012 à 17:53
A voir également:
- Question débutant python
- Citizen code python avis - Accueil - Outils
- Logiciel de programmation pour débutant - Guide
- Python generator - Télécharger - Sécurité
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
4 réponses
dna.factory
Messages postés
25659
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
31 mars 2025
1 615
24 juil. 2012 à 07:24
24 juil. 2012 à 07:24
je suis pas spécialiste en python, mais ton problème est au niveau de l'algo...
Tu ne t'y connais pas encore assez pour faire un calculatrice complexe (opération multiples).
Cela nécessite l'utilisation de piles (FIFO) qui te seront surement présentée dans les chapitres à venir. et de la gestion de caractère un par un.
au passage, un controle de caractère est généralement apprécié. ne serait-ce que pour éviter la division par zéro.
Tu ne t'y connais pas encore assez pour faire un calculatrice complexe (opération multiples).
Cela nécessite l'utilisation de piles (FIFO) qui te seront surement présentée dans les chapitres à venir. et de la gestion de caractère un par un.
au passage, un controle de caractère est généralement apprécié. ne serait-ce que pour éviter la division par zéro.
tuxboy
Messages postés
995
Date d'inscription
lundi 23 juillet 2012
Statut
Membre
Dernière intervention
28 mai 2019
190
24 juil. 2012 à 10:33
24 juil. 2012 à 10:33
Bonjour,
La fonction eval, tu connais ?
import math
import re
def psy_eval(expr, symbols={}):
return eval(expr, dict(__builtins__=None), symbols)
def calc(expr):
return psy_eval(expr, vars(math))
print calc('(12+9)*(8/4)') # 42
La fonction eval, tu connais ?
import math
import re
def psy_eval(expr, symbols={}):
return eval(expr, dict(__builtins__=None), symbols)
def calc(expr):
return psy_eval(expr, vars(math))
print calc('(12+9)*(8/4)') # 42
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 24/07/2012 à 11:15
Modifié par heyquem le 24/07/2012 à 11:15
Bonjour
Je crois que tu t'es donné en effet un exercice un peu trop ambitieux. Ce que tu veux faire est trop compliqué, car il faudra aussi gérer les priorités d'opérations et les parenthèses qui peuvent être imbriquées et ce sera pas de la tarte.
Or ton code est déjà trop compliqué alors qu'il ne traite que des cas hyper simples: que des +, ou que des -, etc. D'après ce que j'ai pu voir rapidement.
De plus, même pour ces cas simples, il est faux.
Si on entre par exemple 100 - 5, on obtient -95
Si on entre 2*2*5, on obtient 12
Il te faudrait étudier un peu plus Python pour penser à des solutions plus condensées, sinon avec simplement split() et des if, ton code atteindrait une longueur phénoménale.
Par exemple, en utilisant sum() et les expressions régulières, on peut traiter le cas des chaînes ne contenant que des nombres et les signes + et -:
Ce code tient compte des cas où on écrit une chaîne commençant par un nombre positif sans spécifier le signe + ( \A dans le motif de regex signifie "là doit se trouver le début de la chaîne", et un peu plus loin | signifie OU ; de fait (\A| *[+-]) envisage deux cas possibles)
Mais étudier les expressions régulières va te prendre un paquet d'heures. Nota Bene: les expressions régulières sont INDISPENSABLES à connaître en programmation.
Débuter en Python est aisé, ensuite ça se corse parce que c'est un lmangage extrêmemnt puissant. Mais rassure toi, c'est toujours moins compliqué de progresser en Python que dans des langages dantesques comme C++ ou Java
Je crois que tu t'es donné en effet un exercice un peu trop ambitieux. Ce que tu veux faire est trop compliqué, car il faudra aussi gérer les priorités d'opérations et les parenthèses qui peuvent être imbriquées et ce sera pas de la tarte.
Or ton code est déjà trop compliqué alors qu'il ne traite que des cas hyper simples: que des +, ou que des -, etc. D'après ce que j'ai pu voir rapidement.
De plus, même pour ces cas simples, il est faux.
Si on entre par exemple 100 - 5, on obtient -95
Si on entre 2*2*5, on obtient 12
Il te faudrait étudier un peu plus Python pour penser à des solutions plus condensées, sinon avec simplement split() et des if, ton code atteindrait une longueur phénoménale.
Par exemple, en utilisant sum() et les expressions régulières, on peut traiter le cas des chaînes ne contenant que des nombres et les signes + et -:
import re rig = re.compile('(\A| *[+-]) *([.,\d]+)') while True: ss = raw_input("\nEntrer l'expression : ") print 'r ==',sum(-float(nb) if '-' in signe else float(nb) for signe,nb in rig.findall(ss))
Ce code tient compte des cas où on écrit une chaîne commençant par un nombre positif sans spécifier le signe + ( \A dans le motif de regex signifie "là doit se trouver le début de la chaîne", et un peu plus loin | signifie OU ; de fait (\A| *[+-]) envisage deux cas possibles)
Mais étudier les expressions régulières va te prendre un paquet d'heures. Nota Bene: les expressions régulières sont INDISPENSABLES à connaître en programmation.
Débuter en Python est aisé, ensuite ça se corse parce que c'est un lmangage extrêmemnt puissant. Mais rassure toi, c'est toujours moins compliqué de progresser en Python que dans des langages dantesques comme C++ ou Java
psykaram
Messages postés
86
Date d'inscription
mardi 28 décembre 2010
Statut
Membre
Dernière intervention
26 juin 2017
12
24 juil. 2012 à 17:53
24 juil. 2012 à 17:53
merci pour vos réponses je me remet au travaille tout de suite.
a bientôt pour un code plus élaboré
a bientôt pour un code plus élaboré