Python:为什么不是(a == 0):a = 1 if(a == 1):a = 0用于进行切换

时间:2016-03-01 07:45:45

标签: python if-statement nested raspberry-pi logic

我正在使用python工作来读取树莓派上的数字输入。我想将其中一个按钮变成一个切换按钮,因为只要按下它就会在1和0之间切换一个值。一切都工作正常,除了部分:

if(a == 0.0):
    a = 1.0
if(a == 1.0):
    a = 0.0

似乎这应该与剩下的代码一起使用,只要按下按钮就会使值在1和0之间切换,但每次打印为0.0,是否有人知道这是为什么?

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_UP)
a = 0.0
b = 0.0
c = 0

while True:
    if(GPIO.input(4) ==1 and c ==0):
        print 'Button 1 Pressed'
        if(a == 0.0):
            a = 1.0
        if(a == 1.0):
            a = 0.0
        c = 1
        print a
    if(GPIO.input(4) !=1):
        c = 0
    if(GPIO.input(24) ==0):
        print 'Button 2 Pressed'

1 个答案:

答案 0 :(得分:6)

如果您从a = 0开始,两个 if语句都匹配,那么您最终会回到0

改用if .. elif;这是一个语句,只有一个分支可以匹配:

if a == 0.0:
    a = 1.0
elif a == 1.0:
    a = 0.0

但是,我不确定您使用这些值的是什么。浮点比较很棘手,因为使用浮点计算可能会导致非常细微的差异,它可能看起来像1.0但确实有0.9999999999999872545。这不等于1.0。也许你想用布尔代替?在这种情况下使用:

a = False

# toggle
a = not a

如果您确实需要使用浮点数,请测试您的值是否足够接近

if abs(a - 0.0) < 1e-9:
    a = 1.0
elif abs(a - 1.0) < 1e-9:
    a = 0.0

如果您使用的是Python 3.5或更高版本,则可以使用新的math.isclose() function

from math import isclose

if isclose(a, 0.0):
    a = 1.0
elif isclose(a, 1.0):
    a = 0.0