提款机,扑克,三角形面积

#  任何时候,子类都可以换掉父类对象,李氏原则
# Python 没有从语言层面支持抽象类的概念
# 我们可以通过adc模块来制造抽象类的效果
# 在定义类的时候通过指定metaclass=ABCMeta可以将声明为抽象类
# 抽象类是不能创建对象的 抽象类存在的意义是专门拿给其他类继承
# abc模块中还有一个包装器abstradctmethod
# 通过这个包装器可以将方法包装器为抽象方法 必须要求子类进行重写

from abc import ABCMeta,abstractmethod    ## 检查有没把抽象方法写出代码 ,没写就会报错不能执行

class Employee(object ,metaclass=ABCMeta):
    '''员工'''

    def __init__(self,name):
         # 初始化
        self._name = name

    @property
    def name(self):
        return self._name

    @abstractmethod
    def get_salary(self):   # 得到工资
       # 获得月薪
        pass

class Manager(Employee):

    def get_salary(self):
        return 15000.0

class Programmer(Employee):

    def __init__(self,name, working_hour=0):
        super().__init__(name)
        self._working_hour = working_hour

    @property
    def working_hour(self):
        return self._working_hour

    @working_hour.setter
    def working_(self,working_hour):
        self._working_hour = working_hour\
            if working_hour > 0 else 0

    def get_salary(self):
        return 150.0 * self._working_hour

class Salesman(Employee):

    def __init__(self,name,sales=0):
        super().__init__(name)
        self.__sales = sales

    @property
    def sale(self):
        return  self.__sales

    @sale.setter
    def sales(self,sales):
        self._sales = sales if sales > 0 else 0


    def get_salary(self):
        return  1200.0 + self._sales * 0.05

##结算月薪
def main():
    emps =[
        Manager('刘备'),Programmer('诸葛亮'),
        Manager('曹操'),Salesman('苟劲'),
        Salesman('吕布') ,Programmer('张辽'),
        Programmer('赵云')
    ]
    for emp in emps:
        if isinstance(emp,Programmer):   #判断是不是这个类型,判断类型

            emp.working_hour = int(input('请输入%s本月工作时间:'% emp.name))
        elif isinstance(emp,Salesman):   #识别对象类型
            emp.sales = float(input('请输入%s本月销售额:'% emp.name))

       # 同样的接收get_salaey 这个消息 但是不同的员工表现出了不同的行为
       # 因为三个子类都重写了get_salary 方法 所以这个方法会表现出多态行为

        print('%s本月工资:¥%.2f元'% (emp.name,emp.get_salary()))


if __name__ == '__main__':
    main()

提款机

# 银行取款机


class Bank(object):

    def __init__(self,*,card_no,owner,balance=0):  # 账号  余额 存款 转账
        self._card_no = card_no
        self._balance = balance
        self._owner = owner

    @property
    def banlance(self):
        return  self._balance


    def deposit(self,money):            # 存钱
        if money > 0 :
            self._balance += money
            return  True
        return  False

    def withdraw(self,money):
        if 0 < money <= self._balance:
            self._balance -= money
            return  True
        return False

    def transfer(self,other,money):
        if  self .withdraw(money):
            other.deposit(money)
            return  True
        return  False


def main():
    account = Account('11123344','王大锤')
    print(account.balance)
    account.deposit(2000)
    account.withdraw(500)
    print(account.balance)
    if account.withdraw(5000):
        print(account.balance)
    else:
        print('余额不足')

    account2 = Account(card_no='22334455',owner ='李大嘴',balance =120)
    if account.transfer(account2,800):
        print(account.balance)
        print(account2.balance)
    else :
         print('余额不足')


if __name__ == '__main__':
    main()

随机扑克

## 扑克
# Spade .Heart .Club. Diamond
# 洗牌 随机打乱

# home :提前把pygame 建好    21点游戏写出来  写一个类,要计算加减乘除
from random import  randrange

class Card(object):
    """一张牌"""
    def __init__(self,suite,face):
        self._suite =suite
        self._face = face

    @property
    def face(self):
        return self._face    ## 花色

    @property
    def suite(self):
        return  self._suite    ##点数


    def __str__(self):

        if self._face == 1:
            face_str = 'A'
        elif self._face == 11:
            face_str = 'J'
        elif self._face == 12:
            face_str = 'Q'
        elif self._face == 13:
            face_str = 'K'
        else:
            face_str = str(self._face)
        return '%s%s' %(self._suite,face_str)

class Poker(object):
    """一副牌"""
    def __init__(self):
        self._cards = []
        for suit in '♠♥♦♣':
            for face in range(1,14):
                card = Card(suit, face)
                self._cards.append(card)
    @property
    def cards(self):
        return  self._cards

    def shuffle(self):
        """洗牌"""
        self._current = 0
        cards_len = len(self._cards)
        for index in range(cards_len):  # 前闭区间,后开区间   #  randrange  和range 区别 查一下
            pos = randrange(cards_len)
            self._cards[index],self._cards[pos] = \
                self._cards[pos],self._cards[index]

    @property
    def next(self):   #  发牌
        card = self._cards[self._current]
        self._current += 1
        return card

    @property             #  包装成属性
    def has_next(self):
        """还有没牌发,返回True代表还有牌可发"""
        return  self._current < len(self._cards)  # 看看还有没有牌可以发


class Player(object):
    """初始化玩家"""
    def __init__(self,name):
        self._name = name
        self._cards_on_hand  = []

    @property
    def name(self):
        return self._name



    @property
    def cards_on_hand(self):
        return self._cards_on_hand

    def get(self,card):
        """摸牌"""
        self._cards_on_hand.append(card)

    def arrange(self):
        """排序"""
        self._cards_on_hand.sort(key= get_face)

def get_face(card):
    return  card.face         #  通过这个函数可以拿到每个牌点数,传到上面


def main():
    p = Poker()
    p.shuffle()
    players = [Player('东邪'),Player('西毒'),Player('南帝'),Player('北丐')]
    for _ in range(13):
        for player in players:
            player.get(p.next)
    for player in players:
        print(player.name + ':',end = ' ')
        player.arrange()
        for card in player.cards_on_hand:
            print(card,end=' ')
        print()


if __name__ == '__main__':
    main()

用面向对象写 给出三条边,算面积、周长

from math  import  sqrt
class Triangle(object):

    def __init__(self,a,b,c):
        self._a = a
        self._b =b
        self._c = c

    # @classmethod
    @staticmethod    # 发给类的对象,静态方法
    def is_valid(a,b,c):   # 这个方法没有对象,不是发个对象的消息,发上面的类的
       # print(cls)
       # print(type(cls))
        return a + b > c and b+ c > a and a + c > b

    @property
    def perimeter(self):
        return self._a + self._b + self._c

    @property
    def  area(self):
        half = self.perimeter / 2
        return  sqrt(half*(half  - self._a)*
                     (half - self._b)*(half - self._c))

def main():
    a =b =c =1
    if Triangle.is_valid(a,b,c):
        t = Triangle(a,b,c)
        print(t.perimeter)   # print(Triangle.perimeter(t)
        print(t.area)        # print(Triangle.are(t))
       # 上面两种写法一样的效果
    else:
        print('无法构成三角形')

if __name__ == '__main__':

    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值