python陷入了循环

时间:2014-08-15 19:57:38

标签: python while-loop

我有一些python代码读取电机的端口,当端口从关闭(9)切换到打开(8)时,while循环应该退出。然而,我发现while循环似乎被卡住了,即使上述情况有所改变。

以下是代码和输出。

        self.send(param, iostatus,'move', 'e', '-1000')  # move mirror above home switch
        self.send(param, iostatus,'move', 'a',  '-1000')  # move mirror west of home switch

        sleep(4)

        print int(self.send(param, iostatus,'portread', 'e'))
        print int(self.send(param, iostatus,'portread', 'a'))

        while int(self.send(param, iostatus,'portread', 'e')) \
        or  int(self.send(param, iostatus,'portread', 'a'))  == 9:

            if int(self.send(param, iostatus,'portread', 'e')) == 8:
                self.send(param, iostatus,'stop', 'e') #stop motor moving
            if int(self.send(param, iostatus,'portread', 'a')) == 8:
                self.send(param, iostatus,'stop', 'a') #stop motor moving

            altt = int(self.send(param, iostatus,'portread', 'e'))
            azt= int(self.send(param, iostatus,'portread', 'a'))
            print 'altt', altt, 'of type', type(altt), altt==9
            print 'azt', azt, 'of type', type(azt), azt==9
            sleep(3)

终端输出:(注意我必须将输出分隔开来,所以它不会在这篇文章中出现问题)

在140815-13:03:03发送指令是aA

在140815-13:03:03发送指令是eA

在140815-13:03:03发送指令是eF1000 1

在140815-13:03:04发送指令是aF1000 1

在140815-13:03:06发送指令是e ^

等待回家

..........为清晰起见文字

在140815-13:03:21发送指令是e ^

在140815-13:03:21发送指令是^

在140815-13:03:21发送指令是eM-1000

在140815-13:03:21发送指令是aM-1000

在140815-13:03:25发送指令是eA 9 在140815-13:03:25发送指令是aA 9 在140815-13:03:25发送指令是eA

在140815-13:03:25发送指令是eA

在140815-13:03:25发送指令是aA

在140815-13:03:25发送指令是eA 在140815-13:03:25发送指令是aA

类型为True的altt 9

类型为True的azt 9

................为清晰起见文字

在140815-13:03:57发送指令是eA

在140815-13:03:57发送指令是eA

在140815-13:03:57发送指令是aA

在140815-13:03:58发送指令是eA

在140815-13:03:58发送指令是aA

类型为True的altt 9

类型为True的azt 9

在140815-13:04:01发送指令是eA

在140815-13:04:01发送指令是eA

在140815-13:04:01发送指令是e @

在140815-13:04:01发送指令是aA

在140815-13:04:01发送指令是@

在140815-13:04:01发送指令是eA

在140815-13:04:01发送指令是aA

类型为False的altt 8

类型为False的azt 8

在140815-13:04:04发送指令是eA

在140815-13:04:04发送指令是eA

在140815-13:04:04发送指令是e @

在140815-13:04:04发送指令是aA

在140815-13:04:04发送指令是@

在140815-13:04:04发送指令是eA

在140815-13:04:04发送指令是aA

类型为False的altt 8

类型为False的azt 8

在140815-13:04:07发送指令是eA

在140815-13:04:07发送指令是eA

在140815-13:04:07发送指令是e @

在140815-13:04:07发送指令是aA

在140815-13:04:07发送指令是@

在140815-13:04:07发送指令是eA

在140815-13:04:07发送指令是aA

类型为False的altt 8

类型为False的azt 8

.........并且循环将继续这样,即使这两个portchecks == 8并且是假的。

基本上发生的事情是我移动一些电机并等待其端口(家用开关)读取8(打开)。当它们打开时我停止电机并且环路应该退出。但是,循环卡在端口读取检查中。

您可以看到下方终端输出的底部

类型为False的altt 8 类型为False的azt 8

是我正在阅读的内容,他们都说错,但是while循环继续运行,好像其中一个是真的。

有什么想法吗?我一直盯着它,也许我没有直视。

欢呼声

1 个答案:

答案 0 :(得分:4)

你需要把它写成

while int(send...) == 9 or int(send...) == 9:

而不是:

while int(send...) or int(send...) == 9:

后者问道:

  

int(send...)是真的吗?这将是任何非虚假值(如任何非零int
  OR
  int(send...) == 9是否为真,这实际上是比较。

请参阅this thread for more discussion。对于刚学习编程的人来说,这是一个非常普遍的问题。