Python-在gcode修饰符的if语句中问题多个“或”条件

时间:2019-07-22 17:29:03

标签: python g-code

我正在编写一个脚本,为学校项目修改一些gcode。我的编程技能很差,但是我正在互联网的帮助下进行这项工作,但是坚持使用带有3个不同选项的if语句。

为此,我需要选择以“ G0”和“ G1”开头的行并遵守长度条件。

只有2个条件可以正常工作(它会创建一个输出文件,因此我可以确认)

我尝试仅在显示波纹管时添加第三个条件,但这会检索到一个空文件-因此,我假设它不起作用(据我研究,这似乎是正确的方法)。

if(cells[0] !="G0" or cells[0] != "G1" or len(cells) < 4):
    return

完整功能:

class Point:
x = 0
y = 0
feed = 0

def GetPoint(line):
    line = line.rstrip("\n")
    cells = line.split(" ")
    point = Point()


if(cells[0] != "G1" or len(cells) < 4):
    return

if(cells[1].startswith("F")):
    point.feed = float(cells[1].split("F")[1])
    point.x = float(cells[2].split("X")[1])
    point.y = float(cells[3].split("Y")[1])

else:
    point.x = float(cells[1].split("X")[1])
    point.y = float(cells[2].split("Y")[1])

return point

2 个答案:

答案 0 :(得分:4)

请注意,在第一个块中,您拥有cells[0] != "G0" or cells[0] != "G1"作为两个条件。如果cells[0]"G0",则第二个将取值为True。如果cells[0]"G1",则第一个将求值为True。如果还有其他情况,则两者都将得出True。这意味着无论cells[0]的值是什么,if的值都将为True

如果可以帮助您考虑一下,请为每个条件的真假编写一个真值表,并确定您希望if语句求值的内容。

答案 1 :(得分:1)

正如已经回答的那样,您有一个条件始终会评估为true。如果要提取除G0和G1命令(或长度条件)以外的所有命令,请尝试

if not (cells[0] == "G0" or cells[0] == "G1") or len(cells) < 4:

这样,您正在检查cell [0]是否包含G0或G1,然后将结果取反。这也可以写成

if cells[0] != "G0" and cells[0] != "G1" or len(cells) < 4:

根据De Morgan的定律,但它可能不那么直观。