Je suis étudiant et j'apprends le langage python dans ma filière, et je suis coincé car mon programme ne fonctionne plus à partir du moment au je dépasse la ligne 126 de code. J'utilise spyder qui a été installé avec pythonXY 2.7.2
voici mon code
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 01 13:43:16 2011
@author: Julien Petitgirard
"""
uR1brut=raw_input("Entrer votre valeurs de résistance R1 avec son unité (exemple 10mohm, 0.1kohm ")
uR2brut=raw_input("Entrer votre valeurs de résistance R1 avec son unité (exemple 10mohm, 0.1kohm ")
# Je demande à l'utilisateur d'entrer les valeurs avec leurs unités, c'est pour
# cela que j'utilise raw_input pour que python le prenne comme une chaine de
# caractère que je pourrais manipuler plus facilement ci dessous.
while (len(uR1brut)<4) or (len(uR2brut)<4):
print "Veuillez bien rentrer la valeurs des résistances et leurs unités !"
uR1brut=raw_input("Entrer votre valeurs de résistance R1 avec son unité (exemple 10mohm, 0.1kohm ")
uR2brut=raw_input("Entrer votre valeurs de résistance R1 avec son unité (exemple 10mohm, 0.1kohm ")
# Pour que ce programme fonctionne il faut que l'utilisateur rentre obligatoirement
# l'unité avec ohm écris en toute lettre, de plus il faut qu'il écrive une valeurs,
# donc la chaine de caractère doit faire au minimum 4 caractères, si l'utilisateurs
# se trompe et que sa chaine ne fait pas plus de 4 caractères, je lui redemande les
# valeurs des résistances. Il y aura ci dessous une chaine pour tester si il a bien
# rentrer l'unité comme il faut même si la chaine est plus longue que 4 caractère
# Cette boucle est aussi utile pour que python ne plante pas car si la chaine fait
# moins de 4 caractères uR1brut[-4] n'existe pas et python plante et donc sa ne
# fonctionne pas ...
test1=True
test2=True
#Ces deux lignes donne une valeurs au variable qui feront que la boucle while fonctionnera
# lors de la première boucle. L'arret de cette boucle ne se fera que quand l'utilisateur
# entrera les bonnes données (sauf si c'est un singe qui tape en position -3 un o pour R1 ET R2
# et que le reste et incohérent, dans ce cas python plante)
while ((test1==True) and (test2==True)) : # Si test1 et test 2 sont faux la boucle s'arrete
if (uR1brut[-3]=="o"): # donc quand UR1brut[-3] et UR2brut[-3] ont un o. (sinon se référer l96)
test1=False
if (uR1brut[-4]=="n"):
uR1=float(uR1brut[0:-4]) # chaque if et elif de cet incrémentation teste
uR1=uR1*10**-9 # l'unité utilisé par l'utilisateur en position
elif (uR1brut[-4]=="u"): # -4 juste avant le 0 et donc lorsque le programme
uR1=float(uR1brut[0:-4]) # trouve l'unité (condition de if ou elif remplit)
uR1=uR1*10**-6 # je calcule uR1 (respectivement Ur2 l69 à l95)
elif (uR1brut[-4]=="m"): # en transformant la partie de chaine en float
uR1=float(uR1brut[0:-4])
uR1=uR1*10**-3
elif (uR1brut[-4]=="k"):
uR1=float(uR1brut[0:-4])
uR1=uR1*10**3
elif (uR1brut[-4]=="M"):
uR1=float(uR1brut[0:-4])
uR1=uR1*10**6
elif (uR1brut[-4]=="G"):
uR1=float(uR1brut[0:-4])
uR1=uR1*10**9
elif (uR1brut[-4]=="T"):
uR1=float(uR1brut[0:-4])
uR1=uR1*10**12
elif (uR1brut[-4]==" "): # Ici je teste quand il n'y a que ohm, si l'utilisateur
uR1=float(uR1brut[0:-4]) # à entrer un espace ou non.
uR1=uR1
else:
uR1=float(uR1brut[0:-3])
uR1=uR1
if (uR2brut[-3]=="o"):
test2=False
if (uR2brut[-4]=="n"):
uR2=float(uR1brut[0:-4])
uR2=uR2*10**-9
elif (uR2brut[-4]=="u"):
uR2=float(uR1brut[0:-4])
uR2=uR2*10**-6
elif (uR2brut[-4]=="m"):
uR2=float(uR2brut[0:-4])
uR2=uR2*10**-3
elif (uR2brut[-4]=="k"):
uR2=float(uR2brut[0:-4])
uR2=uR2*10**3
elif (uR2brut[-4]=="M"):
uR2=float(uR2brut[0:-4])
uR2=uR2*10**6
elif (uR2brut[-4]=="G"):
uR2=float(uR2brut[0:-4])
uR2=uR2*10**9
elif (uR2brut[-4]=="T"):
uR2=float(uR2brut[0:-4])
uR2=uR2*10**12
elif (uR2brut[-4]==" "):
uR2=float(uR2brut[0:-4])
uR2=uR2
else:
uR2=float(uR2brut[0:-3])
uR2=uR2
else: # si l'une des condition des deux if n'est pas remplit (0 en position -3) on redemande
test1=True # d'entrer les valeurs
test2=True
print "Veuillez bien rentrer la valeur des resistances et entrer l'unité en écrivant ohm en toute lettre !"
uR1brut=raw_input("Entrer votre valeurs de résistance R1 avec son unité (exemple 10mohm, 0.1kohm ")
uR2brut=raw_input("Entrer votre valeurs de résistance R1 avec son unité (exemple 10mohm, 0.1kohm ")
uRserie=uR1+uR2 # Je fais les calculs de résistance
uRparrallele=(uR1*uR2)/(uR1+uR2)
uRserie="%.2e" %(uRserie) # Je les transforme sous la forme de puissance avec deux chiffre
uRparrallele="%.2e" %(uRparrallele) # après la virgule, le type des variables est maintenant une chaine de
# de caractère, utile pour retransformer les puissances en une unité.
# de plus ces chaines auront toujours le même nombre de caractère
# disposé de cette facon (1.00e+14), ce qui est utile pour la suite.
# On va dans la prochaine boucle pour chaque puissance écrire le nombre sous la meilleur forme
if uRserie[5:8]=="+00":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "ohm"
elif uRserie[5:8]=="+01":
uRserie=uRserie[0]+uRserie[2]+uRserie[1]+uRserie[3] #méthode pour décaler le point de la chaine de caractère, j'utilise la concaténation
print "voici la valeurs de votre résistance en série :", uRserie, "ohm"
elif uRserie[5:8]=="+02":
uRserie==uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "ohm"
elif uRserie[5:8]=="+03":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "kohm"
elif uRserie[5:8]=="+04":
uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
print "voici la valeurs de votre résistance en série :", uRserie, "kohm"
elif uRserie[5:8]=="+05":
uRserie=uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "kohm"
elif uRserie[5:8]=="+06":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "Mohm"
elif uRserie[5:8]=="+07":
uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
print "voici la valeurs de votre résistance en série :", uRserie, "Mohm"
elif uRserie[5:8]=="+08":
uRserie=uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "Mohm"
elif uRserie[5:8]=="+09":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "Gohm"
elif uRserie[5:8]=="+10":
uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
print "voici la valeurs de votre résistance en série :", uRserie, "Gohm"
elif uRserie[5:8]=="+11":
uRserie=uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "Gohm"
elif uRserie[5:8]=="+12":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "Tohm"
elif (uRserie[5:7]=="+1") and (float(uRserie[7])>2):
uRserie=uRserie[0:6]+str(float(uRserie[7])-2)
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "Tohm"
elif uRserie[5:8]=="-01":
uRserie=uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "mohm"
elif uRserie[5:8]=="-02":
uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
print "voici la valeurs de votre résistance en série :", uRserie, "mohm"
elif uRserie[5:8]=="-03":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "mohm"
elif uRserie[5:8]=="-04":
uRserie=uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "uohm"
elif uRserie[5:8]=="-05":
uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
print "voici la valeurs de votre résistance en série :", uRserie, "uohm"
elif uRserie[5:8]=="-06":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "uohm"
elif uRserie[5:8]=="-07":
uRserie=uRserie[0]+uRserie[2:4]
print "voici la valeurs de votre résistance en série :", uRserie, "uohm"
elif uRserie[5:8]=="-08":
uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
print "voici la valeurs de votre résistance en série :", uRserie, "nohm"
elif uRserie[5:8]=="-09":
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "nohm"
elif (uRserie[5:7]=="-1"):
uRserie=uRserie[0:6]+str(-float(uRserie[7])-1)
print "voici la valeurs de votre résistance en série :", uRserie[0:4], "nohm"
else:
print "Voici la valeurs de votre résistance en série :", uRserie
# PARALL7LE
if uRparrallele[5:8]=="+00":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "ohm"
elif uRparrallele[5:8]=="+01":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uRparrallele[1]+uRparrallele[3] #méthode pour décaler le point de la chaine de caractère, j'utilise la concaténation
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "ohm"
elif uRparrallele[5:8]=="+02":
uRparrallele==uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "ohm"
elif uRparrallele[5:8]=="+03":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "kohm"
elif uRparrallele[5:8]=="+04":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uR[serie[1]+uRparrallele[3]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "kohm"
elif uRparrallele[5:8]=="+05":
uRparrallele=uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "kohm"
elif uRparrallele[5:8]=="+06":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "Mohm"
elif uRparrallele[5:8]=="+07":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uR[serie[1]+uRparrallele[3]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "Mohm"
elif uRparrallele[5:8]=="+08":
uRparrallele=uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "Mohm"
elif uRparrallele[5:8]=="+09":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "Gohm"
elif uRparrallele[5:8]=="+10":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uR[serie[1]+uRparrallele[3]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "Gohm"
elif uRparrallele[5:8]=="+11":
uRparrallele=uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "Gohm"
elif uRparrallele[5:8]=="+12":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "Tohm"
elif (uRparrallele[5:7]=="+1") and (float(uRparrallele[7])>2):
uRparrallele=uRparrallele[0:6]+str(float(uRparrallele[7])-2)
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "Tohm"
elif uRparrallele[5:8]=="-01":
uRparrallele=uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "mohm"
elif uRparrallele[5:8]=="-02":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uR[serie[1]+uRparrallele[3]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "mohm"
elif uRparrallele[5:8]=="-03":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "mohm"
elif uRparrallele[5:8]=="-04":
uRparrallele=uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "uohm"
elif uRparrallele[5:8]=="-05":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uR[serie[1]+uRparrallele[3]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "uohm"
elif uRparrallele[5:8]=="-06":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "uohm"
elif uRparrallele[5:8]=="-07":
uRparrallele=uRparrallele[0]+uRparrallele[2:4]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "uohm"
elif uRparrallele[5:8]=="-08":
uRparrallele=uRparrallele[0]+uRparrallele[2]+uR[serie[1]+uRparrallele[3]
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele, "nohm"
elif uRparrallele[5:8]=="-09":
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "nohm"
elif (uRparrallele[5:7]=="-1"):
uRparrallele=uRparrallele[0:6]+str(-float(uRparrallele[7])-1)
print "voici la valeurs de votre résistance en parrallèle :", uRparrallele[0:4], "nohm"
else:
print "Voici la valeurs de votre résistance en parrallèle :", uRparrallele
Merci
PS : J'ai oublier les incrémentation a la fin mais même avec sa ne fonctionne pas
Oups
Le but du programme est de calculer la valeurs de deux résistances en série ou en parallèle entrer par l'utilisateur avec l'unité de l'utilisateur.
L'élément qui complique le programme (les profs ont les idées tordu :s), c'est que l'utilisateur rentre ses valeurs avec l'unités (ex : 156.01kohm pour R1 et 2589.655889uohm pour R2)
Donc pour les traiter je dois les multiplier par les bonnes puissances correpondant aux unité ( m=milli= 10^-3, ou u=micro 10^-6 etc...)
Ensuite le résultat trouver dois être afficher sous la forme optimal avec la bonne unité.
Mais je pense que le problème ne viens pas spécifiquement du code mais peut-être du logiciel utilisé, il bloque a la ligne 126 tous le temps même quand je le modifie. Toute les ligne d'avant fonctionne (testé avant que je dépasse cette modite ligne), des lignes de code qui sont après sont des copié collé de ligne avant, et il me met quand même erreur synthaxe alors qu'il y en a aucune, autrement elle serait aussi présente dans les lignes précédentes.
ligne 120 je vois une comparaison ... uRserie==uRserie[0]+uRserie[2:4]
ligne 125 il y a un '[' en trop ... uRserie=uRserie[0]+uRserie[2]+uR[serie[1]+uRserie[3]
Rarement vu un code aussi à chier (sauf peut-être dans la section php, ce qui est déjà en soi moins une surprise...)
Donc quand on tape 10 fois le même code, c'est le signe qu'il aurait fallu créer une fonction. Ou une classe. Ou un truc, n'importe quoi, sauf ... cette chose !!!!!
Par exemple,
Multiplicateurs = {
"n": 1e-9,
"u": 1e-6,
"m": 1e-3,
"": 1,
"k": 1e3,
"M": 1e6,
"G": 1e9,
}
# prend une chaine de la forme "1.234k" et renvoie 1234
def convertit_chaine_en_nombre( chaine ):
nombre, multiplicateur = re.match( r"^([\de+-.]+?)(.?)$", chaine.strip() ).groups()
return float(nombre) * Multiplicateurs[multiplicateur]
Alors, tu n'as pas vu les expressions régulières. Donc :
# prend une chaine de la forme "1.234k" et renvoie 1234
def convertit_chaine_en_nombre( chaine ):
coupe la chaine en "un nombre" suivi de "une lettre"
ceturn float(nombre) * Multiplicateurs["la lettre"]
Ça ne sert à rien de rentrer "ohms", si le programme demande une résistance, on sait que c'est des ohms...
Etape suivante : coder une fonction qui fait l'inverse.
Ceci est ingénieux :
uRserie="%.2e" %(uRserie) # Je les transforme sous la forme de puissance avec deux chiffre
uRparrallele="%.2e" %(uRparrallele) # après la virgule, le type des variables est maintenant une chaine de
# de caractère, utile pour retransformer les puissances en une unité.
# de plus ces chaines auront toujours le même nombre de caractère
# disposé de cette facon (1.00e+14), ce qui est utile pour la suite.
Il suffit de remplacer les 200 lignes suivantes par :
M = {"e-09": "n",
"e-06": "u",
"e-03": "m",
"e+00": "",
"e+03" : "k",
"e+06" : "G"
}
def convertit_nombre_en_chaine( nombre ):
r = "%+.3e" % nombre
mantisse = r[:5]
exp = r[6:]
return mantisse.replace("+","")+M[exp]
josmiley tu m'as sauvé, il me mettais l'erreur sur la ligne 126, alors je copiais collais une ligne précédente qui fonctionnais sur cette ligne pour être sur qu'il n'y ai pas de faute de syntaxe mais en faite elle se cachais ligne 125
J'espère pas vous avoir faire perdre du temps mais bon j'ai vu que c'était un site pour les zéro , j'e crois que j'en fais parti.
Lord Casque Noir, j'ai pas tous compris ce que tu m'as expliquer sur les fonctions mais j'ai compris le principe, ce qui a l'air très utile (mon ctrl C et V chauffais). Mais nos prof d'info nous ont pas encore fais de cours dessus et quand ils nous donnent un exo c'est pour appliquer un cours déjà fais, donc je ne peux pas utiliser les fonctions, c'est pour sa que je fais un code lourdingue pas beau
Mais bon je crois que dès que j'aurai le temps de voir comment fonctionne les fonctions , je verrai comment améliorer mon petit programme, sa serait un bon petit exercice.
Merci beaucoup de votre aide
Bonne continuation, il y a surement des chances que je repasse avec mes petites questions de débutant J'éviterai quand même de faire une aussi grosse erreur a l'avenir
EDIT : Sa y est j'ai compris comment fonctionne tes modifications Lord Casque Noir, sa va me servir merci beaucoup
Dans un ancien job, on avait un machin assez gros qui avait été codé par un boulet et qui avait massivement abusé du copier-coller... à chaque fois qu'on corrigeait un bug dans un bout de code, il fallait retrouver les 15 autres endrotis où le même bout de code avait été copié-collé avec le même bug
> Mais nos prof d'info nous ont pas encore fais de cours dessus et quand ils nous donnent un exo c'est pour appliquer un cours déjà fais,
> donc je ne peux pas utiliser les fonctions
il me mettais l'erreur sur la ligne 126, alors je copiais collais une ligne précédente qui fonctionnais sur cette ligne pour être sur qu'il n'y ai pas de faute de syntaxe mais en faite elle se cachais ligne 125
l'interpréteur ne comprenait pas pourquoi il manquait un ] à la ligne 126 puisqu'il avait croisé un [ à la 125 ...
Python c'est bon, mangez-en.
[debutant] Mon programme ne fonctionne pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.