简单的Python IF语句似乎不起作用

2024-09-29 02:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,我正在编写一个简单的脚本来使用Firebase,但我被一个简单的if语句卡住了,它似乎没有按预期工作:

## 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语句按预期工作,后两个不按预期工作。。如果湿度<;但是,什么也没发生

我使用的值是两倍,比如70.50

编辑

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

尝试使用float,但似乎仍不起作用!不会进入最小ifs


Tags: ifputminmaxprinttemperatureinsidefirebase
1条回答
网友
1楼 · 发布于 2024-09-29 02:15:05

您正在将字符串与浮点数进行比较

minTemperaturemaxTemperatureminHumiditymaxHumidity都是float对象,因为您转换了它们。但是temperaturehumidity字符串,因为否则Python在尝试将它们与其他字符串连接时会引发异常

通过在测试中转换floatfloat进行比较:

if float(humidity) > maxHumidity:

或者将humiditytemperature转换为浮点数,并在插入Firebase时将它们转换回字符串

在Python2中,不同类型的对象总是一致地排序,数字排在其他类型之前。这意味着<>比较根据两个操作数的排序顺序是真是假,并且由于Python 2中的数字是先排序的,因此与另一种类型的任何比较都是以被认为小于的数字进行的:

>>> 3.14 < "1.1"
True

Python3不再试图使一切都有序化;将浮点值与字符串进行比较会产生TypeError异常

相关问题 更多 >