2

我正在编写一个脚本来修改学校项目的一些 gcode。我的编程技能很差,但我在互联网的帮助下正在努力解决这个问题,但坚持使用 3 个不同选项的 if 语句。

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

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

我已经尝试添加如下所示的第 3 个条件,但这会检索一个空文件 - 所以我假设这不起作用(据我研究,这似乎是正确的方法)。

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
4

2 回答 2

4

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

如果它可以帮助您思考它,请为每个条件的真假写一个真值表,并决定您希望该if语句评估的内容。

于 2019-07-22T17:33:59.047 回答
1

正如已经回答的那样,您有一个条件将始终评估为真。如果您想提取除 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:

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

于 2019-07-22T17:40:36.083 回答