2016-05-21 9 views
1

を動作していない場合:シンプルなPythonの文は、私は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") 

問題は、最初の2つのif文が期待どおりに動作していることです。最後の2つはありません。湿度が< minHumidityの場合、何も起こりません。私が使用している 値はfloatを使用しようとしましたが、まだ動作していないようで編集

##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") 

... 70.50のような二重のです! min ifsには入っていない。

+1

ここで変数を割り当てますか? – patrick

+1

湿度と湿度の両方がフロートタイプであることを確認してください。タイプ(湿度)とタイプ(minHumidity)で確認できます。 – Jacobian

+1

あなたの「湿度」と「温度」は浮きではなく文字列のようです。 –

答えて

1

文字列を浮動小数点数と比較しています。あなたがそれらを変換するため

minTemperaturemaxTemperatureminHumiditymaxHumidityはすべてfloatオブジェクトです。しかしtemperaturehumidityの文字列です。そうでないと、他の文字列との連結を試みたときにPythonが例外をスローしてしまうからです。

試験のいずれかで変換することによってfloatfloatに比較:

if float(humidity) > maxHumidity: 

等又は浮遊するhumiditytemperatureを変換しFirebaseに挿入する際に、文字列に戻ってそれらを変換することによって。

Python 2では、さまざまなタイプのオブジェクトが常に一貫してソートされ、数字は他のタイプよりも前にあります。これは、<>比較は、2つのオペランドの並べ替え順序に基づいて、trueまたはfalseであることを意味する、とPython 2の番号が最初にソートされるので、別のタイプの任意の比較が小さいと考え数を用いて行われる:

>>> 3.14 < "1.1" 
True 

Python 3はすべてを注文可能にしようとしていません。 floatと文字列を比較すると、代わりにTypeError例外が返されます。

+0

もう一度仲間に感謝、すべてが今働いています! – dvdciri

関連する問題