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

  • Votes
  • Date
  • Date décroissante
  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
    1. Bonjour,

      Que voit-on si l'on fait

      print(cotes)

      juste après

      cotes = input(.....
      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.