Filter les valeurs d'un input()

Bonjour,

Je souhaite remplir la liste
Cotes
puis filtrer cette liste avec la fonction ci_dessous.

Merci

def ifilter(predicate, iterable):
    if predicate is None:
        predicate = bool
    for x in iterable:
        if predicate(x):
            yield x

cotes = input("Veuillez saisir les cote: ").split()

Cotes = []
for x in cotes:
    try:
        float(x)
    except ValueError:
        Cotes.append(x)
print(Cotes)

d = ifilter(lambda x: x < 20, Cotes)
print(d)

4 réponses

  1. bonjour oui le code ne fonctionne pas je ne sais pas d'ou ça provient. As tu une idée
    1. Contributeur
      "le code ne fonctionne pas": que rentres-tu? que reçois-tu?
    2. Contributeur
      @yg_beest-ce ton premier exercice avec try/except?
      essaie peut-être avec un exercice plus simple.
  2. Bonjour,

    Que voit-on si l'on fait

    print(cotes)

    juste après

    cotes = input(.....
    1. Modérateur
      Bonjour,

      Comme Phil le souligne, mettre des
      print
      t'aiderait sans doute à mieux comprendre ce qui ne va pas. En l'occurrence :
      • Ta variable
        cotes
        contient une liste de chaînes de caractère (e.g.
        ['5', '20', '10', '30', '40']
        si on saisit
        5 20 10 30 40
        .
      • Ta boucle
        for
        itère sur ces valeurs, calcule la conversion flottante (qui dans mon exemple marche pour chaque élément) mais n'en fait rien. J'imagine que tu souhaites dans ces conditions les ajouter à la fin de
        Cotes
        ? Étonnamment, si la valeur n'est pas transformables en
        float
        , alors tu vas l'ajouter à la fin de
        Cotes
        . Donc si par exemple tu saisis
        abc def
        ,
        Cotes
        sera égal à
        ["abc", "def"]
        . Il va sans dire que l'appel au prédicat par défaut (
        bool()
        ) n'a aucune chance de marcher, puisque ces valeurs ne correspondent en rien à des booléens.
      • Et ceci m'amène au point suivant : le prédicat par défaut me semble bancale. En gros il vérifie si la valeur passée en paramètre se transforme naturellement en
        bool
        . Alors certes, appeler
        bool()
        ne plantera pas car tu reçois des valeurs numériques, mais cette fonction renverra
        False
        si
        0
        figure parmi tes côtes. Un prédicat plus naturel serait celui qui renvoie systématiquement
        True
        (et donc, qui fait que
        ifilter
        ne filtre rien), ce que tu peux écrire avec une
        lambda
        .


      predicate = (lambda x: True)


      Pour information, la fonction
      filter
      de python fait plus ou moins ce que tu tentes de coder dans
      ifilter
      , j'imagine que c'est le but de l'exercice ?

      Bonne chance