Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/12/2020, à 15:41

chris7522

fonction pour verifier si l'entrée est un flottant et positif (python)

Bonjour a toutes et a tous ,
   Je voulais faire une fonction qui verifie si le nombre est un flottant superieur a 0 et le retourner seulement si c'est le cas , mais je m'embrouille ...

def flottant():
    while True:
        try:
            var=float(input('Entrez un flottant superieur a 0 :  \n'))
        except ValueError:
            print('Entrez un nombre :  ')
        if var > 0:
            break
    return var

J'ai essayé ca , mais c'est du grand n'importe quoi .
Merci de votre aide

Hors ligne

#2 Le 07/12/2020, à 15:52

beuguissime

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Bonjour,

Non ça n'est pas n'importe quoi, il suffit d'initialiser var avec une valeur interdite avant la boucle while pour rendre la fonction fonctionnelle.

Par exemple, ajoute ceci avant le while

var = -1.

Hors ligne

#3 Le 07/12/2020, à 16:01

Compte supprimé

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

chris7522 a écrit :

   Je voulais faire une fonction qui verifie si le nombre est un flottant superieur a 0 et le retourner seulement si c'est le cas , mais je m'embrouille ...

Bonjour,
à te lire, je ferais:

def verif_flottant(nbr):
    if isinstance(nbr, float) and nbr>0:
        return nbr

#4 Le 07/12/2020, à 16:42

Compte supprimé

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Par contre pour vérifier la validité d'une entrée, les expression rationnelles sont bien pratiques:

entree = input()
import re
def verif_flottant(nbr):
    match = re.match(r"\d+\.\d+", nbr)
    if match:
        return nbr
    else:
        entree = input('Erreur recommence >')
        verif_flottant(entree)
verif_flottant(entree)

#5 Le 07/12/2020, à 20:28

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

beuguissime a écrit :

Bonjour,

Non ça n'est pas n'importe quoi, il suffit d'initialiser var avec une valeur interdite avant la boucle while pour rendre la fonction fonctionnelle.

Par exemple, ajoute ceci avant le while

var = -1.

Qu'entends tu pars valeur interdite ? je vois a peu pres ce que tu veux dire mais c'est un peu flou pour moi

Hors ligne

#6 Le 07/12/2020, à 20:38

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

pseudofab a écrit :

Bonjour,
à te lire, je ferais:

def verif_flottant(nbr):
    if isinstance(nbr, float) and nbr>0:
        return nbr

Merci , c'est bien plus simple ! 
Du coup quel interet a faire des try except ...?
Peut etre a faire d'autres verifications ?

Hors ligne

#7 Le 07/12/2020, à 20:41

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

En fait mon code complet était celui -ci :

def flottant():
    while True:
        try:
            var=float(input('Entrez un flottant superieur a 0 :  \n'))
        except ValueError:
            print('Entrez un nombre :  ')
        if var > 0:
            break
    return var
    
    
result = flottant()
result = str(result)
avant_virgule,apres_virgule = result.split('.')
','.join([avant_virgule,apres_virgule[:3]])
print(result)

Et ca ne fait pas ce que je veux , c'est a dire remplacer le point par une virgule et 3 chiffres seulement apres la virgule

Hors ligne

#8 Le 07/12/2020, à 22:08

beuguissime

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

chris7522 a écrit :

Qu'entends tu pars valeur interdite ? je vois a peu pres ce que tu veux dire mais c'est un peu flou pour moi

Excuse-moi, ma réponse n'était pas suffisamment explicite. Je voulais parler d'une valeur interdite par ton code, autrement dit une valeur, flottant ou entier, inférieur ou égale à 0 de manière à faire échouer le test if.

Donc ma suggestion permet de rendre ton code fonctionnel en ajoutant une seule ligne comme ci-dessous :

def flottant():
    var = -1.
    while True:
        try:
            var=float(input('Entrez un flottant superieur a 0 :  \n'))
        except ValueError:
            print('Entrez un nombre :  ')
        if var > 0:
            break
    return var

Sans cette modification, ton code échoue car en sortant du try/except ET en cas d'échec du try/except, alors la variable var n'existe pas et le test if var > 0 lève une exception. En initialisant var à -1, alors soit le try/except réussi et var est définie par la valeur donnée, soit il échoue et var vaut -1. Dans tous les cas, le test est évalué. La valeur -1 fait échouer le test et redemande une valeur à l'utilisateur/rice.

