我正在测量电压。电压被收集到日志文件中。电压开始大约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()
答案 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()
感谢您的帮助,您当然带领我朝着正确的方向前进!