Partage
  • Partager sur Facebook
  • Partager sur Twitter

[debutant] Mon programme ne fonctionne pas

Quand mon programme dépasse la ligne 126....

    8 décembre 2011 à 14:27:43

    Bonjour, tous le monde


    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
    • Partager sur Facebook
    • Partager sur Twitter
      8 décembre 2011 à 15:16:55

      devinez ce que fait mon programme et devinez s'il y a une message d'erreur ou si ça ne retourne pas le résultat attendu ...
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        8 décembre 2011 à 15:47:02

        Oups :euh:
        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.

        les calculs en série sont

        <math>\(Rparallele=(R1*R2)/(R1+R2)\)</math>
        <math>\(Rserie=R1+R2\)</math>

        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.
        • Partager sur Facebook
        • Partager sur Twitter
          8 décembre 2011 à 16:36:18

          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]

          on copie/colle mal ^^ ...
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            8 décembre 2011 à 22:51:55

            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]
            

            • Partager sur Facebook
            • Partager sur Twitter
              9 décembre 2011 à 8:32:25

              Merci pour vos réponse ^^


              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 :D , 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 :euh:

              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 :euh: 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 :D
              • Partager sur Facebook
              • Partager sur Twitter
                9 décembre 2011 à 9:21:58

                > mon ctrl C et V chauffais

                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 :lol:

                > 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

                Prof idiot. Mets une fonction quand même.

                • Partager sur Facebook
                • Partager sur Twitter
                  9 décembre 2011 à 10:05:54

                  Citation

                  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 ...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  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.
                  • Editeur
                  • Markdown