Python中更少或相同的是相反的方式

时间:2015-11-26 11:52:09

标签: python

使用 str 进行输入时,小于或等于返回相反的值。我有以下代码来读取传感器,我想根据实际的传感器读数返回值1或2:

#!/usr/bin/python
import smbus
import time
import subprocess

DEVICE     = 0x23 # Default device I2C address

POWER_DOWN = 0x00 # No active state
POWER_ON   = 0x01 # Power on
RESET      = 0x07 # Reset data register value

CONTINUOUS_LOW_RES_MODE = 0x13
CONTINUOUS_HIGH_RES_MODE_1 = 0x10
CONTINUOUS_HIGH_RES_MODE_2 = 0x11
ONE_TIME_HIGH_RES_MODE_1 = 0x20
ONE_TIME_HIGH_RES_MODE_2 = 0x21
ONE_TIME_LOW_RES_MODE = 0x23

bus = smbus.SMBus(1)  # Rev 2 Pi uses 1

def convertToNumber(data):
  # Simple function to convert 2 bytes of data
  # into a decimal number
  return ((data[1] + (256 * data[0])) / 1.2)

def readLight(addr=DEVICE):
  data = bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_1)
  return convertToNumber(data)

result=str(readLight());
if result<=2:
       result=1
else:
       result=2
print result

str(readLight()返回值0.0,表示结果&lt; = 2并且应该打印1,但是它打印2.它通过使用数字而不是str(readLight()来正常工作。

这是正常的:

result=1;
    if result<=2:
           result=1
    else:
           result=2
    print result

3 个答案:

答案 0 :(得分:4)

您正在比较stringint

当你写:

result=str(readLight());
if result<=2:
       result=1
else:
       result=2
print result

result获取字符串值,而不是int。您应该使用result = int(readLight())代替。

答案 1 :(得分:2)

str(readLight()的类型是字符串,而不是数字类型。

因此,您要将"0.0"2进行比较。在Python 2.x中,它是合法的,但结果不是你所期望的,它们的类型名称是比较的:

>>> "0.0" < 2
False
>>> 0.0 < 2
True

在Python 3.x中,"0.0" < 2是非法的。

答案 2 :(得分:0)

您将数字作为字符串进行比较,与将它们作为整数进行比较是不一样的。 &lt; &GT; ==运营商不会像你期望的那样工作。

您应首先将字符串转换为整数然后进行比较。您可以使用int()函数来执行此操作。或者只是删除str()调用。

您可以查看此问题:String comparison