day15-面向对象作业

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

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

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

    class Dog:
        def __init__(self, dog_name, gender, breed):
            self.dog_name = dog_name
            self.gender = gender
            self.breed = breed
    
        @classmethod
        def shout(cls):
            return print('汪汪汪!')
    
    
    dog1 = Dog('小黑', '公', '哈士奇')
    print(dog1.dog_name, dog1.gender, dog1.breed)
    dog1.shout()
    
    
    class Person:
        def __init__(self, name, age, dog):
            self.name = name
            self.age = age
            self.dog = dog
    
        @classmethod
        def walkies(cls):
            return print('遛狗!')
    
    
    p1 = Person('张三', '21', dog1.dog_name)
    print(p1.dog)
    p1.walkies()
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

class Rectangle:
    def __init__(self, long, wide):
        self.long = long
        self.wide = wide

    def girth(self):
        return (self.long + self.wide) * 2

    def area(self):
        return self.long * self.wide


r1 = Rectangle(10, 5)
print(r1.long, r1.wide)
print(f'周长为:{r1.girth()}')
print(f'面积为:{r1.area()}')
  1. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def distance(self):
        return (self.x ** 2 + self.y ** 2) ** 0.5


p1 = Point(3, 4)
print(p1.x, p1.y)
print(f'{p1.distance():.2f}')
  1. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
class Circle:
    pi = 3.14

    def __init__(self, radius, x, y):
        self.radius = radius
        self.x = x
        self.y = y
        self.center = (self.x, self.y)  # 圆心

    def girth(self):
        return self.radius * 2 * Circle.pi

    def area(self):
        return self.radius ** 2 * Circle.pi

    @staticmethod
    def circumscribe(circle1, circle2):
        d_circle1 = circle1.center
        d_circle2 = circle2.center
        d = (d_circle1[0] - d_circle2[0]) ** 2 + (d_circle1[1] - d_circle2[1]) ** 2
        last_d = f'{d ** 0.5:.2f}'
        if last_d == f'{float(circle1.radius + circle2.radius):.2f}':
            return print('两圆外切')
        else:
            return print('两圆不外切')


c1 = Circle(10, 0, 3)
c2 = Circle(10, 0, 23)
print(f'{c1.girth():.2f}')
print(f'{c1.area():.2f}')
print(c1.center)
Circle.circumscribe(c1, c2)
  1. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
class Segment:
    def __init__(self, x1, y1, x2, y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.y2 = y2
        self.start = (x1, y1)   # 起点
        self.end = (x2, y2)     # 终点

    @staticmethod
    def length(segment):
        start = segment.start
        end = segment.end
        length = (start[0] - end[0]) ** 2 + (start[1] - end[1]) **2
        last_length = f'{length ** 0.5:.2f}'
        return last_length


s1 = Segment(0, 0, 3, 4)
print(s1.start)
print(s1.end)
print(f'线段长度为:{Segment.length(s1)}')
  1. 写一个斗地主游戏类(根据生活经验添加类的内容)
from random import shuffle


class PokerGame:
    def __init__(self):
        # 生成一副牌
        self.poker = []
        colors = ['♣', '♥', '♠', '♦']
        nums = list(range(2, 11)) + ['J', 'Q', 'K', 'A']
        for num in nums:
            for c in colors:
                self.poker.append(f'{c}{num}')
        self.poker.extend(['joker', 'JOKER'])
        # 洗牌
        shuffle(self.poker)

    def deal_poker(self):
        # 发牌
        player1 = []
        player2 = []
        player3 = []
        pokers = iter(self.poker)
        for _ in range(17):
            player1.append(next(pokers))
            player2.append(next(pokers))
            player3.append(next(pokers))
        table = {'J': 11, 'Q': 12, 'K': 13, 'A': 14, '2': 15, 'oker': 16, 'OKER': 17}
        table.update({str(x): x for x in range(3, 11)})

        player1.sort(key=lambda item: table[item[1:]], reverse=True)
        player2.sort(key=lambda item: table[item[1:]], reverse=True)
        player3.sort(key=lambda item: table[item[1:]], reverse=True)

        return player1, player2, player3, list(pokers)


user = PokerGame()
print(user.poker)
p1, p2, p3, last_poker = user.deal_poker()
print(p1)
print(p2)
print(p3)
print(last_poker)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值