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:
根据德摩根定律,但它可能不那么直观。
我正在编写一个脚本来修改学校项目的一些 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:
根据德摩根定律,但它可能不那么直观。