0
votes

Pas dans la plage si la déclaration Impression de points flottants

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)


1 commentaires

Outre le problème de la plage clarifié dans les réponses, vous pouvez simplement utiliser sortie_list.append (température)


3 Réponses :


5
votes

Température non dans la plage (0,6) signifie que la température n'est pas l'une des valeurs dans la plage (0,6) , qui est 0, 1, 2, 3, 4, et 5.

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: xxx


BTW, pour comprendre plus clairement ce que fait, essayez ceci: xxx < / pré>


0 commentaires

5
votes

La plage () code> La fonction Sure uniquement des numéros avec des étapes de 1 par défaut.

Par exemple, 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>

Pour votre question, une meilleure solution remplacerait le si la température ne figure pas dans la plage (0,6): code> dans dans sinon 0 . p>

Voici votre code complet corrigé:
Merci @bazingaa pour avoir remarqué l'erreur. (Merci d'avoir suggéré .append () code> aussi.) P> xxx pré>

notez une compréhension de liste plus simple ici: p>

output_list = [temp for temp in temperatures if not 0 <= temperature <= 5]


2 commentaires

si 0 <= température <= 5: est faux. La version correcte requise est si non 0 <= température <= 5: . Également sortie_list = sortie_list + [Température] peut simplement être remplacé par sortie_list.append (température)


Oh noo. Désolé pour ça. Je vais le changer afin qu'il retourne les bonnes valeurs.



1
votes

Je ne pense pas que ce soit un bug point flottant. Il est lié à la plage étant un iérêteur. 4.3 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 si la plage était la plage (0, 6, 2) .

Une meilleure solution serait la suivante xxx


0 commentaires