Filter les valeurs d'un input()

Fermé
maxime_boris Messages postés 35 Date d'inscription dimanche 23 janvier 2022 Statut Membre Dernière intervention 17 novembre 2022 - Modifié le 1 févr. 2022 à 16:59
mamiemando Messages postés 33612 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 1 avril 2025 - 1 févr. 2022 à 17:07
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

yg_be Messages postés 23509 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 avril 2025 Ambassadeur 1 574
1 févr. 2022 à 11:17
bonjour,
le code ne fonctionne pas?
0
maxime_boris Messages postés 35 Date d'inscription dimanche 23 janvier 2022 Statut Membre Dernière intervention 17 novembre 2022
1 févr. 2022 à 12:16
bonjour oui le code ne fonctionne pas je ne sais pas d'ou ça provient. As tu une idée
0
yg_be Messages postés 23509 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 avril 2025 1 574
1 févr. 2022 à 15:44
"le code ne fonctionne pas": que rentres-tu? que reçois-tu?
0
yg_be Messages postés 23509 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 avril 2025 1 574 > yg_be Messages postés 23509 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 avril 2025
1 févr. 2022 à 15:52
est-ce ton premier exercice avec try/except?
essaie peut-être avec un exercice plus simple.
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 1 févr. 2022 à 13:55
Bonjour,

Que voit-on si l'on fait

print(cotes)

juste après

cotes = input(.....
0
mamiemando Messages postés 33612 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 1 avril 2025 7 836
Modifié le 1 févr. 2022 à 17:11
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
0