【问题标题】:Python : While True or FalsePython:当真或假
【发布时间】:2014-10-18 12:09:40
【问题描述】:

我不是经验丰富的程序员,我的代码有问题,我认为这是我的逻辑错误,但我在 http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/whilestatements.html 找不到答案。 我想要的是检查串行设备是否被锁定,并且“它被锁定”和“它没有被锁定”的条件之间的区别在于包含GPGGA字母的行中有4个逗号,,,, .所以如果没有,,,,,我希望我的代码开始,但我想我的循环是错误的。任何建议将不胜感激。提前致谢。

import serial
import time
import subprocess


file = open("/home/pi/allofthedatacollected.csv", "w") #"w" will be "a" later
file.write('\n')
while True:
    ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
    checking = ser.readline();
    if checking.find(",,,,"):
        print "not locked yet"
        True
    else:
        False    
        print "locked and loaded"

。 . .

【问题讨论】:

  • 您希望TrueFalse 在这里做什么?它们只是对一行中布尔值的引用,否则将在此处丢弃。
  • @MartijnPieters 我希望,如果 'False' ,它会退出 while 循环,脚本继续到我没有包含的另一个循环
  • 一行上的布尔值不这样做。您想使用break 退出循环。
  • @MartijnPieters 那么,如果条件为“假”,这意味着读取的行中没有“,,,,”,我该如何破解

标签: python while-loop boolean boolean-logic


【解决方案1】:

您可以使用变量作为while 循环的条件,而不仅仅是while True。这样你就可以改变条件了。

所以不要有这个代码:

while True:
    ...
    if ...:
        True
    else:
        False    

...试试这个:

keepGoing = True
while keepGoing:
    ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
    checking = ser.readline();
    if checking.find(",,,,"):
        print "not locked yet"
        keepGoing = True
    else:
        keepGoing = False    
        print "locked and loaded"

编辑:

或者正如另一位回答者所建议的那样,您可以直接 break 退出循环 :)

【讨论】:

  • 感谢您的回答,我想不出将它们分配给变量 :)
  • @TolgaVarol:不过,使用break 更不容易出错,也更简单。
  • @MartijnPieters 你可能是对的,你的解决方案更简单,再次感谢你,但我问的问题是对还是错,所以如果有人看这篇文章,如果他们的问题只是真假条件他的答案对他们来说会更好。
  • @TolgaVarol:我不同意这一点;解决您要解决的问题的正确方法是使用break。我试图回答为什么你的代码不起作用以及如何正确地做到这一点;两者都很重要。
  • 这个答案对我有用,因为我有一个内部 for 循环,因此将一个变量分配给外部 while 语句使我能够在 for 循环成功时退出这两个循环。
【解决方案2】:

使用break 退出循环:

while True:
    ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
    checking = ser.readline();
    if checking.find(",,,,"):
        print "not locked yet"
    else:
        print "locked and loaded"
        break

TrueFalse 行在您的代码中没有做任何事情;他们只是引用了内置的布尔值,而没有在任何地方分配它们。

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 2015-12-05
    • 2014-09-07
    • 2019-01-30
    • 1970-01-01
    • 2011-07-04
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多