Path: csiph.com!news.redatomik.org!news.izac.org!reader From: Benoit Izac Newsgroups: fr.comp.lang.python Subject: Re: Filtrer un nombre saisi Date: Mon, 11 Feb 2019 19:36:21 +0100 Message-ID: <87mun2tboa.fsf@izac.org> References: Reply-To: benoit.izac@free.fr Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Injection-Info: keg.izac.org; logging-data="10598"; mail-complaints-to="usenet@izac.org" Xref: csiph.com fr.comp.lang.python:3136 Bonjour, Le 11/02/2019 à 17:48, Lulu a écrit dans le message  : > #! /usr/bin/python3 > # -*- coding: utf-8 -*- ^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python. > print("\n Hellllllllo world !!!!!!\n") > > from math import * from math import pi > def surfCercle(r): > "Surface d'un cercle de rayon r" > return pi * r**2 > > def filter_is_number(LaString): > La_String_To_Return="0" > for character in LaString: > print(character," : ",end="") > if character in [".","0","1","2","3","4","5","6","7","8","9"]: > print("0K, in list",end="") > La_String_To_Return=La_String_To_Return+character > print(", La_String_To_Return =",La_String_To_Return) > else: > print("not in the list") > return La_String_To_Return On peut faire plus simple et plus lisible : def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789']) > [...] > > J'ai bien compris que la réponse à un input est forcément de type string > et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))' > plante si l'utilisateur saisi des caractères alphabétiques dans le > rayon. > > J'ai donc écrit la fonction filter_is_number pour filter les caractères > de la chaîne saisie et ne laisser passer que le numérique... > > Avant d'écrire cette fonction, j'ai cherché en vain sur le web une > fonction qui permette de "nettoyer" la saisie d'un utilisateur. > > Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de > même pas très original... > > Sans parler du fait que ma fonction doit être une véritable horreur à > vos yeux ;-) Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ». > Il doit bien exister une fonction "built in" qui m'aurait permis > d'arriver à mes fins, non ? Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la façon la plus simple. -- Benoit Izac