我想用Python计算(任意数量)线段的长度。我使用了以下代码,但我遇到了元组不能作为操作数的减法。我怎么能克服这个?我想知道我是否错过了任何重要的Python概念。
def perfect_square?(x)
# Implementation
end
答案 0 :(得分:2)
如前所述,它必须是Point(*p)
Point(*args)
的整数。后者会将所有点元组传递给每个点的构造函数。不过,您还必须修复distance
。
def __init__(self, *args):
self.args=[Point(*p) for p in args]
def distance(p1, p2):
return math.sqrt((p1.x-p2.x)**2 + (p1.y-p2.y)**2)
然而,不是创建自己的Point
类,而是重要的Python概念"您可以使用内置complex
numbers,使distance
更加简单:
def __init__(self, *args):
self.args=[complex(*p) for p in args]
def distance(p1, p2):
return abs(p1 - p2)
答案 1 :(得分:0)
Python不支持元组的取幂(和其他数学运算)。虽然可以使用这样的代码:
FORM::open
它不是整个元组的矢量计算。它只是元组串联的语法糖。
此外,该片段似乎还有一些错别字/错误。
第print (1, 2) * 3 # produces (1, 2, 1, 2, 1, 2)
print (1, 2) + (1, 2) # produces (1, 2, 1, 2)
行应该是self.args=[Point(*args) for p in args]
班级self.args=[Point(*p) for p in args]
没有LineString
方法。
move()
计算应略微更改(请注意我已在公式中将distance()
替换为-
):
+
答案 2 :(得分:0)
数学模块为此目的提供了虚伪功能
math.hypot(x,y)
返回欧几里得范数sqrt(x x + y y)。这是向量从原点到点(x,y)的长度。
这是我的建议
return math.hypot(p1.x - p2.x, p1.y - p2.y)