我有一些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循环继续运行,好像其中一个是真的。
有什么想法吗?我一直盯着它,也许我没有直视。
欢呼声
答案 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。对于刚学习编程的人来说,这是一个非常普遍的问题。