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