1、实现温度的处理
1.1、需求
实现华氏温度和摄氏温度的转换。
℃ = 5 × (℉ - 32) / 9
℉ = 9 × ℃ / 5 + 32
完成以上转换后,增加与开氏温度的转换,K = ℃ + 273.15
1.2、代码
# 温度类,包含转换方法
class Temperature:
def __init__(self, t, unit='c'):
self._c = None
self._f = None
self._k = None
# 都要先转换到摄氏度,以后访问再计算其它单位的温度值
if unit == 'f':
self._f = t
self._c = self.f2c(t)
elif unit == 'k':
self._k = t
self._c = self.k2c(t)
else:
self._c = t
@property
def c(self):
return self._c
@property
def f(self): # 华氏温度
if self._f is None:
self._f = self.c2f(self._c)
return self._f
@property
def k(self): # 开氏温度
if self._k is None:
self._k = self.c2k(self._c)
return self._k
# 温度转换
@classmethod
def c2f(cls, c):
return 9 * c / 5 + 32
@classmethod
def f2c(cls, f):
return (f - 32) * 5 / 9
@classmethod
def c2k(cls, c):
return c + 273.15
@classmethod
def k2c(cls, k):
return k - 273.15
# 华氏温度和开氏温度如何转换?
@classmethod
def f2k(cls, f):
return cls.c2k(cls.f2c(f))
@classmethod
def k2f(cls, k):
return cls.c2f(cls.k2c(k))
print(Temperature.c2f(40))
print(Temperature.f2c(104))
print(Temperature.c2k(40))
print(Temperature.k2c(313.15))
print(Temperature.f2k(104))
print(Temperature.k2f(313.15))
print('-' * 30)
t = Temperature(104, 'f')
print(t.__dict__)
print(t.c, t.k, t.f)
print(t.__dict__)
2、图形
2.1、需求
1、有Shape基类,要求所有子类都必须提供面积的计算,子类有三角形、矩形、圆。
2、上题圆类的数据可序列化
三角形面积——海伦公式:

Shape基类,要求所有子类都必须提供面积的计算,子类有三角形、矩形、圆。
2.2、代码示例
import math
class Shape:
def __init__(self):
self._area = None
@property
def area(self):
raise NotImplementedError('基类未实现')
class Triangle(Shape):
def __init__(self, a, b, c):
super().__init__()
self.a = a
self.b = b
self.c = c
self._p = (self.a + self.b + self.c) / 2
@property
def area(self):
if self._area is None:
p = self._p
self._area = math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))
return self._area
class Rectangle(Shape):
def __init__(self, width, height):
super().__init__()
self.width = width
self.height = height
@property
def area(self):
if self._area is None:
self._area = self.width * self.height
return self._area
class Circle(Shape):
def __init__(self, radius):
super().__init__()
self.d = radius * 2
@property
def area(self):
if self._area is None:
self._area = 3.14 * self.d * self.d * 0.25
return self._area
shapes = [Triangle(3, 4, 5), Rectangle(3, 4), Circle(4)]
for s in shapes:
print('The area of {} = {}'.format(s.__class__.__name__, s.area))