IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de syntaxe avec "elif" [Python 2.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Problème de syntaxe avec "elif"
    Bonjour à tous,
    Je débute en programmation sur le logiciel Python. Je dois concevoir un programme simple dont le but est de résoudre une équation du second degré tout d'abord par un calcul de delta puis l’algorithme trouve aucune, une ou deux solutions en fonction de la valeur de delta. Cependant, j'ai une erreur au niveau du second "elif". On m'indique une erreur de syntaxe que je n'arrive pas à résoudre. Si quelqu'un peut me venir en aide je lui serai bien reconnaissant. Merci beaucoup et peace.Nom : Capture.PNG
Affichages : 2274
Taille : 29,4 Ko

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ce n'est pas le deuxième elif qui pose problème mais le bloc de code qui le précède. il faut l'indenter au même niveau que le print.

    Utilise plutôt les balises [CODE] qu'une capture écran, on ne peut pas copier ton code.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Après la correction suggérée, il te restera quelques petits problèmes à régler.
    1. d=b**2-4*a*c c'est le discriminant d'accord le l'équation ax^2+bx+c =0
    2. Mais écrire x = -b-d/2*a est doublement faux.
    * D'abord parce que dans la solution on n'utilise pas d, mais sa racine carrée...
    * Ensuite parce que le "/2*a" va te surprendre, vois :
    >>> 3/5*2
    1.2
    Alors que tu attendrais 0.3...
    Essaie et verras !

    @+

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci a vous deux, j'essaie le plus tôt possible et je vous dis.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    J'ai totalement changé mon programme et je l'ai enrichit grâce à des tutos. Tout marche sauf lorsque Delta est égal à 0, mon algorithme affiche qu'il n'y a qu'une seule solution. Normal. Cependant le programme ne
    me donne pas le bon résultat. Par exemple lorsque A=9 B=6 et C=1 Delta=0 mais le résultat est -1. Ce n'est pas normal. Ça fait 2 heures que je suis dessus je n'ai rien trouver. Merci à vous tous pour les débuts vous m'aidez bien.
    Nom : Capture.PNG
Affichages : 6102
Taille : 20,1 Ko

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Bonjpur,

    Je ne vois pas où est l'erreur, je ne l'ai pas reproduite.
    J'ai reproduit ton programme a minima (la balise code doit être utilisée, pas une image) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from math import sqrt
     
    a,b,c=9,6,1
    Delta=b**2-4*a*c
    if Delta<0:
        print  "Discriminant négatif. Pas de solution"
    elif Delta ==0:
        print  "Discriminant nul. Une solution double : x1 = x2 =",b/(2*a)
    else:    
        print  "Discrimant positif. Deux solutions :"
        print  "x1 =", (-b-sqrt(Delta))/(2*a)
        print  "x2 =", (-b+sqrt(Delta))/(2*a)
    Qui me donne en sortie :
    Discriminant nul. Une solution double : x1 = x2 = 0.3333333333333333

    Si à la place de a,b,c=9,6,1 , j'écris a,b,c=1,6,9
    j'ai en sortie
    Discriminant nul. Une solution double : x1 = x2 = 3.0

    Donc, je ne vois pas...
    J'ai aussi essayé comme toi, avec les 3 if de suite, aucun pb...

    Je te conseille donc de mettre un print a,b,c pour voir ce qui se passe chez toi.

    @+

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Dans le cas où Delta vaut 0, la racine est -b/2a, et non b/2a.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Re,.0/4 renvoie

    Exact.

    Mais le problème qu'a soulevé notre ami n'est pas là :
    avec a,b,c=9,6,1 il trouve x1=x2=-1
    et -b/(2a)= -6/18 = -1/3 lui trouve -1.

    J'ai installé Python 2.x , pour voir : j'ai reproduit en Python 3.5 et enlevé les parenthèses des print. De mémoire, ça devait fonctionner quand même...

    @+

    [EDIT] Attention en Python 2.x, 9/4 renvoie 2... et 9.0/4 ou 9/2.0 --> 4.5
    2 correctifs possible dans ce qu'a écrit notre ami : remplacer m = 2 *A par m = 2.0*A

    Ou ajouter en tête : from __future__ import division (avant tout autre import)
    Le quotient entier sera alors obtenu par //

    [EDIT2] correction des fautes de frappe

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponses je vais rectifier cela tout de suite. Comment on peut poster une image code du logiciel (je ne sais pas où c'est dans le logiciel) Merci encore.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    'lut,

    J'ai trouvé l'erreur (qui n'en est pas vraiment une) j'avais modifié mon post pendant ta réponse : va voir !

    Lorsque tu as tes lignes de code à l'écran, au lieu d'en faire une image, tu les copies à la souris, puis tu les colles dans ton post et tu utilises la balise #...

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Avec 2.0*A ça marche niquel ! Merci à tous vous m'avez bien aidé!

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Re,

    Oui, mais tu n'auras pas toujours la possibilité de ruser comme ça...
    Une solution simple (il y en a d'autres) est de procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/env python
    # -*- coding: CP1252 -*-
     
    from __future__ import division  #<--- A mettre en tout début de code
    from math import sqrt
     
    a,b,c=9,6,1
     
    Delta=b**2-4*a*c
    if Delta<0:
        print  "Discriminant négatif. Pas de solution"
    elif Delta ==0:
        print  "Discriminant nul. Une solution double : x1 = x2 =",-b/(2*a)
    else:    
        print  "Discrimant positif. Deux solutions :"
        print  "x1 =", (-b-sqrt(Delta))/(2*a)
        print  "x2 =", (-b+sqrt(Delta))/(2*a)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de syntaxe avec le composant TCppWebBrowser
    Par Ptite Développeuse dans le forum C++Builder
    Réponses: 10
    Dernier message: 19/04/2006, 15h48
  2. problème de syntaxe avec champ date
    Par mussara dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo