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 :

Probleme Debutant vérification condition


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut Probleme Debutant vérification condition
    Bonjour, je suis bloqué, je débute en Python et je m'entraîne sur un script, je souhaiterai pouvoir vérifier la valeur de a pour savoir si elle est bien comprise entre 1 et 5. Et si c'est pas entre 1 et 5, revenir à la première boucle pour reposer la question 1. Enfin, le code est assez parlant. J'ai donc mis en commentaire le code qui fait bugguer le truc.

    Si possible, merci de me donner un petit coup de pouce, pas de me livrer le code qui fonctionne directement. Sinon j'apprendrai pas.

    Il y a aussi très certainement possibilité d'améliorer tout le code en ne répétant pas la phrase 6 fois, mais bon, là n'est pas la question, je cherche juste à ce que ma vérification sur a fonctionne.

    Merci à vous.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!/usr/local/bin/python
    # -*- coding: Utf-8 -*-
     
    a = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement A : "))
    # intervalle=False
    # if a>=0 and a<=5:
    #	intervalle=True
    #	print("valeur enregistrée")
    # else: 
    #    intervalle=False
    #	print("mauvaise valeur")
    # if intervalle=False:
    # continue
    # else:
    # break
    b = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement B : "))
     
    c = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement C : "))
     
    d = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement D : "))
     
    e = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement E : "))
     
    f = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement F : "))
     
    x = float((((a*0.5)+b+(c*0.2)+d+(e*0.04)+f)/6)*100)
     
    print(x)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu pourrais déjà commencé par une boucle 'while' :*http://www.tutorialspoint.com/python...while_loop.htm

    ensuite pour la condition, la tienne est bonne, mais tu peux également la simplifiée ainsi :

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Merci Cheval_Boiteux, en effet, je n'ai pas pensé à la while, c'est plus simple. Bon par contre, je n'arrive toujours pas à dire au code de revenir à la question 1 si "else" (donc a n'est pas dans l'intervalle [1,5]).

    Je ne comprend pas pourquoi ça veut pas fonctionner là :

    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
    18
    19
    20
    21
    22
    23
    #!/usr/local/bin/python
    # -*- coding: Utf-8 -*-
     
    a = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement A : "))
    while a>=0 and a<=5:
     	print("valeur enregistrée")
     	break
    else: 
    	print("mauvaise valeur")
    	continue
    b = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement B : "))
     
    c = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement C : "))
     
    d = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement D : "))
     
    e = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement E : "))
     
    f = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement F : "))
     
    x = float((((a*0.5)+b+(c*0.2)+d+(e*0.04)+f)/6)*100)
     
    print(x)
    Si on enlève le "continue", ça fonctionne, mais ça passe à B. Càd que si je rentre 7, ça va me dire : mauvaise valeur, mais ça va passer à B et pas représenter la question 1. Pourtant, j'avais cru comprendre que break quittait la condition/boucle (je suis pas encore sûr d'utiliser les bons termes...) et que continue faisait en sorte de revenir au début de la boucle.

    Mais là avec le continue ça représente pas la question 1, ça plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SyntaxError: 'continue' not properly in loop
    Du coup, je fais ça mais je crois que c'est n'importe quoi, je crois pas que while accepte elif (?) et la "syntaxe" (enfin le code) me paraît mauvais (et effectivement il l'est !) :

    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
    18
    19
    20
    21
    22
    23
    24
    #!/usr/local/bin/python
    # -*- coding: Utf-8 -*-
     
    a = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement A : "))
    while a>=0 and a<=5:
     	print("valeur enregistrée")
     	break
    elif: 
    	print("mauvaise valeur")
    else:	
    	continue
    b = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement B : "))
     
    c = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement C : "))
     
    d = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement D : "))
     
    e = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement E : "))
     
    f = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement F : "))
     
    x = float((((a*0.5)+b+(c*0.2)+d+(e*0.04)+f)/6)*100)
     
    print(x)
    Et ça me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elif: 
           ^
    SyntaxError: invalid syntax
    grmblblbl..

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    C'est beaucoup plus simple que cela.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # -*- coding: utf-8 -*-
     
    data = []
     
    for x in range(6):
        val = 0
        while val < 1 or val > 5:
            val = float(raw_input("Entrez un chiffre de 1 a 5 correspondant a" 
                                    " l'événement %s : " % x))
        data.append(val)
     
    print data
    À cela il faudra ajouter les lignes de code nécéssaires pour afficher évènement A plutôt que évènement 0 et surtout mettre le float(raw_input(... dans un bloc try-except et prendre en charge les erreurs. Les tâches ménagères quoi.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par Jean_Jean_ Voir le message
    Si possible, merci de me donner un petit coup de pouce, pas de me livrer le code qui fonctionne directement. Sinon j'apprendrai pas.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    ah oui, VinsS, c'est très gentil de ta part mais je ne suis pas comme ces nombreux charognards qui souhaitent à tout prix obtenir du tout cuit pour ensuite lâcher l'affaire.

    ton code à l'air pleinement satisfaisant et optimisé, je n'en doute pas. mais... je n'ai pas compris comment tu as fait, c'est un peu trop compliqué (le %s je ne vois pas d'où il vient, data.append.. ? j'ai jamais utilisé les try et except pour le moment...). donc merci pour ton aide mais ça ne m'intéresse pas trop en fait ! désolé !

    merci de l'avoir souligné josmiley.

    donc, si ça ne vous embête pas, je souhaiterai comprendre mon erreur. ça se joue à pas grand chose ! je tiens absolument à ce que ça reste mon code. juste m'orienter sur quelque-chose qui le debug et aussi m'expliquer pourquoi mon "continue" ne fonctionne pas comme prévu.

    y a-t-il quelqu'un qui saurait me filer juste un tout petit coup de pouce en préservant la nature de mon code ?

    oui, il est sûrement pas très bon. mais c'est normal, c'est mon premier jour. c'est mon premier script. peu m'importe comment ça marche du moment que j'ai compris comment le faire marcher !

    (du coup maintenant qu'il y a une réponse plus personne va répondre.... )

    Si vous lisez cette ligne, merci de vous reporter au post #3 !

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    écris-le en français:
    "tant que l'entrée n'est pas comprise en [0 et 5], reposer la question."
    puis traduis en python.

    seulement il y a une contrainte => il faut récupérer l'entrée pour la suite du code
    or une affectation ne peux pas être une condition.

    donc a toi de bidouiller la boucle ...

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Jean_Jean_ Voir le message
    donc, si ça ne vous embête pas, je souhaiterai comprendre mon erreur. ça se joue à pas grand chose ! je tiens absolument à ce que ça reste mon code. juste m'orienter sur quelque-chose qui le debug et aussi m'expliquer pourquoi mon "continue" ne fonctionne pas comme prévu.
    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    a = float(input("entrez un chiffre de 1 a 5 correspondant a l'événement A : "))
    while a>=0 and a<=5:
     	print("valeur enregistrée")
     	break
    else: 
    	print("mauvaise valeur")
    	continue
    Ce qui correspond à l'intérieur de la boucle "while" est "juste":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     	print("valeur enregistrée")
     	break
    Le "continue" qui est plus loin ne sait pas trop quoi continuer: en tous cas, çà n'ira pas redemander une nouvelle lecture.

    Que dire? Prenez le temps de travailler sur un tuto pour apprendre les structures de contrôle de "base" (et le reste).
    Des personnes ont passé du temps à les écrire, les corriger, les rendre agréables,... Ceux qui répondent à un forum pourront difficilement faire "mieux" côté explications,...

    A vous de voir.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    bon, je n'y arrive pas. j'essaie depuis que j'ai posté mon premier message...

    quand ça veut pas ça veut pas ! j'ai cherché sur le forum et sur d'autres via des recherches, rien.

    j'ai testé plusieurs choses, comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a=input()
    while not  -1 < a < 5:
    	print("événement A : ")
    break
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while entree = int:
    	entree=input("événement A : ")
    	if entree>=0 and entree<=5:
    		print("valeur enregistrée")
    		break
    rien à faire.

    ___________________________________________________________________
    Bon, ce que je veux faire est pourtant très simple. Je vais tenter de l'écrire :

    1. initialise la variable (à quoi/combien ? et pourquoi ? à quoi ça sert déjà ?)
    2. demande à l'utilisateur de rentrer une valeur (pour A)
    3. si le nombre rentré n'est pas compris entre 0 et 5
    4. dit que la valeur est mauvaise et refais un tour de boucle en représentant l'étape 2
    5. sinon, dis qu'elle est bonne et passe à la boucle suivante (prochaine en étape 6)
    6. demande à l'utilisateur d'entrer une valeur (pour B)
    7. ... (on reproduit la même boucle que de 3 à 5)
    ...

    ainsi le programme demande 6 valeurs (a à f) comprises entre 0 et 5 et à la fin il fait un petit calcul et affiche un résultat.
    ___________________________________________________________________


    Donc là, je sèche et ça commence à me prendre sérieusement la tête. J'ai trouvé plusieurs exemple sur Internet mais ils ne correspondent pas tout à fait. J'ai cherché des tutos mais ils sont toujours trop bref en ne montrant qu'un seul exemple de boucle while, extrêmement basique.

    Sinon, j'ai eu droit à tout un tas d'erreur à chaque fois, comme :

    TypeError: unorderable types: int() < str()
    NameError: name 'a' is not defined

    Bref, s'il est possible qu'une bonne âme me montre un code simple et surtout commenté.

    Pas un code qui est hyper concis (je sais c'est mieux, mais pour débuter...) ni un code qui établisse une seconde variable : celle de la lettre correspondant à la question.

    Là je tourne vraiment trop en rond, je sais que c'est "le métier qui rentre" et c'est ce qu'il faut mais là je fais vraiment du surplace.

    Merci.

  10. #10
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    jean_jean, si tu as le sentiment de tourner en rond c'est parce que tu t'es entêté à vouloir faire tourner ton propre code qui, hélas, était impossible à faire tourner en l'état.


    La structure de ton code montrait que tu n'avais pas la moindre idée de ce que tu faisais, que tu n'en comprenais pas le sens et, selon moi, que tu n'as pas prit la peine d'ouvrir un cours et de le suivre méthodiquement.


    Il t'aurai suffit d'une demie heure pour analyser et comprendre l'exemple que je t'ai donné, qui correspond exactement à ce que tu cherches et qui est un code pour débutant, au lieu de cela tu as perdu ta journée.


    En programation on apprend les bases avec un cours et on progresse avec les codes des autres.

Discussions similaires

  1. [PHP] ShutBox//Probleme [debutant]
    Par Jazys dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2006, 23h01
  2. Probleme dans une condition
    Par 12_darte_12 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/02/2006, 12h50
  3. Probleme de vérification
    Par ldoudl dans le forum ASP
    Réponses: 11
    Dernier message: 01/02/2006, 00h38
  4. [Debutant]Problème Condition et TChart
    Par ghan77 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/01/2006, 12h12
  5. Problème dans une condition
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 31/05/2005, 10h19

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