python:如何使用正确的数据类型?

时间:2015-06-09 13:24:42

标签: python python-2.7

我想在python + matplotlib中同时绘制数百个2D三角形(带标签),所以我将这些三角形放在一个列表中:

三角形= [(label_1,A,B,C),(label_2,D,E,F),...]

这里(标签,A,B,C),A,B,C是三角形的三个顶点,因此它们就像(x,y)那样的实数对,而标签可能是一个字符串(三角形的颜色或名称

现在问题出现了:我如何告诉python A =(x,y)是平面中的一个点,而不仅仅是“两个元素的元组”? 由于我需要执行“A + 0.2 * B”操作,这会导致错误:“不能将序列乘以'int'类型的非int

提前致谢!

2 个答案:

答案 0 :(得分:4)

您可以创建自定义Point类,并定义添加和乘法的行为:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __mul__(self, value):
        return Point(self.x*value, self.y*value)
    def __rmul__(self, value):
        return self.__mul__(value)
    def __add__(self, other):
        return Point(self.x+other.x, self.y+other.y)
    def __repr__(self):
        return "Point({}, {})".format(self.x, self.y)

a = Point(1,2)
b = Point(23, 42)
x = a + 0.2 * b
print x
#result: Point(5.6, 10.4)

答案 1 :(得分:1)

为什么不使用python对复数的支持?您可以将复数视为平面中的点(Argand平面)。

演示复数乘法:

>>> (3+4j) + 0.2*(5+7j) #Use "j" instead of "i" in python
(4+5.4j)
顺便说一下,你的三角形看起来像是:

triangles = [
     ("label1", 3+4j, 5+6j, 7+8j),
     ("label2", 1+2j, 2+3j, 4+5j),
     #...
]