簡體   English   中英

Python:為什么不執行if(a == 0):a = 1 if(a == 1):a = 0可進行切換

[英]Python: why doesn't if(a == 0): a = 1 if(a == 1): a = 0 work for making a toggle

我正在使用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'

如果以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()函數

from math import isclose

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM