triangle.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """
  2. 实例方法和类方法的应用
  3. Version: 0.1
  4. Author: 骆昊
  5. Date: 2018-03-12
  6. """
  7. from math import sqrt
  8. class Triangle(object):
  9. def __init__(self, a, b, c):
  10. self._a = a
  11. self._b = b
  12. self._c = c
  13. # 静态方法
  14. @staticmethod
  15. def is_valid(a, b, c):
  16. return a + b > c and b + c > a and c + a > b
  17. # 实例方法
  18. def perimeter(self):
  19. return self._a + self._b + self._c
  20. # 实例方法
  21. def area(self):
  22. p = self.perimeter() / 2
  23. return sqrt(p * (p - self._a) * (p - self._b) * (p - self._c))
  24. if __name__ == '__main__':
  25. # 用字符串的split方法将字符串拆分成一个列表
  26. # 再通过map函数对列表中的每个字符串进行映射处理成小数
  27. a, b, c = map(float, input('请输入三条边: ').split())
  28. # 先判断给定长度的三条边能否构成三角形
  29. # 如果能才创建三角形对象
  30. if Triangle.is_valid(a, b, c):
  31. tri = Triangle(a, b, c)
  32. print('周长:', tri.perimeter())
  33. print('面积:', tri.area())
  34. # 如果传入对象作为方法参数也可以通过类调用实例方法
  35. # print('周长:', Triangle.perimeter(tri))
  36. # print('面积:', Triangle.area(tri))
  37. # 看看下面的代码就知道其实二者本质上是一致的
  38. # print(type(tri.perimeter))
  39. # print(type(Triangle.perimeter))
  40. else:
  41. print('不能构成三角形.')