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

  1. #1
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    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 Candidat au 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
    Points : 1
    Points
    1
    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 é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,

    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 expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    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 Candidat au 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
    Points : 1
    Points
    1
    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 expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    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 sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    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 Candidat au 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
    Points : 1
    Points
    1
    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 é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
    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.

  11. #11
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    Par défaut
    D'accord Vins, je vais donc réutiliser le tiens tout en tentant de le modifier un peu par la suite. Alors, du coup, j'aurais quelques questions sur celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # -*- coding: utf-8 -*-
     
    data = [] # data vient d'où ? est-ce une variable ?
     
    for x in range(6): # range ?
        val = 0 # val c'est le nom de la variable ?
        while val < 1 or val > 5:
            val = float(raw_input("Entrez un chiffre de 1 a 5 correspondant a" 
                                    " l'événement %s : " % x))  # pk 'raw' pas juste input
        data.append(val)  # juste au dessus à quoi sert les % ? %s vient d'où ?
          # data.append vient d'où ? data est un pack/module ? append en dépend ?
    print data
    Oui, ça fait beaucoup de questions sur un si petit code Mais je vais m'améliorer grâce à ton code, faut juste que je capte. Le %s j'ai déjà vu ça sinon, ça récupère la valeur d'une variable, mais en Python je connais pas... je pense que c'est la mm chose. A confirmer.

    Merci en tous cas

    Je tenterai de gonfler un peu mon script au fur et à mesure (autour du tien) des choses que je vais apprendre.

  12. #12
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    Par défaut
    J'ai une erreur de syntaxe avec ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        print data
                 ^
    SyntaxError: invalid syntax
    J'ai tenté de mettre :

    à la fin, mais ça m'a donné une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "test.py", line 9, in <module>
        val = float(raw_input("Entrez un chiffre de 1 a 5 correspondant a" 
    NameError: name 'raw_input' is not defined
    je précise que je suis sous python 3.2

    EDIT: j'ai modifié en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data = []
     
    for x in range(6):
        val = 0
        while val < 1 or val > 5:
            val = float(input("Entrez un chiffre de 1 a 5 correspondant a" 
                                    " l'événement %s : " % x))
        data.append(val)
     
    print("",data)
    ça fonctionne.

    me reste à adapter avec le calcul en bas, je m'y attèle...

  13. #13
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    Par défaut
    Hello, je viens de réussir, en fait y'avait quelques trucs de base que je savais pas et/ou n'avait pas saisi.

    Bon, ça reste toujours très très débutant, c'est donc très redondant et gros, mais ça fonctionne :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #!/usr/local/bin/python
    # -*- coding: Utf-8 -*-
     
    continuer_programme = True
     
    while continuer_programme:
    	a = -1 # suis-je obligé de les définir à -1 ?
    	b = -1 # quelle valeurs puis-je mettre ici ? 
    	c = -1 # beaucoup de valeurs différentes non ?
    	d = -1 # pourquoi ?
    	e = -1 # et c'est très long à écrire ! comment faire plus simple ?
    	f = -1 # j'ai tenté : a,b,c,d,e,f=-1 mais ça n'a pas marché
    	while a <= 0 or a >=5: # quelle différence entre or et and ici ?
    		a=float(input("événement A : ")) # pourquoi déclarer float ici...
    		try:
    			a=float(a) # ... et ici ?
    		except ValueError:
    			print("valeur hors intervalle")
    			a=-1 # pourquoi redéfinir la variable ici ? toujours -1 ?
    			continue
    		print("valeur de A enregistrée : ",a)
    	while b <= 0 or b >=5: # à partir de la je répète la boucle...
    		b=float(input("événement B : ")) # possibilité de faire
    		try: # nettement plus court. comment ?
    			b=float(b)
    		except ValueError:
    			print("valeur hors intervalle")
    			b=-1
    			continue
    		print("valeur de B enregistrée : ",b)
    	while c <= 0 or c >=5:
    		c=float(input("événement C : "))
    		try:
    			c=float(c)
    		except ValueError:
    			print("valeur hors intervalle")
    			c=-1
    			continue
    		print("valeur de C enregistrée : ",c)
    	while d <= 0 or d >=5:
    		d=float(input("événement D : "))
    		try:
    			d=float(d)
    		except ValueError:
    			print("valeur hors intervalle")
    			d=-1
    			continue
    		print("valeur de D enregistrée : ",d)
    	while e <= 0 or e >=5:
    		e=float(input("événement E : "))
    		try:
    			e=float(e)
    		except ValueError:
    			print("valeur hors intervalle")
    			e=-1
    			continue
    		print("valeur de E enregistrée : ",e)
    	while f <= 0 or f >=5:
    		f=float(input("événement F : "))
    		try:
    			f=float(f)
    		except ValueError:
    			print("valeur hors intervalle")
    			f=-1
    			continue
    		print("valeur de F enregistrée : ",f)
     
    		x = float((a*(0.5/5))+(b*(0.01/5))+(c*(0.2/5))+(d*(0.16/5))+(e*(0.04/5))+(f*(0.09/5)))
    		x=x*100
    		print(x)
     
    # pourquoi n'ai-je pas pu écrire :
    # float((a*(0.5/5))+(b*(0.01/5))+(c*(0.2/5))+(d*(0.16/5))+(e*(0.04/5))+(f*(0.09/5))*100)
    # ?? (je parle du *100)
    # à cause de ça j'ai dû écrire encore un peu plus de code. Bizarre, non ?
    		quitter = input("souhaitez vous quitter le programme ? [y/n]")
    		if quitter == "y" or quitter == "Y":
    			print("fin du programme")
    		continuer_programme = False		
    		if quitter == "n" or quitter == "N":
    			continuer_programme = True
    J'imagine qu'il y a possibilité de diviser la longueur de ce programme par 6 !

    Une idée ? (sans pour autant partir sur un code complètement différent)

    Sachant que VinS ton code est bien mais je ne peux pas récupérer les valeurs une par une pour y appliquer ma formule en bas.

    J'ai également soulevé quelques zones pas tout à fait claires en commentaires dans mon code...

    Bon, en tout cas, ça avance, non ?!!

    Merci !

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    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
    def enjoy(letter):
        n = -1
        while n not in range(1, 6):
            n = int(input("entrez un chiffre de 1 a 5 correspondant a l'évènement {} : ".format(letter))) # voir format dans la doc
        return n
     
    LETTERS = {"A":0, "B":0, "C":0, "D":0, "E":0, "F":0} # dictionnaire
     
    for i in LETTERS: # i prend la valeur de A, puis B, etc...
        val = enjoy(i)
        LETTERS[i] = val # j'affecte la valeur correspondant à la lettre
     
    a, b, c, d, e, f = LETTERS.values() # je récupère les valeurs de LETTERS ...
     
    x = (((a*0.5) + b + (c*0.2) + d + (e*0.04) + f) / 6) * 100
     
    print(x)
    Ce code n'est peut-être pas de toi, mais les indications permettraient de t'indiquer où chercher.

    Bonne continuation
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Jean_Jean_ Voir le message
    J'imagine qu'il y a possibilité de diviser la longueur de ce programme par 6 !

    Une idée ? (sans pour autant partir sur un code complètement différent)
    Pour éviter de répéter 6 fois la séquence d'instructions d'une saisie, il faut "factoriser" en remplaçant les 6 cut&paste par 6 appels de fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def get_value(prompt):
        while True:
            s = input(prompt)
            try:
                value = float(s)
            except ValueError:
                print ('la valeur doit être de type %s' % factory.__name__)
            else:
                if 0.0 < value < 5.0:
                    return value
                print ('la valeur doit être dans ]0..5[')
    Après, il faut "saisir" ces "valeurs" en appelant cette fonction depuis une autre séquence d'instructions.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    done = False
    while not done:
        values = []
        for e in 'ABCDEF':
            values.append(get_value('evenement %s' % e))
            print ('%s enregistré' % e)
     
        a, b, c, d, e, f = values    
        x = (a*0.5 + b*0.01 + c*0.2 + d*0.16 + e*0.04 + f*0.09) * 100/5
        print(x)
        done = input('continuer[N]: ') in 'nN'
    Comme vous n'avez pas pris le temps d'ouvrir un tuto pour apprendre controle, boucles, liste, sequence, assignation multiple,... vous ne pourrez pas tout comprendre: c'est votre choix.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    pour le fun ...

    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
    def question():
        for c in "ABCDEF\n":
            while True:
                try:
                    rep = int(input("entrez un chiffre de 1 a 5 correspondant a l'événement %s : "%c))
                    if 0<=rep<=5: break
                except ValueError:
                    continue
            yield rep
     
    q = question().__next__
     
    x = float((((q()*0.5)+q()+q()*0.2)+q()+(q()*0.04)+q()/6)*100)
     
    print(x)

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut
    Citation Envoyé par josmiley Voir le message
    pour le fun ...
    Superbe (mais ne va pas plaire au PO)

    Mais, pourquoi ce retour charriot dans
    ?

    De toute façon on n'arrive jamais à ce \n...

  18. #18
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    Citation Envoyé par Drawingrom Voir le message
    Mais, pourquoi ce retour charriot dans
    ?
    ça évite de raise un StopIteration.

  19. #19
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    Par défaut
    Merci wiztricks!

    C'est effectivement beaucoup plus concis. Et j'ai plutôt bien compris ton code figure toi ! Hormis ceci :

    factory ?

    Sinon merci aux autres. Fred1599, je suis désolé mais, bien que je vienne d'étudier les dico aujourd'hui, je trouve que ça complique le truc (enfin, selon moi, à mon niveau de débutant). Mais je le garde sous le coude quand même. josmiley, yield et __next__ je ne vois pas ce que c'est pour le moment donc bon, je vais attendre d'en savoir un peu plus.

    Je pense repartir depuis le code de wiztricks parce-qu'il me paraît plus simple (plus compréhensible). Je vais l'étudier un peu plus, faire quelques tests.

    Dès que je me suis arrêté sur un code, je vais passer à l'étape suivante de ce programme :

    ----> récupérer les données entrées par un utilisateur dans un fichier .txt

    Puis encore après :

    ----> faire un autre code qui me permets de tracer des courbes (un graphique) en fonction de ces données. En fait, j'initialiserai la date lors de la première utilisation du programme, puis à chaque fois (chaque jour) que le programme sera lancé (pas plus d'une fois par jour) il enregistrera les données du jour dans le fichier.txt. Et à partir de là, cet autre programme demandera au fichier de sortir un graphique qui sera les données entrée dans une période telle que : 1 semaine, 1 mois, 1 an.

    Je n'en suis pas encore là. J'étudie python au fur et à mesure et cette idée m'est venue car aujourd'hui j'ai commencé à étudier les fichiers en python

    Donc bon, le code évolue au fur et à mesure que j'apprends.

    En fait, j'ai pas envie d'apprendre juste en lisant. C'est pour ça wiztricks tu me dis que j'ai pas les bases et tout, mais c'est parce-que je n'ai pas encore lu grand chose, j'en apprend tous les jours.

    Bref, merci à vous, je reviendrai vers ce topic quand j'aurai avancé de mon côté et que je serai un peu coincé.

    Merci encore à ceux qui ont apporté leur idées

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Jean_Jean_ Voir le message
    C'est effectivement beaucoup plus concis. Et j'ai plutôt bien compris ton code figure toi ! Hormis ceci :
    factory ?
    Désolé, la ligne devrait être print ('la valeur doit être de type flottant').
    Le factory sort d'une première mouture de code qui en deuxième lecture m'a semblé trop compliquée. Comme Python est interprété, çà ne pête que si on passe dans cette branche i.e. si on entre 'aaa', mais je fais rarement un plan de test et un script de test pour ce genre de code.

    En fait, j'ai pas envie d'apprendre juste en lisant. C'est pour ça wiztricks tu me dis que j'ai pas les bases et tout, mais c'est parce-que je n'ai pas encore lu grand chose, j'en apprend tous les jours.
    Les tutos vous apportent du vocabulaire et proposent des exercices simples pour vous permettre de vous approprier les concepts expliqués dans le chapitre. L'avantage d'un tuto est d'avoir été structuré pour vous permettre d'être plus rapidement à l'aise avec les fonctionnalités de bases d'un langage.

    "Programmer" est une activité dans laquelle vous lisez 80% du temps (lorsque vous relirez un code écrit par vous il y a 6 mois vous vous demanderez parfois quel est le crétin qui à codé un machin aussi pourri).
    Passée l'étape "tutos" vous serez équipé pour lire la documentation Python puis vous irez peut être lire les sources pour savoir comment çà marche,...

    "Lire" pour apprendre et savoir écrire n'est pas spécifique à la programmation: c'est aussi vrai pour le français, l'anglais,...

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

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