Python - gcode 修饰符的 if 语句中的多个 "or" 条件问题

Python - Problem multiple "or" conditions in a if statement for gcode modifier

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

我需要 select 以 "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

请注意,在第一个块中,您将 cells[0] != "G0" or cells[0] != "G1" 作为两个条件。如果 cells[0]"G0",则第二个将计算为 True。如果 cells[0]"G1",那么第一个将计算为 True。如果是其他任何东西,两者都将评估为 True。这意味着无论 cells[0] 的值是多少,if 的计算结果都将是 True.

如果对您的思考有帮助,请为每个条件的 truthness/falseness 写一个真值 table 并决定您希望 if 语句求值的结果。

如前所述,您有一个条件,该条件的计算结果始终为真。如果您想提取除 G0 和 G1 命令(或长度条件)以外的所有命令,请尝试此操作

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

这样您就可以检查单元格[0] 是否包含 G0 或 G1,然后反转结果。这也可以写成

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

根据德摩根定律,但它可能不那么直观。