Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mes programmes au fil de mon apprentissage

Débutant qui apprend le python

    11 février 2011 à 10:13:11

    Bonjour,
    Bien voilà, je me suis dit, "sabrovitch, tu ne vas pas flooder, tu vas tout centraliser sur un topic : tes problèmes, tes programmes ect..." et c'est ce que je fais. Voilà une ébauche de programme à tout faire en Math :
    from math import sqrt, sin, cos, tan, asin, acos, atan
    while 1:
        print("que voulez vous faire ?")
        print("1: calculatrice")
        print("2: résoudre une équation du second degré")
        print("3: calculer l'énergie cinétique")
        print("4: calculer l'énergie potentielle")
        print("5: calculer l'intéraction gravitationnelle entre deux objets")
        print("6: calculer l'intéraction magnétique entre deux objets")
        print("7: calculer la tension d'un ressort")
        k = int(input())
        if k==1 :
            print("veuillez choisir une opération à effectuer dans la liste suivante : ")
            print("1: multiplication")
            print("2: addition")
            print("3: division")
            print("4: racine carrée")
            print("5: sinus")
            print("6: cosinus")
            print("7: tangente")
            print("8: arcsinus")
            print("9: arccos")
            print("10: arctan")
            c = int(input("opération choisie: "))
            if c<=3 :
                a = float(input("veuillez saisir la première valeur : "))
                b = float(input("veuillez saisir la seconde valeur : "))
                print("le résultat est :")
                if c == 1 :
                    print(a*b)
                elif c == 2 :
                    print(a+b)
                elif c == 3 :
                    print(a/b)
            if c>=4 :
                a = float(input("veuillez choisir une valeur : "))
                print("le résultat est :")
                if c==4 :
                    if a<0 :
                        print("il n'y a pas de racine carrée d'un nombre négatif dans l'ensemble des réels")
                    elif a>=0 :
                        print(sqrt(a))
                elif c==5 :
                    print(sin(a))
                elif c==6 :
                    print(cos(a))
                elif c==7 :
                    print(tan(a))
                elif c==8 :
                    if a>1 or a<1 :
                        print("le sinus d'un nombre appartient à [-1;1]")
                    else :
                        print(asin(a))
                elif c==9 :
                    if a>1 or a<1 :
                        print("le cosinus d'un nombre appartient à [-1;1]")
                    else :
                        print(acos(a))
                elif c==10 :
                    if a>1 or a<1 :
                        print("la tangente d'un nombre appartient à [-1;1]")
                    else :
                        print(atan(a))
        elif k==2 :
            print("trouver les racines d'un polynôme du second degré")
            print("ax²+bx+c")
            a = float(input("entrez la valeur de a dans ax² : "))
            b = float(input("entrez la valeur de b dans bx : "))
            c = float(input("entrez la valeur de c dans c : "))
            x = float((b*b)-(4*a*c))
            print("Δ=",x)
            if x<0:
                print("le polynôme n'a pas de racines")
            elif x>=0:
                y=sqrt(x)
                print("la racine carrée de Δ est :",y)
                if x==0:
                    d=(-b/(2*a))
                    print("la racine du polynôme est : ",d)
                if x>0:
                    d=((-b-y)/(2*a))
                    e=((-b+y)/(2*a))
                    print("les racines du polynôme sont :",d)
                    print("et :",e)
        elif k==3 :
            a=float(input("saisissez la valeur de la masse de l'objet (en kg) : "))
            b=float(input("saisissez la valeur de la vitesse de l'objet (en m/s) : "))
            c=float((1/2)*a*(b*b))
            print("l'énergie cinétique du système est Ec=",c,"J")
        elif k==4 :
            print("connaissez-vous la valeur du poids ou la valeur de la masse ?")
            print("1: poids")
            print("2: masse")
            i=int(input())
            if i==1 :
                a=float(input("saisissez la valeur du poids de l'objet (en N) : "))
                b=float(input("saisissez la valeur de z par rapport à l'axe O--Z-> (en mètres): "))
                c=float(a*b)
                print("la valeur de l'énergie potentielle est Ep=",c,"J")
            elif i==2 :
                print("voulez vous utiliser la valeur de la gravité sur terre ou en donner une autre ?")
                print("1: utiliser la valeur de la gravité sur terre")
                print("2: utiliser une autre valeur")
                o=int(input())
                if o==1 :
                    a=float(input("saisissez la valeur de la masse de l'objet (en kg) : "))
                    b=float(input("saisissez la valeur de z par rapport à l'axe O--Z-> (en mètres): "))
                    c=float(a*9.81*b)
                    print("la valeur de l'énergie potentielle est Ep=",c,"J")
                elif o==2 :
                    a=float(input("saisissez la valeur de la masse de l'objet (en kg) : "))
                    b=float(input("saisissez la valeur de z par rapport à l'axe O--Z-> (en mètres): "))
                    d=float(input("saisissez la valeur de l'accélération de la gravité (en m.s-2) : "))
                    c=float(a*b*d)
                    print("la valeur de l'énergie potentielle est Ep=",c,"J")
        elif k==5 :
            print("Fa/b=Fb/a=F")
            a=float(input("saisissez la valeur de la masse de a (en kg) : "))
            b=float(input("saisissez la valeur de la masse de b (en kg) : "))
            c=float(input("saisissez la valeur de la distance entre a et b (en mètres) : "))
            d=float((a*b)/(c*c))
            print("la valeur de l'intéraction gravitationelle est F=",d,"N")
        elif k==6 :
            print("Fa/b=Fb/a=F")
            a=float(input("saisissez la valeur de la charge de a (en coulomb) : "))
            b=float(input("saisissez la valeur de la charge de b (en coulomb) : "))
            d=float(input("saisissez la valeur de la distance entre a et b (en mètres) : "))
            c=float(a*b)
            if c<0 :
                e=float((9.0*10**-9)*((-c)/(d*d)))
                print("la valeur de l'intéraction magnétique est F=",e,"N")
            elif c>=0 :
                e=float((9.0*10**-9)*((c)/(d*d)))
                print("la valeur de l'intéraction magnétique est F=",e,"N")
        elif k==7 :
            print("T=k|l-l0|")
            a=float(input("saisissez la valeur de la constante de raideur k (en N/m) : "))
            b=float(input("saisissez la valeur de la longueur du ressort étendu : "))
            c=float(input("saisissez la valeur de la longueur du ressort non étendu : "))
            d=float(b-c)
            if d<0 :
                e=int(a*(-d))
                print("la valeur de la tension du ressort est T=",e,"J")
            elif d>=0 :
                e=int(a*d)
                print("la valeur de la tension du ressort est T=",e,"J")
    


    PS : J'utilise Python 3.x
    PPS : J'ai commencé Python hier, et c'est mon premier programme, normal qu'il soit basique ;) Vais regarder les modules moi maintenant !
    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2011 à 11:31:18

      Salut,

      Tu vas te faire taper sur les doigts! Pas de bonjour ni rien pour commencer ton post! :-°
      D'autre part, on ne comprend pas ce que tu veux. Si t'as une question à poser à la communauté des Zéros, pose là clairement. Si c'est juste pour poster tes programmes, je ne pense pas que ce soit la fonction du forum.
      Après je suis pas modo, mais bon... :)
      • Partager sur Facebook
      • Partager sur Twitter
        11 février 2011 à 12:08:46

        Tu as raison ;) Bonjour ajouté, désolé.
        Eh bien j'ai vu que certains avaient fait des topics dans ce genre, je me suis dit pourquoi pas moi ?
        Et en fait le but est de centraliser tous mes problèmes à chaque programme. Si j'en ai. Sinon j'aime bien partager ce que je fais ;)
        Si ce n'est pas le but pas de problème je ne posterais plus.
        Et d'ailleurs, le programme au dessus est fini, j'édite.
        Et j'ai reédité pour passer les int() en float().
        • Partager sur Facebook
        • Partager sur Twitter
          11 février 2011 à 18:58:30

          from math import sqrt
          from math import sin
          from math import cos
          from math import tan
          from math import asin
          from math import acos
          from math import atan
          

          Tu peux réunir tout en une seule ligne ;)
          from math import sqrt, sin, cos, tan, asin, acos, atan
          

          Ou même importer massivement toutes les fonctions du module math
          from math import *
          
          • Partager sur Facebook
          • Partager sur Twitter
            11 février 2011 à 19:00:44

            Hum, pas bête Yohan ! Merci ;)
            • Partager sur Facebook
            • Partager sur Twitter
              11 février 2011 à 21:55:48

              Je suis pas sur que ton:

              while 1:
              


              serve vraiment à quelque chose. Je pense que si tu l'enlève ton programme fonctionnera très bien quand même. :)

              D'autre part, les boucles infinies sont, autant que possible, à éviter en programmation, sauf cas très spécifique. Ici tu n'en as pas forcément besoin puisque tu ne repasse pas plusieurs fois dans la boucle.
              • Partager sur Facebook
              • Partager sur Twitter
                11 février 2011 à 21:58:07

                Oh c'est juste pour éviter de devoir relancer le programme à chaque fois.

                Par contre je fais mes exos sur le SdZ gentillement ;) et j'ai ce problème :

                from random import *
                from math import *
                o=True
                n=False
                try :
                    a=int(input("Sur quelle valeur voulez vous miser ? (comprise entre 0 et 49) : "))
                    if a<0 or a>49 :
                        print("Vous devez rentrer un nombre compris entre 0 et 49")
                    else :
                        try :
                            b=int(input("Combien misez vous de dollars ? : "))
                        except:
                            print("Vous devez rentrer un nombre entier positif")
                        else :
                            c=randrange(49)
                            print("Le numéro gagnant est le ",c)
                            if a==c :
                                d=3*b
                                print("Vous avez gagné ",d,"$")
                            elif a%2==0 and c%2==0 :
                                d=(b/2)
                                print("Vous avez gagné ",d,"$")
                            elif a%2!=0 and c%2!=0 :
                                d=(b/2)
                                print("Vous avez gagné ",d,"$")
                            else :
                                print("Vous avez perdu !")
                            print("Continuer ? (o/n)")
                            y=bool(input())
                            if y is True :
                                print("lol")
                            if y is False :
                                print("nul")
                except NameError :
                    print("Vous n'avez rentré aucune valeur")
                except TypeError :
                    print("Vous devez rentrer un nombre entier entre 0 et 49")
                except ValueError :
                    print("Vous devez rentrer un nombre entier entre 0 et 49")
                


                En fait que je mette o ou n, True ou False donc, ça donne toujours "lol" (donc True).
                Merci ;)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  11 février 2011 à 22:18:05

                  La fonction bool() test si l'objet en paramètre est vrai ou faux. input() en python 3, renvoie une chaine de caractères. Les chaines de caractères (str) sont considérées comme vrais si elles ne sont pas vide, sinon comme fausses. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 février 2011 à 22:25:09

                    Ah je suis bête. Merci le Yan'tibus.
                    Faut avouer que j'ai pas tout compris aux booléens ;)

                    Re-edit : Problème résolu, et voilà mon jeu de roulette ! :

                    from random import *
                    from math import *
                    continuer=True
                    argent = 1000
                    while argent>0 and continuer:
                        try :
                            print("Vous avez ",argent,"$")
                            a=int(input("Sur quelle valeur voulez vous miser ? (comprise entre 0 et 49) : "))
                            if a<0 or a>49 :
                                raise TypeError
                            try :
                                b=int(input("Combien misez vous de dollars ? : "))
                                if argent<b :
                                    print("Vous ne pouvez pas miser plus que vous n'avez, c'est à dire ",argent,"$")
                                    raise TypeError
                                if b<=0:
                                    print("La mise ne peut être négative")
                                    raise TypeError
                                argent = argent-b
                                print("Il vous reste ",argent,"$")                
                                c=randrange(49)
                                print("Le numéro gagnant est le ",c)
                                if a==c :
                                    d=3*b
                                    print("Vous avez gagné ",d,"$")
                                elif a%2==0 and c%2==0 :
                                    d=ceil((b/2))
                                    print("Vous avez gagné ",d,"$")
                                    argent=argent+d
                                elif a%2!=0 and c%2!=0 :
                                    d=ceil((b/2))
                                    print("Vous avez gagné ",d,"$")
                                    argent=argent+d
                                else :
                                    print("Vous avez perdu !")
                                print("Vous avez ",argent,"$")
                                if argent<=0:
                                    print("Vous n'avez plus d'argent, dehors !")
                                    continuer=False
                                else:
                                    print("Continuer ? (o/n)")
                                    quitter=input()
                                    if quitter=="n":
                                        continuer=False
                            except:
                                print("Vous devez rentrer un nombre entier positif")                
                        except NameError :
                            print("Vous n'avez rentré aucune valeur")
                        except TypeError :
                            print("Vous devez rentrer un nombre entier entre 0 et 49")
                        except ValueError :
                            print("Vous devez rentrer un nombre entier entre 0 et 49")
                    


                    à comparer à la correction officielle :

                    # ce fichier abrite le code du ZCasino, un jeu de roulette adapté
                    
                    import os
                    from random import randrange
                    from math import ceil
                    
                    # déclaration des variables de départ
                    argent = 1000 # on a 1000 $ au début du jeu
                    continuer_partie = True # booléen qui est vrai tant qu'on doit continuer la
                                            # partie
                    
                    print("Vous vous installez à la table de roulette avec", argent, "$.")
                    
                    while continuer_partie: # tant qu'on doit continuer la partie
                        # on demande à l'utilisateur d'entrer le nombre surlequel il va miser
                        nombre_mise = -1
                        while nombre_mise<0 or nombre_mise>49:
                            print("Entrez le nombre sur lequel vous voulez miser (entre 0 et 49) :")
                            nombre_mise = input()
                            # on convertit le nombre misé
                            try:
                                nombre_mise = int(nombre_mise)
                            except ValueError:
                                print("Vous n'avez pas entré de nombre")
                                nombre_mise = -1
                                continue
                            if nombre_mise<0:
                                print("Ce nombre est négatif")
                            if nombre_mise>49:
                                print("Ce nombre est supérieur à 49")
                    
                        # à présent, on sélectionne la somme à miser sur le nombre
                        mise = 0
                        while mise<=0 or mise>argent:
                            print("Entrez le montant de votre mise :")
                            mise = input()
                            # on converti la mise
                            try:
                                mise = int(mise)
                            except ValueError:
                                print("Vous n'avez pas entré de nombre")
                                mise = -1
                                continue
                            if mise<=0:
                                print("La mise entrée est négative ou nulle.")
                            if mise>argent:
                                print("Vous ne pouvez miser autant, vous n'avez que", argent, "$")
                    
                        # le nombre misé et la mise ont été sélectionnés par l'utilisateur
                        # on fait tourner la roulette
                        numero_gagnant = randrange(50)
                        print("La roulette tourne... ... et s'arrête sur le numéro", numero_gagnant)
                    
                        # on va établir le gain du joueur
                        if numero_gagnant == nombre_mise:
                            print("Félicitations ! Vous obtenez", mise * 3, "$ !")
                            argent += mise * 3
                        elif numero_gagnant %2 == nombre_mise %2: # ils sont de la même couleur
                            mise = ceil(mise * 0.5)
                            print("Vous avez misé sur la bonne couleur. Vous obtenez", mise, "$")
                            argent += mise
                        else:
                            print("Désolé l'ami, c'est pas pour cette fois. Vous perdez votre mise.")
                            argent -= mise
                    
                        # on va interrompre la partie si le joueur est ruiné
                        if argent<=0:
                            print("Vous êtes ruiné ! C'est la fin de la partie.")
                            continuer_partie = False
                        else:
                            # on affiche l'argent du joueur
                            print("Vous avez à présent", argent, "$")
                            print("Souhaitez-vous quitter le casino (o/n) ?")
                            quitter = input()
                            if quitter=="o" or quitter=="O":
                                print("Vous quittez le casino avec vos gains.")
                                continuer_partie = False
                    
                    # on met en pause le système (Windows)
                    os.system("pause")
                    


                    Quels sont les désavantages du mien sur celui du SdZ ? Les avantages d'utiliser continue, -1 ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 février 2011 à 10:25:58

                      Salut,

                      Je souhaite revenir sur ton premier script, ta boite-à-outils physique.

                      Avant toute chose, ça n'a pas l'air trop mal, je l'ai testé sommairement et semble fonctionner.

                      Par contre, pour plus de lisibilité, il serait mieux d'organiser les différents calculs sous forme de fonction:

                      def calculatrice():
                          #Portion de code correspondant à calculatrice
                      
                      def equation():
                          #Portion de code correspondant à calculatrice
                      
                      # etc...
                      


                      Bien que tu ais commencé avant-hier, je pense que tu as les notions algorithmiques basiques (conditions, boucles) pour faire des fonctions simples.

                      Bien sur, après cela, il sera possible de changer quelques petits trucs pour simplifier l'écriture et la lecture (dans un cadre de maintenance du script).

                      Bonne continuation.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 février 2011 à 11:20:26

                        Déjà merci de tester le script,
                        et tu as raison, maintenant que j'ai appris de nouvelles choses, il faudrait que je l'organise de cette manière et que je règle les erreurs si on créer une ValueError, TypeError,ect...
                        Qui plus est, ça permettrait de les utiliser dans un autre programme après. Je vais m'y atteler...

                        Edit :
                        Voilà :

                        from os import *
                        from math import sqrt, sin, cos, tan, asin, acos, atan
                        #on définit les fonctions :
                        def calculatrice():
                            print("veuillez choisir une opération à effectuer dans la liste suivante : ")
                            print("1: multiplication")
                            print("2: addition")
                            print("3: division")
                            print("4: racine carrée")
                            print("5: sinus")
                            print("6: cosinus")
                            print("7: tangente")
                            print("8: arcsinus")
                            print("9: arccos")
                            print("10: arctan")
                            try :
                                c = int(input("opération choisie: "))
                            except:
                                print("Vous devez rentrer un nombre entier entre 1 et 10")
                            if c>10 or c<1 :
                                raise TypeError
                            else :
                                if c<=3 :
                                    a = input("veuillez saisir la première valeur : ")
                                    b = input("veuillez saisir la seconde valeur : ")
                                    try :
                                        float(a)
                                        float(b)
                                    except :
                                        print("rentrez un nombre")
                                    print("le résultat est :")
                                    if c == 1 :
                                        return a*b
                                        print(a*b)
                                    elif c == 2 :
                                        return a+b
                                        print(a+b)
                                    elif c == 3 :
                                        try :
                                            return a/b
                                            print(a/b)
                                        except :
                                            print("les divisions par zéro sont impossibles")
                                elif c>=4 :
                                    a = float(input("veuillez choisir une valeur : "))
                                    try :
                                        float(a)
                                    except :
                                        print("rentrez un nombre")
                                    else :
                                        print("le résultat est :")
                                        if c==4 :
                                            if a<0 :
                                                print("il n'y a pas de racine carrée d'un nombre négatif dans l'ensemble des réels")
                                            elif a>=0 :
                                                return sqrt(a)
                                                print(sqrt(a))
                                        elif c==5 :
                                            return(sin(a))
                                            print(sin(a))
                                        elif c==6 :
                                            return(cos(a))
                                            print(cos(a))
                                        elif c==7 :
                                            return(tan(a))
                                            print(tan(a))
                                        elif c==8 :
                                            if a>1 or a<-1 :
                                                print("le sinus d'un nombre appartient à [-1;1]")
                                            else :
                                                return(asin(a))
                                                print(asin(a))
                                        elif c==9 :
                                            if a>1 or a<-1 :
                                                print("le cosinus d'un nombre appartient à [-1;1]")
                                            else :
                                                return(acos(a))
                                                print(acos(a))
                                        elif c==10 :
                                            if a>1 or a<-1 :
                                                print("la tangente d'un nombre appartient à [-1;1]")
                                            else :
                                                return(atan(a))
                                                print(atan(a))
                        
                        
                        def polynôme():
                            print("trouver les racines d'un polynôme du second degré")
                            print("ax²+bx+c")
                            try :
                                a = float(input("entrez la valeur de a dans ax² : "))
                                b = float(input("entrez la valeur de b dans bx : "))
                                c = float(input("entrez la valeur de c dans c : "))
                            except :
                                print("vous devez rentrer un nombre")
                            else :
                                x = float((b*b)-(4*a*c))
                                print("Δ=",x)
                                if x<0:
                                    print("le polynôme n'a pas de racines")
                                elif x>=0:
                                    y=sqrt(x)
                                    print("la racine carrée de Δ est :",y)
                                    if x==0:
                                        d=(-b/(2*a))
                                        print("la racine du polynôme est : ",d)
                                    if x>0:
                                        d=((-b-y)/(2*a))
                                        e=((-b+y)/(2*a))
                                        print("les racines du polynôme sont :",d)
                                        print("et :",e)
                                        return d and e
                        
                        def Ec() :
                            try :
                                a=float(input("saisissez la valeur de la masse de l'objet (en kg) : "))
                                b=float(input("saisissez la valeur de la vitesse de l'objet (en m/s) : "))
                                c=float((1/2)*a*(b*b))
                            except :
                                print("vous devez rentrer des nombres")
                            else :
                                print("l'énergie cinétique du système est Ec=",c,"J")
                                return c
                        
                        def Ep() :
                            print("connaissez-vous la valeur du poids ou la valeur de la masse ?")
                            print("1: poids")
                            print("2: masse")
                            try :
                                i=int(input())
                                if i!=1 and i!=2 :
                                    raise ValueError
                            except :
                                print("vous devez rentrer un nombre entre 1 et 2")
                            else :
                                if i==1 :
                                    a=float(input("saisissez la valeur du poids de l'objet (en N) : "))
                                    b=float(input("saisissez la valeur de z par rapport à l'axe O--Z-> (en mètres): "))
                                    c=float(a*b)
                                    print("la valeur de l'énergie potentielle est Ep=",c,"J")
                                    return
                                elif i==2 :
                                    print("voulez vous utiliser la valeur de la gravité sur terre ou en donner une autre ?")
                                    print("1: utiliser la valeur de la gravité sur terre")
                                    print("2: utiliser une autre valeur")
                                    try :
                                        o=int(input())
                                        if o!=1 and o!=2 :
                                            raise ValueError
                                    except :
                                        print("vous devez rentrer un nombre entre 1 et 2")
                                    else :
                                        if o==1 :
                                            a=float(input("saisissez la valeur de la masse de l'objet (en kg) : "))
                                            b=float(input("saisissez la valeur de z par rapport à l'axe O--Z-> (en mètres): "))
                                            c=float(a*9.81*b)
                                            print("la valeur de l'énergie potentielle est Ep=",c,"J")
                                            return c
                                        elif o==2 :
                                            a=float(input("saisissez la valeur de la masse de l'objet (en kg) : "))
                                            b=float(input("saisissez la valeur de z par rapport à l'axe O--Z-> (en mètres): "))
                                            d=float(input("saisissez la valeur de l'accélération de la gravité (en m.s-2) : "))
                                            c=float(a*b*d)
                                            print("la valeur de l'énergie potentielle est Ep=",c,"J")
                                            return c
                        
                        def grav() :
                            print("Fa/b=Fb/a=F")
                            try :
                                a=float(input("saisissez la valeur de la masse de a (en kg) : "))
                                b=float(input("saisissez la valeur de la masse de b (en kg) : "))
                                c=float(input("saisissez la valeur de la distance entre a et b (en mètres) : "))
                                d=float((a*b)/(c*c))
                            except :
                                print("vous devez rentrer des nombres")
                            else :
                                print("la valeur de l'intéraction gravitationelle est F=",d,"N")
                                return d
                        
                        def magn() :
                            print("Fa/b=Fb/a=F")
                            try :
                                a=float(input("saisissez la valeur de la charge de a (en coulomb) : "))
                                b=float(input("saisissez la valeur de la charge de b (en coulomb) : "))
                                d=float(input("saisissez la valeur de la distance entre a et b (en mètres) : "))
                                c=float(a*b)
                            except :
                                print("vous devez rentrer des nombres")
                            else :
                                if c<0 :
                                    e=float((9.0*10**-9)*((-c)/(d*d)))
                                    print("la valeur de l'intéraction magnétique est F=",e,"N")
                                    return e
                                elif c>=0 :
                                    e=float((9.0*10**-9)*((c)/(d*d)))
                                    print("la valeur de l'intéraction magnétique est F=",e,"N")
                                    return e
                        
                        def hooke() :
                            print("T=k|l-l0|")
                            try :
                                a=float(input("saisissez la valeur de la constante de raideur k (en N/m) : "))
                                b=float(input("saisissez la valeur de la longueur du ressort étendu : "))
                                c=float(input("saisissez la valeur de la longueur du ressort non étendu : "))
                                d=float(b-c)
                            except :
                                print("vous devez rentrer des nombres")
                            else :
                                if d<0 :
                                    e=int(a*(-d))
                                    print("la valeur de la tension du ressort est T=",e,"J")
                                    return e
                                elif d>=0 :
                                    e=int(a*d)
                                    print("la valeur de la tension du ressort est T=",e,"J")
                                    return e
                        
                        #on passe au programme en lui-même
                        while 1:
                            print("que voulez vous faire ?")
                            print("1: calculatrice")
                            print("2: résoudre une équation du second degré")
                            print("3: calculer l'énergie cinétique")
                            print("4: calculer l'énergie potentielle")
                            print("5: calculer l'intéraction gravitationnelle entre deux objets")
                            print("6: calculer l'intéraction magnétique entre deux objets")
                            print("7: calculer la tension d'un ressort")
                            try :
                                k = int(input())
                                if k>7 or k<1 :
                                    raise ValueError
                            except :
                                print("vous devez rentrer un nombre entier entre 1 et 7")
                            else :    
                                if k==1 :
                                    calculatrice()
                                elif k==2 :
                                    polynôme()
                                elif k==3 :
                                    Ec()
                                elif k==4 :
                                    Ep()
                                elif k==5 :
                                    grav()
                                elif k==6 :
                                    magn()
                                elif k==7 :
                                    hooke()
                        system()
                        





                        reedit : et en passant, ma version du jeu + ou - avec score, parties, coups (manquerait plus qu'un timer ;) ) :
                        from random import *
                        c=int(10)
                        d=int(5)
                        score=0
                        while d!=0:
                            a=randrange(100)
                            print("Il vous reste",d,"parties")
                            while 1:
                                print("Vous avez",c,"coups.")
                                try :
                                    b=int(input("choisissez un nombre : "))
                                    if b<0 or b>100 :
                                        raise ValueError
                                except :
                                    print("Vous devez rentrer un nombre entier entre 0 et 100")
                                else :
                                    if c==1:
                                        print("Dommage, vous avez perdu !")
                                        c=10
                                        d=d-1
                                        break
                                    c=c-1
                                    if b>a:
                                        print("C'est moins.")
                                    elif b<a:
                                        print("C'est plus.")
                                    elif b==a:
                                        print("Trouvé !")
                                        d=d-1
                                        score=score+10*c
                                        c=10
                                        break
                            print("Votre score est",score)
                        print("Votre score final est",score)
                        


                        rereedit : et si ça intéresse, le module de ma boite à outils physique (j'ai viré la calculette, aucun intêret ici) :
                        def polynôme(a,b,c):
                            #ax²+bx+c. les solutions sont x1 et x2
                            x = float((b*b)-(4*a*c))
                            if x<0:
                                "le polynôme n'a pas de racines"
                            elif x>=0:
                                y=sqrt(x)
                                if x==0:
                                    d=(-b/(2*a))
                                    return d
                                if x>0:
                                    d=((-b-y)/(2*a))
                                    e=((-b+y)/(2*a))
                                    return d,e
                        
                        def Ec(a,b) :
                            #a en kg, b en m/s
                            c=float((1/2)*a*(b*b))
                            return c
                        
                        def Ep() :
                            #Ep=mgz. si on connait le poids, mettre Ep(m,1,z)
                            return m*g*z
                        
                        def grav(a,b,c) :
                            #Fa/b=Fb/a=F. a et b en kg, c en m
                            d=float((6.67*10**-11)*((a*b)/(c*c)))
                            return d
                        
                        def magn(a,b,d) :
                            #Fa/b=Fb/a=F. a et b en coulombs, c en m
                            c=float(a*b)
                            if c<0 :
                                e=float((9.0*10**-9)*((-c)/(d*d)))
                                return e
                            elif c>=0 :
                                e=float((9.0*10**-9)*((c)/(d*d)))
                                return e
                        
                        def hooke(a,b,c) :
                            #T=k|l-l0| où k est a, b est l et c est l0
                            d=float(b-c)
                            if d<0 :
                                e=float(a*(-d))
                                return e
                            elif d>=0 :
                                e=float(a*d)
                                return e
                        


                        Qu'en pensez vous ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 février 2011 à 19:45:42

                          Petit conseil si tu ne veux pas que ta fonction polynôme plante ^^

                          Écris:
                          def polynome():

                          N'écris pas de fonction avec des accents, car là, si tu regardes la coloration syntaxtique, tu vois que le bleu s'arrête à polyn, car le ô n'est pas accepté comme nom de fonction :p

                          Bonne chance :)

                          Ps Si tu veux comparer ton programme de Casino au mien, je peux te le fournir, ça donne des idées :D
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 février 2011 à 19:47:52

                            Beh je me disais, mais le fait est qu'elle marche parfaitement. Après c'est peut-être selon la version, et comme ça coute de rien de le supprimer, je vais faire ça ;)

                            Et merci.

                            Et vi si tu veux bien, ça me plairait, pis pourquoi pas discutailler sur nos différentes méthodes :p .
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              12 février 2011 à 20:09:39

                              while 1:
                                  print("que voulez vous faire ?")
                                  print("1: calculatrice")
                                  print("2: résoudre une équation du second degré")
                                  print("3: calculer l'énergie cinétique")
                                  print("4: calculer l'énergie potentielle")
                                  print("5: calculer l'intéraction gravitationnelle entre deux objets")
                                  print("6: calculer l'intéraction magnétique entre deux objets")
                                  print("7: calculer la tension d'un ressort")
                                  k = int(input())
                                  if k==1 :
                                      print("veuillez choisir une opération à effectuer dans la liste suivante : ")
                                      print("1: multiplication")
                                      print("2: addition")
                                      print("3: division")
                                      print("4: racine carrée")
                                      print("5: sinus")
                                      print("6: cosinus")
                                      print("7: tangente")
                                      print("8: arcsinus")
                                      print("9: arccos")
                                      print("10: arctan")
                              


                              Trop de print, les triples quotes sont là pour cela

                              print("""1ere ligne
                              2eme ligne
                              3eme ligne
                              ...""")
                              


                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 février 2011 à 20:12:05

                                En effet, merci.
                                Je ne savais pas qu'on pouvait sauter des lignes grâce aux triple quotes.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 février 2011 à 8:56:37

                                  Personnellement je suis contre l'utilisation d'exceptions pour tout et n'importe quoi. Si un simple if suffit, pourquoi aller chercher plus loin, ça ne fait que compliquer le code inutilement.
                                  Sinon je ne sais pas si tu as vraiment vu les fonctions, mais à mon avis il vaudrait mieux que tu jettes un coup d'œil et que tu découpes un peu ton code, parce-que c'est pas très lisible là. Je ne trouve pas que la correction "officielle" soit un exemple de lisibilité non plus cependant.
                                  Par exemple, pour récupérer le nombre sur lequel l'utilisateur veut parier, tu pourrais faire une fonction du genre :
                                  def get_num():
                                      num = input("Sur quelle valeur voulez vous miser ? (comprise entre 0 et 49) : ")
                                      if num.isnumeric() and (0 <= int(num) <= 49):
                                          return int(num)
                                      #message(s) d'erreur ici
                                      return get_num()
                                  

                                  En gros tu vérifies si l'entrée est bien un nombre, et si c'est un nombre si il est bien entre 0 et 49, si oui tu le retournes. Sinon, tu affiches l'erreur, tu rappelles la fonction et retournes le résultat qu'elle t'aura retourné.
                                  Pour la somme misée, tu peux faire pareil :
                                  def get_bet(money_left):
                                      bet = input("Combien misez vous de dollars ? : ")
                                      if bet.isnumeric() and (0 < int(bet) <= money_left):
                                          return int(bet)
                                      #message(s) d'erreur ici
                                      return get_bet(money_left)
                                  


                                  A part ça, il y a un autre problème dans ton jeu du casino.
                                  Tu retires d'abord la somme qu'on mise, mais le problème c'est qu'en cas de gain, tu ne rajoutes pas ce qu'on a misé, donc par exemple : si on a 1000 et qu'on mise 500, on se retrouve à 500. Admettons qu'on a la couleur, on gagne donc en principe 250, mais dans ton programme, au lieu de récupérer nos 500 et de gagner 250 en plus, on ne gagne que les 250, donc au final on perd 250 alors qu'on a gagné :euh: Et si on tombe sur le bon numéro, encore pire, on nous écrit qu'on a gagné, mais on ne nous donne pas d'argent :lol:

                                  Pour finir, un petit détail : a = a + 1 peut s'écrire a += 1, c'est plus propre.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 février 2011 à 9:08:56

                                    Citation : lolown

                                    Petit conseil si tu ne veux pas que ta fonction polynôme plante ^^

                                    Écris:
                                    def polynome():

                                    N'écris pas de fonction avec des accents, car là, si tu regardes la coloration syntaxtique, tu vois que le bleu s'arrête à polyn, car le ô n'est pas accepté comme nom de fonction :p



                                    Sauf que Python est plus intelligent que le colorateur syntaxique du SdZ, et si l'encodage est bien spécifié au début du fichier, il n'y a absolument aucune raison que ça plante. Qu'il soit plus conventionnel d'utiliser des caractères ASCII que des caractères accentués est un fait, mais il ne faut pas aller jusqu'à dire n'importe quoi. Python gère très bien les caractères accentués. ;)

                                    En parlant de conventions : le code du plus ou moins pourrait être plus lisible s'il respectait la PEP-8. En particulier, les variables ont des noms d'un seul caractère, non explicites, et tout est ratatiné. Ah, et les boucles while on peut s'en passer.

                                    from random import randrange
                                    score = 0
                                    for nb_parties in range(10, 0, -1):
                                        secret = randrange(100)
                                        print("Il vous reste", nb_parties, "parties")
                                        for nb_coups in range(5, -1, -1):
                                            if nb_coups == 0:
                                                print("Perdu !")
                                                break
                                            print("Vous avez", nb_coups, "coups.")
                                            try :
                                                devine = int(input("choisissez un nombre : "))
                                                if not 0 <= devine <= 100 :
                                                    raise ValueError
                                            except :
                                                print("Vous devez rentrer un nombre entier entre 0 et 100")
                                            else :
                                                if devine > secret:
                                                    print("C'est moins.")
                                                elif devine < secret:
                                                    print("C'est plus.")
                                                else:
                                                    print("Trouvé !")
                                                    score += 10 * nb_coups
                                                    break
                                        print("Votre score est", score)
                                    print("Votre score final est", score)
                                    


                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Zeste de Savoir, le site qui en a dans le citron !
                                      13 février 2011 à 10:47:44

                                      os.system("pause")
                                      

                                      Ce n'est pas une faute grave, mais ce genre de code est à éviter. Selon la documentation, les fonctions suivantes :
                                      os.system
                                      os.spawn*
                                      os.popen*
                                      popen2.*
                                      commands.*
                                      

                                      sont à éviter. Utilise plutôt le module subprocess. Pour plus d'informations : documentation et PEP 324
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        13 février 2011 à 11:10:25

                                        Et encore, pour ce qu'il a à faire, autant faire un input("Appuyez sur entrée pour continuer..."). C'est portable et propre.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Zeste de Savoir, le site qui en a dans le citron !
                                          13 février 2011 à 12:04:27

                                          Mais euh, dans le tutoriel sur le SdZ il utilise system() ! ;)
                                          Ensuite, pour les erreurs au niveau du jeu de roulette, les fonctions je suis d'accord, c'est mieux.
                                          Par contre je connaissais pas vraiment les règles du jeu et j'ai suivi ce que le tutoriel disait.

                                          Mais par contre, je comprends pas comment input("Appuyez sur entrée pour continuer") pourrait remplacer system() (qui est fait pour pouvoir lancer le script sous windows). Merci d'éclairer ma lanterne ;)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            13 février 2011 à 12:12:56

                                            Citation

                                            Mais euh, dans le tutoriel sur le SdZ il utilise system() !



                                            C'est une erreur en ce qui concerne la portabilité

                                            Mais pour un programme de test, c'est suffisant, cependant on te donne les bonnes habitudes à avoir.

                                            Citation

                                            Par contre je connaissais pas vraiment les règles du jeu et j'ai suivi ce que le tutoriel disait.



                                            Va à ton rythme, ce ne sont pas des reproches, mais des conseils, toujours bon à prendre.

                                            Citation

                                            Mais par contre, je comprends pas comment input("Appuyez sur entrée pour continuer") pourrait remplacer system() (qui est fait pour pouvoir lancer le script sous windows). Merci d'éclairer ma lanterne



                                            Il suffit de comprendre ce que fait un os.system("pause"). Il va exécuter la commande pause sous windows. Pour une pause on peut simplement demander à l'utilisateur d'appuyer sur une touche par la fonction input("...") pour passer à l'étape suivante.

                                            Comme l'étape suivante, c'est la fin de ton code, ton programme se terminera de la même façon.

                                            Je sais pas si j'ai été suffisamment clair :euh:

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              13 février 2011 à 12:32:18

                                              Citation : fred1599

                                              Citation

                                              Mais euh, dans le tutoriel sur le SdZ il utilise system() !



                                              C'est une erreur en ce qui concerne la portabilité


                                              Pour illustrer le problème de portabilité, en lançant le script sous Ubuntu, ça donne :
                                              ~/test/tmp$ ./test.py 
                                              Vous vous installez à la table de roulette avec 1000 $.
                                              (déroulement du programme)
                                              Vous êtes ruiné ! C'est la fin de la partie.
                                              sh: pause: not found

                                              On voit bien que pause, il aime pas beaucoup.
                                              Donc bon, pour un programme que tu seras le seul à utiliser c'est pas dramatique, mais si tu comptes le donner à quelqu'un c'est pas génial, donc autant s'habituer à faire quelque chose qui marche partout, surtout que ça coûte absolument rien.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                13 février 2011 à 12:49:41

                                                Citation : fred1599

                                                Citation

                                                Mais euh, dans le tutoriel sur le SdZ il utilise system() !



                                                C'est une erreur en ce qui concerne la portabilité



                                                S'il n'y avait que ça. c'est juste une des nombreuses erreurs/maladresses de ce tutorial. À la perfection, nul n'est tenu mais peut-être que l'auteur pourrait corriger, ce serait déjà ça.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  13 février 2011 à 14:00:30

                                                  Citation

                                                  S'il n'y avait que ça. c'est juste une des nombreuses erreurs/maladresses de ce tutorial. À la perfection, nul n'est tenu mais peut-être que l'auteur pourrait corriger, ce serait déjà ça.



                                                  Moui c'est pas trop le sujet ici, mais je trouve déjà très bien qu'un tutoriel soit sur ce site. Cependant comme tout bugs rapportés, je suis d'accord avec toi sur le fait de modifier un problème existant, encore faut-il avoir le temps, ce qui est je pense le problème majeur d'entre nous.

                                                  Pour un débutant, le tutoriel est toujours le mode d'emploi modèle et il va donc se transposer au style de l'auteur du tuto.

                                                  Quand on lit un bouquin on a exactement le même problème. Je considère que le meilleur moyen d'apprendre est encore la doc officielle et la PEP.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    13 février 2011 à 14:08:39

                                                    from random import *
                                                    from math import *
                                                    continuer=True
                                                    def pari() :
                                                        try :
                                                            nombre=int(input("Sur quelle valeur voulez vous miser ? (comprise entre 0 et 49) : "))
                                                            if 0<=nombre<=49 :
                                                                return nombre
                                                            else :
                                                                raise ValueError
                                                        except :
                                                            print("Vous devez rentrer un nombre entier entre 0 et 49")
                                                            pari()
                                                    def miser(argent) :
                                                        print("Vous avez ",argent,"$")
                                                        try :
                                                            mise=int(input("Combien misez vous de dollars ? : "))
                                                            int(mise)
                                                            if argent<mise :
                                                                print("Vous ne pouvez pas miser plus que vous n'avez, c'est à dire ",argent,"$")
                                                                miser(argent)
                                                            elif mise<=0:
                                                                print("La mise ne peut être négative")
                                                                miser(argent)
                                                            elif 1<=mise<=argent :
                                                                argent += -mise
                                                                return(mise,argent)
                                                        except :
                                                            print("Vous devez rentrer un nombre entier")
                                                            miser(argent)
                                                    argent=1000
                                                    while continuer:
                                                        nombre=pari()
                                                        mise, argent=miser(argent)
                                                        if argent<=0:
                                                            print("Vous n'avez plus d'argent, dehors !")
                                                            continuer=False
                                                        print("Il vous reste ",argent,"$")                
                                                        nombregagnant=randrange(49)
                                                        print("Le numéro gagnant est le ",nombregagnant)
                                                        if nombre==nombregagnant :
                                                            somme=4*mise
                                                            print("Vous avez gagné ",somme,"$")
                                                            argent+=somme
                                                        elif nombre%2==0 and nombregagnant%2==0 :
                                                            somme=ceil((mise/2)+mise)
                                                            print("Vous avez gagné ",somme,"$")
                                                            argent+=somme
                                                        elif nombre%2!=0 and nombregagnant%2!=0 :
                                                            somme=ceil((mise/2)+mise)
                                                            print("Vous avez gagné ",somme,"$")
                                                            argent+=somme
                                                        else :
                                                            print("Vous avez perdu !")
                                                        print("Vous avez ",argent,"$")
                                                        print("Continuer ? (o/n)")
                                                        quitter=input()
                                                        if quitter=="n":
                                                            continuer=False
                                                    print("Appuyez sur entrée")
                                                    


                                                    J'ai modifié ma roulette, par contre j'arrive vraiment pas sans les try ; si une lettre est entrée, je ne sais pas quoi faire...
                                                    Et merci à tous pour votre aide :) .

                                                    Edit : petite erreur dans le code, corrigée.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      13 février 2011 à 14:17:17

                                                      Si c'est pour tester si une lettre est entrée, le try...except est une bonne idée

                                                      >>> try:
                                                      ...     valeur = int(input("Entrer une valeur:"))
                                                      ... except ValueError:
                                                      ...     print("Entrer une valeur correcte")
                                                      ... 
                                                      Entrer une valeur:a
                                                      Entrer une valeur correcte
                                                      
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        13 février 2011 à 14:21:12

                                                        Du coup, le try... except... est pas une obligation dans chaque code avec des int(input()) ?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          13 février 2011 à 14:30:19

                                                          Dans un code on essai au maximum d'éviter les messages d'erreur du type

                                                          >>> int("a")
                                                          Traceback (most recent call last):
                                                            File "<stdin>", line 1, in <module>
                                                          ValueError: invalid literal for int() with base 10: 'a'
                                                          


                                                          qui stoppe le programme, qui doit être redémarré et des fois l'utilisateur ne comprend pas pourquoi, ne connaissant pas le langage écrit par l'auteur du code.

                                                          C'est toujours bien d'avoir prévu une mauvaise manipulation, de savoir ce qui s'est passé et surtout de ne pas arrêter subitement le programme.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            13 février 2011 à 14:52:23

                                                            Je ne dis pas de ne pas utiliser try/except, je dis juste qu'il ne faut pas en abuser.
                                                            Si on écrit int(input()), on est obligé d'utiliser try/except pour gérer les exceptions, mais si on sépare input() et int() on peut faire sans, comme dans les deux fonctions que j'ai écrit au-dessus.
                                                            Pour ta fonction pari, tu as oublié le return quand tu rappelles la fonction dans ton except.
                                                            A part ça, je te conseillerais de réécrire comme ça :
                                                            def pari() :
                                                                try :
                                                                    nombre=int(input("Sur quelle valeur voulez vous miser ? (comprise entre 0 et 49) : "))
                                                                    if 0<=nombre<=49 :
                                                                        return nombre
                                                                    else :
                                                                        raise ValueError
                                                                except ValueError:
                                                                    print("Vous devez rentrer un nombre entier entre 0 et 49")
                                                                    return pari()
                                                            

                                                            c'est plus propre que d'écrire deux fois la même chose. A noter que le else est optionnel puisque si on rentre dans le if on n'ira pas plus loin car il y a un return, mais c'est probablement plus clair de le laisser.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              13 février 2011 à 15:03:01

                                                              Le fait est que j'ai essayé le .isnumeric(), mais il a pas aimé, va savoir pourquoi. Je retenterais plus tard.
                                                              Par contre je suis d'accord ; un raise est mieux ici. Je modifie.
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Mes programmes au fil de mon apprentissage

                                                              × 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