#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)
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)
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)
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)
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é
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?
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)
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