Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3136

Re: Filtrer un nombre saisi

From Benoit Izac <use.reply.to@INVALID.ADDRESS>
Newsgroups fr.comp.lang.python
Subject Re: Filtrer un nombre saisi
Date 2019-02-11 19:36 +0100
Message-ID <87mun2tboa.fsf@izac.org> (permalink)
References <slrnq639rl.vqc.lulu042@Minty.Rock-n-Roll.org>

Show all headers | View raw


Bonjour,

Le 11/02/2019 à 17:48, Lulu a écrit dans le message
<slrnq639rl.vqc.lulu042@Minty.Rock-n-Roll.org> :

> #! /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

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-11 17:48 +0100
  Re: Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-11 18:33 +0100
  Re: Filtrer un nombre saisi yves <yves@free.invalid> - 2019-02-11 17:46 +0000
    Re: Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-11 23:27 +0100
      Re: Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-11 23:40 +0100
        Re: Filtrer un nombre saisi Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2019-02-12 07:34 +0100
          Re: Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-12 10:00 +0100
  Re: Filtrer un nombre saisi Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2019-02-11 19:36 +0100
    Re: Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-11 23:26 +0100
      Re: Filtrer un nombre saisi Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2019-02-12 07:24 +0100
        Re: Filtrer un nombre saisi Lulu <lulu042@fry.fr.invalid> - 2019-02-12 10:17 +0100
          Re: Filtrer un nombre saisi Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2019-02-12 18:54 +0100
    Re: Filtrer un nombre saisi Nicolas <nicolasp@aaton.com> - 2019-02-12 08:30 +0100

csiph-web