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 :

SciTE : Curieuse interprétation de la valeur zéro !


Sujet :

Python

  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Billets dans le blog
    1
    Par défaut SciTE : Curieuse interprétation de la valeur zéro !
    Bonjour,

    Voilà, j'essaye d'apprendre comment fonctionne Python.
    Un petit truc me perturbe. Dans le code suivant, écrit avec SciTE 1.73 et Python 2.5, je dois pouvoir introduire une note égale à zéro.
    Normalement, c'est une note négative qui fait sortir de la boucle de saisie des valeur ...

    Mais voilà ...

    quand je tape une valeur = 0 (zéro), Python quitte la boucle de saisie, comme si j'avais introduit un nombre négatif.

    Il semble donc qu'il interprète cette note comme une valeur "FAUX".

    Où est l'erreur ???

    ************************* Le code ***********************
    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
    # -*- coding:Latin-1 -*-
    #Écrire une boucle de programme qui demande à l'utilisateur d'entrer des notes d'élèves. La
    #boucle se terminera seulement si l'utilisateur entre une valeur négative. Avec les notes ainsi
    #entrées, construire progressivement une liste. Après chaque entrée d'une nouvelle note (et
    #donc à chaque itération de la boucle), afficher le nombre de notes entrées, la note la plus
    #élevée, la note la plus basse, la moyenne de toutes les notes.
    cpt1, notes, bas, haut, moyen, s, t, i, j, k = 0, [], -1, 0, 0, 1, 0, 0, 0, 0
    #Tant qu'on introduit pas une note négative, on boucle
    print "Indroduire les notes en validant après chaque note. Une note négative provoque la fin de la saisie. "
    #
    while (s > 0) :
    	t = input('Introduisez la note puis validez ')
    	if t > 0 :	#Si note positive
    		print "T > 0"
    		notes.append(t)	#Ajouter à la liste
    		print notes
    		cpt1 = len(notes)	#Compter les enregistrements dans la liste
    		while i < len(notes) :	#Lire chaque enregistrement de la liste
    			if notes[i] > haut :	#Chercher la note maxi
    				haut = notes[i]
    			if bas == -1 :	#Pour introduire la première valeur mini
    				bas = t
    			elif notes[i] < bas :	# Chercher la note la plus basse
    				bas = notes[i]
    			i=i+1	
    	else :
    		break
    while j < len(notes) :	#Lire toutes les notes
    	moyen = moyen + notes[j]	#Additionner toutes les notes
    	j=j+1
    #
    if j!= 0 :	#Intercepter une division par zéro
    	moyen = moyen/(j)	# Calculer la moyenne des notes
    #
    print "Nombre de notes : ", cpt1
    print "Note maxi : ", haut
    print "Note mini : ", bas
    print "Note moyenne : ", moyen
    *********************************************************

    Une seconde question : n'y a-t-il pas moyen de configurer SciTE pour ne plus avoir à écrire la première ligne de pseudocode suivante ?
    (C'est pour pouvoir utiliser les caractères accentués)

    # -*- coding:Latin-1 -*-

    Je vous remercie d'avance.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Tout d'abord, aucun de tes problèmes ne vient de SciTE.
    L'histoire d'encodage, ça a toujours été comme ça, puisque toutes sortes d'encodages exotiques existent, et Python est fait pour en supporter le plus possible.
    Ensuite, il est tout-à-fait normal que Python quitte la boucle, puisque tu lui demandes de quitter si la note n'est pas strictement positive
    Pour finir, ton code peut être largement amélioré, avec les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sum(liste) #somme de tous les éléments
    min(liste) #plus petit élément
    max(liste) #plus grand élément
    Ton code devient donc :
    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
     
    notes = []
     
    print "Indroduire les notes en validant après chaque note. Une note négative provoque la fin de la saisie. "
     
    while True:
        t = input('Introduisez la note puis validez ')
        if t >= 0: #Si note positive
            print "T > 0"
            notes.append(t) #Ajouter à la liste
            print notes
        else:
            break
     
    if len(notes) == 0: #Intercepter une division par zéro
        print "Aucune note"
    else:
        moyenne = sum(notes) / len(notes) # Calculer la moyenne des notes
        print "Nombre de notes :", len(notes)
        print "Note maxi :", max(notes)
        print "Note mini :", min(notes)
        print "Note moyenne :", moyenne

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Par défaut
    Salut !
    Citation Envoyé par Papy Octet
    quand je tape une valeur = 0 (zéro), Python quitte la boucle de saisie, comme si j'avais introduit un nombre négatif.
    Voyons voir ta structure conditionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (s > 0) :
    	t = input('Introduisez la note puis validez ')
    	if t > 0 :	#Si note positive
    		[...]
    	else :
    		break
    La réponse est simple : quand tu saisis '0', la condition 't > 0' n'est pas vérifiée, puisque 0 = 0... Donc on se retrouve dans le 'else', et on exécute l'instruction 'break', qui commande une sortie de boucle !

    Tu devrais fixer la condition à 't >= 0', ce qui provoquera une sortie de boucle pour t < 0.

    Edit : Arg, devancé par oiffrig

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Par défaut
    Mais je ne suis pas d'accord sur le 'while True' : il n'y a rien qui justifie l'usage de boucles infinies, avec des 'break' de-ci de-là. Une boucle remplit une tâche précise, et elle doit être contrôlée, ce qui passe par des conditions d'arrêt réfléchies.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while t >= 0:
        t = input('Introduisez la note puis validez ')
        if t >= 0: #Si note positive
            print "T > 0"
            notes.append(t) #Ajouter à la liste
            print notes
    Sinon ça devient vite le bazar, et là c'est le drâme

    Edit : d'ailleurs, je ne suis pas non plus d'accord avec le 'break' que j'ai écrit...

  5. #5
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Billets dans le blog
    1
    Par défaut
    Un grand merci à vous

    Je réponds dans l'ordre :
    1. A oiffrig : Merci pour tes suggestions. Comme je l'ai dit, je débute et je suis encore TRES TRES loin de connaitre toutes les fonctions de Python. Je viens de trouver une liste de ces fonctions, en anglais (ci qui ne me pose pas trop de problème).
    Je suis en train d'effectuer tous les exercices contenus dans le livre "Python notes 2 Fr.pdf. Ce livre est vraiment extra pour un gros bleu comme moi

    2. A Vladislav IV : Affirmatif ! Je dois vraiment faire plus attention à ce que j'écris. Mais bon, avec la pratique, ça viendra.
    Bon, mais faut que j'me grouille, à 57 ans, je n'ai plus tant de temps que ça devant moi
    J'en suis à la page 60 du livre que je cite ci-dessus ! Et pour un début, ce n'est pas encore si mal

    A bien y réfléchir, tu as raison au sujet du break. J'ai péché par facilité, là. Si j'avais un peu mieux analysé ma boucle ...

    Merci à vous.
    A+

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/04/2011, 13h04
  2. Réponses: 4
    Dernier message: 21/10/2009, 17h00
  3. Réponses: 1
    Dernier message: 26/07/2009, 01h21
  4. Valeurs Nulles ou Valeurs à Zéro
    Par LLaurent dans le forum XMLRAD
    Réponses: 5
    Dernier message: 30/07/2003, 11h40

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