J'ai des problèmes avec un simple script Python. Le script a une copie de la liste des températures et je souhaite imprimer toutes les températures situées en dehors de 0 à 5.
Cela fonctionne bien jusqu'à ce que je saisis un point flottant. Par exemple, si la liste comporte 1, 4, 6, -2, elle n'imprime que 6 et -2 comme prévu. Si j'entraîne 1, 4, 4.3, 6, il imprime 4.3 et 6. P>
Je comprends que ce problème est lié à des points flottants et à une raison quelconque de la raison pour laquelle, si ce n'est l'affirmation, vous laissez passer des points flottants. J'ai cherché haut et bas mais pas de chance bien que je sois sûr que c'est très simple. P>
Savez-vous pourquoi c'est le cas? P>
# input for temperatures
temperatures = [1, 4, 4.3,6]
# empty output list
output_list = []
for temperature in temperatures:
if temperature not in range (0,6):
output_list = output_list + [temperature]
# print the output_list
print(output_list)
3 Réponses :
Ce que vous voulez réellement vérifier n'est pas de savoir si la valeur est l'une des 0, 1, 2, 3, 4, 5, mais que ce soit> = 0 et <= 5. Donc, Faites ceci: p> BTW, pour comprendre plus clairement ce que Température non dans la plage (0,6) Code> signifie que la température n'est pas l'une des valeurs dans la plage (0,6) code>, qui est 0, 1, 2, 3, 4, et 5.
code> fait, essayez ceci: p>
La plage Par exemple, Pour votre question, une meilleure solution remplacerait le Voici votre code complet corrigé: notez une compréhension de liste plus simple ici: p> () code> La fonction Sure uniquement des numéros avec des étapes de 1 par défaut. Plage (4) Code> Retours 0, 1, 2, 3 code>. Comparez ceci à la plage (2, 4) code> qui retourne 2, 3 code> et plage (2, 4, 0.5) code> qui retourne 2 , 2.5, 3, 3.5 code>. P> si la température ne figure pas dans la plage (0,6): code> dans dans sinon 0 . p>
Merci @bazingaa pour avoir remarqué l'erreur. (Merci d'avoir suggéré .append () code> aussi.) P> output_list = [temp for temp in temperatures if not 0 <= temperature <= 5]
si 0 <= température <= 5: code> est faux. La version correcte requise est si non 0 <= température <= 5: code>. Également sortie_list = sortie_list + [Température] code> peut simplement être remplacé par sortie_list.append (température) code>
Oh noo. Désolé pour ça. Je vais le changer afin qu'il retourne les bonnes valeurs.
Je ne pense pas que ce soit un bug point flottant. Il est lié à Une meilleure solution serait la suivante p> la plage code> étant un iérêteur. 4.3 code> est inclus dans la sortie car il n'est pas dans le démonteur. Le relevé vérifiant si une température est dans la plage de retournerait 3 code> si la plage était la plage (0, 6, 2) code>.
Outre le problème de la plage clarifié dans les réponses, vous pouvez simplement utiliser
sortie_list.append (température) code>