无法确定退出条件的正确逻辑

时间:2014-07-14 22:10:37

标签: python

我正在测量电压。电压被收集到日志文件中。电压开始大约5伏特,爬升超过200伏特,然后降回150伏特以下。我的程序不应该将电压读数放入日志文件,直到电压高于150.然后在电压超过150,达到峰值250并且正在下降之后,程序应该在电压降低时执行sys.exit 150.问题是我的程序过早地进行sys.exit,因为电压首先爬升,当电压低于150时。我的程序如下所示。我希望通过在最后一行旁边缩进来避免这个问题,认为这不会允许这条线在电压已经超过150伏并且在150伏以下回落之后才能激活。有什么建议吗?

with open('logfile.txt', 'w') as f:

    while True:
        volts = adc.readADCDifferential01(1056, 8)
        if volts > 150:
            print >> f, time(), volts
            if volts < 150:
                sys.exit()

5 个答案:

答案 0 :(得分:0)

我认为这会奏效。

以open('logfile.txt','w')为f:

while volts>150:
      print >> f, time(), volts
      volts=voltfunction()
sys.exit()

答案 1 :(得分:0)

相当蹩脚,但做的工作是:

>>> voltages = [50, 100, 150, 200, 250, 200, 150, 100, 50]
>>> threshold_passed = False
>>> for v in voltages:
...     if v > 150:
...         print v
...         threshold_passed = True
...     if threshold_passed and v < 150:
...         print v
...         break
... 
170
200
250
200
170
100

答案 2 :(得分:0)

您只需使用状态变量来跟踪您是否已达到150伏特。像这样:

with open('logfile.txt', 'w') as f:
    reachedPeak = False
    while True:
        volts = adc.readADCDifferential01(1056, 8)
        if volts > 150:
            reachedPeak = True
            print >> f, time(), volts
        if volts < 150 and reachedPeak:
            sys.exit()

答案 3 :(得分:0)

以下内容应该有效。

with open('logfile.txt', 'w') as f:
    threshold_crossed = False
    while True:
        volts = adc.readADCDifferential01(1056, 8)
        if volts > 150:
            threshold_crossed = True
        if threshold_crossed:
            print >> f, time(), volts
            if volts < 150:
                sys.exit()

我不确定您发布的代码是如何工作的。 sys.exit声明由相互排斥的条件保护:

if volts > 150:
    ...
    if volts < 150
        sys.exit()

由于volts在两个if语句之间没有变化,如果它通过了第一个,那么它的值大于150.第二个if语句总是 False因为价值永远不会低于150。

答案 4 :(得分:0)

然而,这确实有效:

with open('logfile.txt, 'w') as f:
    threshold_crossed = False
    while True:
        volts = adc.readADCDifferential01(1056, 8)
        if volts > 150:
            print >> f, time(), volts
            if volts > 180:
                threshold_crossed = True
            if threshold_crossed and volts < 160:
                sys.exit()  

感谢您的帮助,您当然带领我朝着正确的方向前进!