为何Python中Line类的x2,y2未定义而x1,y1已定义?
问题解答
错误原因
你写的distance方法里的for循环语法完全不符合Python规范:
for x1,y1 in self.coor1, x2,y2 in self.coor2:
这种写法是非法的,Python不会将x2,y2 in self.coor2当作循环的一部分执行,导致x2和y2从未被定义,自然会抛出未定义错误。另外,self.coor1本身是单个二元元组(比如(3,2)),用for循环迭代它会逐个取出元素(先取3时y1还会因拆包失败报错),当前场景完全没必要用循环。
修正方案
直接对两个坐标元组做拆包操作即可:
class Line(): def __init__(self, coor1, coor2): self.coor1 = coor1 self.coor2 = coor2 def distance(self): # 直接拆包两个坐标元组 x1, y1 = self.coor1 x2, y2 = self.coor2 # 计算欧几里得距离 return ((x2 - x1)**2 + (y2 - y1)**2)**0.5
调用部分保持不变:
coordinate1 = (3,2) coordinate2 = (8,10) li = Line(coordinate1, coordinate2) print(li.distance()) # 输出结果:9.433981132056603
额外说明
如果需要处理多组坐标对才需要用到循环,但当前每个Line实例只对应一对坐标,直接拆包是最简洁高效的写法。
内容的提问来源于stack exchange,提问作者Copacetic11
相关产品推荐
相关产品推荐

