day17-面向对象作业

  1. 定义一个狗类和一个人类:

    狗拥有属性:姓名、性别和品种 拥有方法:叫唤

    class Dog:
        def __init__(self,name,gender,breed):
            self.name=name
            self.gender=gender
            self.breed=breed
        def call(self):
            return '叫唤'
    a=Dog('小黄','公','中华田园犬')
    print(f'这只小狗名叫{a.name},性别为{a.gender},品种是{a.breed},它会{a.call()}')
    
    这只小狗名叫小黄,性别为公,品种是中华田园犬,它会叫唤
    
    

    人类拥有属性:姓名、年龄、狗 拥有方法:遛狗

    class Person:
        def __init__(self,name,age,is_dog):
            self.name=name
            age1 = age
            self.age= age1
            self.is_dog=is_dog
        def walk_the_dog(self):
            return '遛狗'
    a=Person('小明','18','没有狗')
    print(f'这个人名叫{a.name},年龄为{a.age}{a.is_dog},他会{a.walk_the_dog()}')
    
    这个人名叫小明,年龄为18,没有狗,他会遛狗
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rectangle:
        def __init__(self,x=5,y=4):
            self.length=x
            self.wide=y
        def area(self):
            return self.length*self.wide
    a=Rectangle(6,7)
    print(a.area())
    
    42
    
  3. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Point:
    
        def __init__(self,x,y):
            self.x=x
            self.y=y
        def distance(self,b):
            return ((self.x-b.x)**2+(self.y-b.y)**2)**0.5
    
    a=Point(4,5)
    b=Point(1,1)
    print(b.x)
    print(f'两圆的距离是{a.distance(b)}')
    
    5.0
    
  4. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:
        pi=3.14
        def __init__(self,r,x0,y0):
            self.r=r
            self.x0=x0
            self.y0=y0
        def perimeter(self):
            return Circle.pi*2*self.r
        def area(self):
            return Circle.pi*self.r**2
        def is_touch(self,a):
            return ((self.x0 - a.x0) ** 2 + (self.y0 - a.y0) ** 2) ** 0.5 == a.r+ self.r
    
    c1=Circle(2,0,0)
    c2=Circle(3,3,4)
    print(f'圆1的周长为{c1.perimeter()},圆1的面积为{c1.area()}')
    print(f'圆2的周长为{c2.perimeter()},圆2的面积为{c2.area()}')
    print(f'是否外切:{(c2.is_touch(c1))}')1的周长为12.56,1的面积为12.562的周长为18.84,2的面积为28.26
     是否外切:True
    
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class lines:
    
        def __init__(self,x0=0,y0=0,x1=3,y1=4):
            self.x0=x0
            self.y0=y0
            self.x1 = x1
            self.y1 = y1
        def length(self):
            return ((self.x0-self.x1)**2+(self.y0-self.y1)**2)**0.5
    a=lines()
    print(a.length())
    
    5.0
    
  6. 写一个斗地主游戏类(根据生活经验添加类的内容)

    import random
    class ChinesePoker:
        list1 = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
        list2 = ['♦', '♣', '♥', '♠']
        list4 = []
        for i in list1:
            for j in list2:
                list4.append(j + i)
        list4.extend(['joker','JOKER'])   #生成有序的牌组
        def shuffle(self,list1):  # 洗牌
            random.shuffle(list1)  
            return ChinesePoker.list4
        def deal(self,list0):   # 发牌
            player1=[]
            player2 = []
            player3 = []
            i1=iter(list0)
            for i in range(17):
                player1.append(next(i1))
                player2.append(next(i1))
                player3.append(next(i1))
            a = random.randint(0, 2)
            # 随机给予某个玩家地主,发最后三张牌
            if a == 0:
                player1.extend(list(i1))
            elif a == 1:
                player2.extend(list(i1))
            elif a == 2:
                player3.extend(list(i1))
            return player1,player2,player3
        def richard_card(self,players):     #理牌
            list1={str(i): i   for i in range(3,11)}
            list1.update({'J':11,'Q':12,'K':13,'A':14,'2':15,'oker':16,'OKER':17})
            return  sorted(players[0], key=lambda x: list1[x[1:]]),sorted(players[1], 
            key=lambda x: list1[x[1:]]),sorted(players[2], key=lambda x: list1[x[1:]])
    
    a=ChinesePoker()  #本局斗地主对象
    list1=ChinesePoker.list4  #初始牌
    list0=a.shuffle(list1)   #洗牌
    players=(a.deal(list0))     #发牌
    print(a.richard_card(players)) #理牌
    
    
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值