Python-实现温度的处理、图形

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))

 

posted @ 2023-07-18 12:45  小粉优化大师  阅读(107)  评论(0)    收藏  举报