La proposition de pseudofab ne gère pas la demande de la valeur à l'utilisateur/rice.

Hors ligne

#9 Le 07/12/2020, à 23:13

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Merci j'ai compris ton explication .
Merci a tous les deux de l'aide que vous m'avez apporté smile

Dernière modification par chris7522 (Le 08/12/2020, à 05:45)

Hors ligne

#10 Le 08/12/2020, à 10:06

Compte supprimé

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Bonjour,

Et ca ne fait pas ce que je veux , c'est a dire remplacer le point par une virgule et 3 chiffres seulement apres la virgule

Normal .. indice: que vaut result quand tu le print? wink

quel interet a faire des try except ...?

On les utilise surtout(voir tuto) pour gérer des exceptions...
Tu peux les utiliser comme tu le fais ,mais ce n' est pas leur usage premier.
Pour vérifier la validité d’une saisie,  on peut utiliser notamment une expression rationnelle comme montrée en #4...

note:
Ton code ne distingue pas un entier d'un float..

#11 Le 08/12/2020, à 17:56

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Bonsoir,
Lorsque je rentre un reel : 9.99999

chris@chris:~/Bureau/Essai$ python3 essai38.py
Entrez un flottant superieur a 0 :  
9.99999
9.99999

Lorsque je rentre un entier : 999999

chris@chris:~/Bureau/Essai$ python3 essai38.py
Entrez un flottant superieur a 0 :  
999999
999999.0

Lorsque je rentre une chaine :

chris@chris:~/Bureau/Essai$ python3 essai38.py
Entrez un flottant superieur a 0 :  
bavure policiere
Entrez un nombre :  
Traceback (most recent call last):
  File "essai38.py", line 12, in <module>
    result = flottant()
  File "essai38.py", line 7, in flottant
    if var > 0:
UnboundLocalError: local variable 'var' referenced before assignment

Je pensais qu'avec cette ligne , je pourrai faire 2 en 1 :

var=float(input('Entrez un flottant superieur a 0 :  \n'))

1 - J'allais pouvoir convertir un entier que l'utilisateur pourrai rentrer , en un float
2- Je pensais que si l'utilisateur decidait de rentrer une chaine de caractere la conversion serai impossible et qu'il y aurai un message d'erreur

Hors ligne

#12 Le 08/12/2020, à 18:28

beuguissime

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Bonsoir,
L'erreur que tu montres au n°38 prouve que tu n'as pas appliqué ma modification. Le try/except lève une exception mais var n'existe pas, donc ça échoue. Je ne comprends ce que tu cherches à montrer avec ton message n°38. Oui, ça ne donne pas le résultat escompté et c'est normal puisque c'est a même situation qu'au message 1.

Hors ligne

#13 Le 08/12/2020, à 20:50

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Je viens de tester avec var = - 1 avant while et c'est le meme resultat excepté lorsque je decide de rentrer une chaine :

chris@chris:~/Bureau/Essai$ python3 essai38.py
Entrez un flottant superieur a 0 :  
bavure policiere
Entrez un nombre :  
Entrez un flottant superieur a 0 :  

Hors ligne

#14 Le 08/12/2020, à 21:26

beuguissime

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

chris7522 a écrit :

Je viens de tester avec var = - 1 avant while et c'est le meme resultat excepté lorsque je decide de rentrer une chaine :

C'est le même résultat ?? Non.

Si tu rentres quelque chose qui n'est pas convertible en flottant, ça redemande une saisie ; chose que ton code initial ne faisait pas et qui me paraissait être le beugue à corriger. Si tu rentres quelque chose qui est convertible en flottant, un flottant ou un entier, le code se poursuit et test le signe. Si c'est négatif, ça redemande une saisie ; si c'est positif strictement, le code poursuit son exécution.

J'avais compris que ce que je décris ci-dessus était le comportement souhaité. Si tel n'est pas le cas, je te prie de dire clairement ce que tu veux pour chaque cas de figure.

Hors ligne

#15 Le 08/12/2020, à 22:00

chris7522

Re : fonction pour verifier si l'entrée est un flottant et positif (python)

Ce que tu m'a dit de faire dans la fonction est parfait et répond a mes attentes .
Je crois que le problème vient de ce que j'ai écris après l'appel mais c'est pas grave . J'en suis encore a l'apprentissage des bases en python . Ça va finir par rentrer !

Hors ligne