Filter les valeurs d'un input()
Bonjour,
Je souhaite remplir la liste
Merci
Je souhaite remplir la liste
Cotespuis 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 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
le code ne fonctionne pas? -
bonjour oui le code ne fonctionne pas je ne sais pas d'ou ça provient. As tu une idée
-
Bonjour,
Que voit-on si l'on fait
print(cotes)
juste après
cotes = input(..... -
Bonjour,
Comme Phil le souligne, mettre desprint
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 saisit5 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 deCotes
? Étonnamment, si la valeur n'est pas transformables enfloat
, alors tu vas l'ajouter à la fin deCotes
. Donc si par exemple tu saisisabc 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, appelerbool()
ne plantera pas car tu reçois des valeurs numériques, mais cette fonction renverraFalse
si0
figure parmi tes côtes. Un prédicat plus naturel serait celui qui renvoie systématiquementTrue
(et donc, qui fait queifilter
ne filtre rien), ce que tu peux écrire avec unelambda
.
predicate = (lambda x: True)
Pour information, la fonctionfilter
de python fait plus ou moins ce que tu tentes de coder dansifilter
, j'imagine que c'est le but de l'exercice ?
Bonne chance - Ta variable