Question débutant python
psykaram
Messages postés
86
Date d'inscription
Statut
Membre
Dernière intervention
-
psykaram Messages postés 86 Date d'inscription Statut Membre Dernière intervention -
psykaram Messages postés 86 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bonjour,
j ai suivi pas mal de tutos et a un certain moment j ai voulu mettre en oeuvre tous ce que j'ai appris en écrivent un code pour une petite calculette .
au moment ou j ai voulus combiner les opération comme (12+9)*(8/4)je n ai pas su quoi mettre .voila mon code
je voudrai quelque indice sur comment combiner les operation
Bonjour,
j ai suivi pas mal de tutos et a un certain moment j ai voulu mettre en oeuvre tous ce que j'ai appris en écrivent un code pour une petite calculette .
au moment ou j ai voulus combiner les opération comme (12+9)*(8/4)je n ai pas su quoi mettre .voila mon code
l1=["yes","ok","oui","ah"] yes="yes" ok="ok" oui="oui" ah="ah" Exit=0 while Exit not in l1: l=raw_input() r=0 if "+" in l: i=len(l.split("+"))-1 while i>-1: if i-2>=-1: r=r+(float(l.split("+")[i]) + float(l.split("+")[i-1])) if i==0: r=r+(float(l.split("+")[i])) i=i-2 if "-" in l: i=len(l.split("-"))-1 while i>-1: if i-2>=-1: r=r+(float(l.split("-")[i]) - float(l.split("-")[i-1])) if i==0: r=r+(float(l.split("-")[i])) i=i-2 if "*" in l: i=len(l.split("*"))-1 while i>-1: if i-2>=-1: r=r+(float(l.split("*")[i]) * float(l.split("*")[i-1])) if i==0: r=r+(float(l.split("*")[i])) i=i-2 if "/" in l: i=len(l.split("/"))-1 while i>-1: if i-2>=-1: r=r+(float(l.split("/")[i]) / float(l.split("/")[i-1])) if i==0: r=r+(float(l.split("/")[i])) i=i-2 print r Exit=str(input("exit?"))
je voudrai quelque indice sur comment combiner les operation
A voir également:
- Question débutant python
- Citizen code python avis - Accueil - Outils
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- \R python ✓ - Forum Python
- Mot secret python pix ✓ - Forum Python
4 réponses
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.
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
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