2016-05-21 3 views
1

Я новичок в Python и я пишу простой скрипт для работы с Firebase но я укомплектованный на простой, если заявление, которое, кажется, не работает, как ожидалось:простой питон, если оператор не работает

## check for max values 
if humidity > maxHumidity: 
    firebase.put("/Controls/Sensors", "/Humidity/max_inside", ""+humidity+"%") 
    print("Updating Humidity max_inside") 

if temperature > maxTemperature: 
    firebase.put("/Controls/Sensors", "/Temperature/max_inside", ""+temperature+"C") 
    print("Updating Temperature max_inside") 

## check for min values 
if humidity < minHumidity: 
    firebase.put("/Controls/Sensors", "/Humidity/min_inside", ""+humidity+"%") 
    print("Updating Humidity min_inside") 

if temperature < minTemperature: 
    firebase.put("/Controls/Sensors", "/Temperature/min_inside", ""+temperature+"C") 
    print("Updating Temperature min_inside") 

Проблема в том, что первые два оператора if работают как ожидалось, последние два нет. Если влажность < minHumidity, ничего не происходит. Значение, которое я использую двойные как 70.50 ..

Редактировать

##retrive max & min humidity (remove the %) 
maxHumidity = firebase.get("/Controls/Sensors/Humidity/max_inside", None) 
maxHumidity = maxHumidity[:-1] 
maxHumidity = float(maxHumidity) 

minHumidity = firebase.get("/Controls/Sensors/Humidity/min_inside", None) 
minHumidity = minHumidity[:-1] 
minHumidity = float(minHumidity) 

#retrieve max & min temperature (remove the C) 
maxTemperature = firebase.get("/Controls/Sensors/Temperature/max_inside", None) 
maxTemperature = maxTemperature[:-1] 
maxTemperature = float(maxTemperature) 

minTemperature = firebase.get("/Controls/Sensors/Temperature/min_inside", None) 
minTemperature = minTemperature[:-1] 
minTemperature = float(minTemperature) 

#add current value 
humidity, temperature = readDHT22() 
firebase.put("/Controls/Sensors", "/Humidity/current_inside", ""+humidity+"%") 
firebase.put("/Controls/Sensors", "/Temperature/current_inside", ""+temperature+"C") 

##check for max values 
if humidity > maxHumidity: 
    firebase.put("/Controls/Sensors", "/Humidity/max_inside", ""+humidity+"%") 
    print("Updating Humidity max_inside") 
if temperature > maxTemperature: 
    firebase.put("/Controls/Sensors", "/Temperature/max_inside", ""+temperature+"C") 
    print("Updating Temperature max_inside") 

## cehck for min values 
if humidity < minHumidity: 
    firebase.put("/Controls/Sensors", "/Humidity/min_inside", ""+humidity+"%") 
    print("Updating Humidity min_inside") 
if temperature < minTemperature: 
    firebase.put("/Controls/Sensors", "/Temperature/min_inside", ""+temperature+"C") 
    print("Updating Temperature min_inside") 

Пытались использовать поплавок, но, кажется, до сих пор не работает! Не идет в мин, если.

+1

где вы назначаете переменные? – patrick

+1

Убедитесь, что как влажность, так и minHumidity имеют тип с плавающей точкой. Вы можете проверить его с типом (влажностью) и типом (minHumidity). – Jacobian

+1

Похоже, что ваша 'влажность' и' температура' являются строками, а не плавают. –

ответ

1

Вы сравниваете строки с числами с плавающей запятой.

minTemperature, maxTemperature, minHumidity и maxHumidity все float объекты, потому что вы превратили их. Но temperature и humidity - строки, поскольку в противном случае Python выбрал бы исключение, когда вы попытались объединить их с другими строками.

Сравнить float к float путем преобразования либо в тесте:

if float(humidity) > maxHumidity: 

и т.д., или путем преобразования humidity и temperature на поплавки и преобразовывать их обратно в строки при вставке в Firebase.

В Python 2 различные типы объектов всегда сортируются последовательно, а числа встречаются перед другими типами. Это означает, что < и > сравнения являются истинными или ложными на основе порядка сортировки двух операндов, а так как числа в Python 2 сортируются первых, ни в какое сравнение с другим типом делается с числом считается меньше:

>>> 3.14 < "1.1" 
True 

Python 3 устраняет попытку сделать все заказным; сравнение float с строкой дает вместо этого исключение TypeError.

+0

Еще раз спасибо, все работает сейчас! – dvdciri

Смежные вопросы