【Python学习笔记:9】代码练习:类和对象

手机类 属性有 颜色 屏幕大小 价格 品牌 创建一个对象打印信息

创建一个手机类 属性有 颜色 屏幕大小 价格 品牌 创建一个对象打印信息

代码

# 创建一个手机类 属性有 颜色 屏幕大小 价格 品牌 创建一个对象打印信息

class Phone:
    def __init__(self, color, screen_size, price, brand):
        self.color = color
        self.screen_size = screen_size
        self.price = price
        self.brand = brand
        pass

    def __str__(self):
        return f'color: {self.color} screen size: {self.screen_size} price: {self.price} brand: {self.brand}'


my_phone = Phone('blue', '5.7', 4999, 'Xiaomi')
print(my_phone)

输出

在这里插入图片描述

记录学生信息/统计不及格学生以及打印其信息

  1. 封装 Student 类

    • 属性有 name、age、tel、score、sex
    • 方法有 getScore(打印 name score)、getStudent(打印个人全部信息)
  2. 使用 list 存储 10 个学生对象 迭代所有学生信息

  3. 打印不及格学生信息以及统计不及格学生数量

代码

# 学生信息

# 1 封装 Student 类
class Student:
    def __init__(self, name, age, tel, score, sex):
        self.name = name
        self.age = age
        self.tel = tel
        self.score = score
        self.sex = sex
        pass

    def getScore(self):
        return f'name: {self.name} score: {self.score}'

    def getStudent(self):
        return f'name: {self.name} age: {self.age} tel: {self.tel} score: {self.score} sex: {self.sex}'


girl = Student('张三', 20, '130', 98, '女')
print(girl.getScore())
print(girl.getStudent())


# 2 使用 list 存储 10 个学生对象 迭代所有学生信息
stds = []
idx = 0
cnt = 10
while idx < cnt:
    print(f'当前输入次数是:{idx + 1} 需要输入总次数是:{cnt}')
    name = input('name: ')
    age = int(input('age: '))
    tel = input('tel: ')
    score = int(input('score: '))
    sex = input('sex: ')
    stds.append(Student(name, age, tel, score, sex))
    idx += 1
    pass

print('学生列表信息如下:')
for std in stds:
    print(std.getStudent())


# 3 打印不及格学生信息以及统计不及格学生数量
fail_student = []
fail_cnt = 0
for std in stds:
    if std.score < 60:
        fail_student.append(std)
        fail_cnt += 1

print(f'不及格学生数量有:{fail_cnt}个,不及格学生信息如下:')
for fail_std in fail_student:
    print(fail_std.getStudent())

输出

在这里插入图片描述

父类 徒弟Prentice 子类 孙悟空/猪八戒/沙和尚

徒弟信息

孙悟空
属性 name、age、武器weapon、紧箍咒formula
方法 吃斋doMaigre、念佛buddha、取经doPilgrimage、战斗fight、降妖extDevil

猪八戒
属性 name、age、武器、媳妇wife
方法 念佛、取经、战斗、牵马holdHorse

沙和尚
属性 name、age、武器、流沙河sandRiver
方法 念佛、取经、战斗、挑行李pickUpLuge

代码

# 徒弟 Prentice 父类

class Prentice:
    def __init__(self, name, age, weapon):
        self.name = name
        self.age = age
        self.weapon = weapon
        pass

    def buddha(self):
        return '念佛'

    def doPilgrimage(self):
        return '取经'

    def fight(self):
        return '战斗'


class MonkeyKing(Prentice):
    def __init__(self, name, age, weapon, formula):
        self.formula = formula
        super().__init__(name, age, weapon)
        pass

    def getMonkeyKing(self):
        return f'name: {self.name} age: {self.age} weapon: {self.weapon} formula: {self.formula}'

    def doMaigre(self):
        return '吃斋'

    def extDevil(self):
        return '降妖'


mk = MonkeyKing('monkey_king', 500, 'golden_hoop', True)
print(mk.getMonkeyKing())
print(mk.doMaigre())
print(mk.buddha())
print(mk.doPilgrimage())
print(mk.fight())
print(mk.extDevil())

输出

在这里插入图片描述

情侣 男生想看电影 女生想学习 猜拳三局两胜 输出获胜方

代码

# 情侣 男生想看电影 女生想学习 猜拳三局两胜 输出获胜方
# 石头 > 剪刀 > 布 > 石头 > ...

import random

class Person:
    mora_choice = ['stone', 'scissors', 'cloth']

    def __init__(self, name, sex):
        self.name = name
        self.sex = sex
    pass

    def watchMoive(self):
        return '看电影'

    def learning(self):
        return '学习'

    def getMoraChoice(self):
        return random.choice(self.mora_choice)

    def mora(self, mora_choice1, mora_choice2):
        cnt = len(self.mora_choice)
        for i, tmp_choice in enumerate(self.mora_choice):
            if tmp_choice != mora_choice1:
                continue
            if i + 1 < cnt:
                return mora_choice2 == self.mora_choice[i + 1]
            else:
                return mora_choice2 == self.mora_choice[0]


boy = Person('Tom', '男')
girl = Person('Anna', '女')
win_cnt_girl = 0
win_cnt_boy = 0

while win_cnt_girl < 2 or win_cnt_boy < 2:
    choice_boy = boy.getMoraChoice()
    choice_girl = girl.getMoraChoice()
    win_flag = boy.mora(choice_boy, choice_girl)
    if win_flag:
        win_cnt_boy += 1
    else:
        win_cnt_girl += 1
    pass

if win_cnt_girl > win_cnt_boy:
    print(f'winner: {girl.name}')
    print(f'{girl.name}{boy.name}一起{girl.learning()}')
else:
    print(f'winner: {boy.name}')
    print(f'{girl.name}{boy.name}一起{boy.watchMoive()}')

输出

在这里插入图片描述

人体关键点描述

人:姓名、年龄、关键点
关键点:x、y

代码

# 人体关键点描述

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.landmarks = []
        pass


class Marks:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        pass


person = Person('Anna', 20)

# lm1 = [10, 20]
# lm2 = [20, 50]
# lm3 = [40, 80]
# person.landmarks.append(lm1)
# person.landmarks.append(lm2)
# person.landmarks.append(lm3)
#
# for idx, lm in person.landmarks:
#     print(idx, lm)

lm1 = Marks(10, 20)
lm2 = Marks(20, 50)
lm3 = Marks(40, 80)
person.landmarks.append(lm1)
person.landmarks.append(lm2)
person.landmarks.append(lm3)

for idx, lm in enumerate(person.landmarks):
    print(idx, lm.x, lm.y)

输出

在这里插入图片描述

人体关键点描述plus 增加眼部关键点 手部关键点

人:姓名、年龄、关键点、眼睛、手
关键点:x、y
眼睛:左右类型、关键点
手:左右类型、关键点
分别遍历:眼部、手部

代码

# 人体关键点描述plus 增加眼部关键点 手部关键点

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.landmarks = []
        self.eyes = []
        self.hands = []
        pass


class Eye:
    def __init__(self):
        # 默认是左眼
        self.type = 'left'
        self.landmarks = []
        pass


class Hand:
    def __init__(self):
        # 默认是左手
        self.type = 'left'
        self.landmarks = []
        pass


class Marks:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        pass


person = Person('Anna', 20)
left_eye = Eye()
right_eye = Eye()
right_eye.type = 'right'
left_hand = Hand()
right_hand = Hand()
right_hand.type = 'right'

lm1 = Marks(10, 20)
lm2 = Marks(20, 50)
lm3 = Marks(40, 80)
left_eye.landmarks.append(lm1)
left_eye.landmarks.append(lm2)
left_eye.landmarks.append(lm3)
left_hand.landmarks.append(lm1)
left_hand.landmarks.append(lm2)
left_hand.landmarks.append(lm3)

lm1 = Marks(10, 20)
lm2 = Marks(20, 50)
lm3 = Marks(40, 80)
right_eye.landmarks.append(lm1)
right_eye.landmarks.append(lm2)
right_eye.landmarks.append(lm3)
right_hand.landmarks.append(lm1)
right_hand.landmarks.append(lm2)
right_hand.landmarks.append(lm3)

person.eyes.append(left_eye)
person.eyes.append(right_eye)
person.hands.append(left_hand)
person.hands.append(right_hand)

for eye in person.eyes:
    for idx, lm in enumerate(eye.landmarks):
        print(f'eye_type: {eye.type} index: {idx} marks: {lm.x} {lm.y}')

print('-------------------------')
for hand in person.hands:
    for idx, lm in enumerate(hand.landmarks):
        print(f'hand_type: {hand.type} index: {idx} marks: {lm.x} {lm.y}')

输出

在这里插入图片描述

人体关键点描述plus++ 区分关键点在哪只手的哪个手指头

人:姓名、年龄、关键点、眼睛
关键点:x、y
眼睛:左右类型、关键点
手指:手指类型、关键点
手指类型:thumb、index、middle_finger、ring_finger、little_finger

输出

# 人体关键点描述plus++ 区分关键点在哪只手的哪个手指头

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.landmarks = []
        self.eyes = []
        self.hands = []
        pass


class Hand:
    def __init__(self):
        # 默认是左手
        self.type = 'left'
        self.landmarks = []
        self.fingers = []
        pass

class Finger:
    def __init__(self):
        # 默认是拇指
        self.type = 'thumb'
        self.landmarks = []
        pass


class Marks:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        pass


person = Person('Anna', 20)
thumb = Finger()
# index = Finger()
# index.type = 'index'
# middle_finger = Finger()
# middle_finger.type = 'middle_finger'
# ring_finger = Finger()
# ring_finger.type = 'ring_finger'
# little_finger = Finger()
# little_finger.type = 'little_finger'
left_hand = Hand()

lm1 = Marks(10, 20)
lm2 = Marks(20, 50)
thumb.landmarks.append(lm1)
thumb.landmarks.append(lm2)

left_hand.fingers.append(thumb)
person.hands.append(left_hand)

print('-------------------------')
for hand in person.hands:
    for finger in hand.fingers:
        for idx, lm in enumerate(finger.landmarks):
            print(f'finger_type: {finger.type} index: {idx} marks: {lm.x} {lm.y}')

输出

在这里插入图片描述

商城有很多店铺 店铺有很多商品

商城Mall:name、店铺
店铺Shop:name、商品
商品Goods:name、price、brand、商品位置
遍历:商城下面的店铺、店铺下的商品

代码

# 商城有很多店铺 店铺有很多商品

class Mall:
    def __init__(self, name):
        self.name = name
        self.shops = []
        pass


class Shop:
    def __init__(self, name):
        self.name = name
        self.goods = []
        pass


class Goods:
    def __init__(self, name, price, brand):
        self.name = name
        self.price = price
        self.brand = brand
        self.marks = []
        pass


class Marks:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        pass


# 商城
mail = Mall('center_mail')
# 店铺
phone_shop = Shop('phone_shop')
book_shop = Shop('book_shop')
# 商品
XM = Goods('XM', 2999, 'Xiaomi')
HW = Goods('HW', 1999, 'Huawei')
IT_book = Goods('IT_book', 100, '计算机丛书')
food_book = Goods('food_book', 80, '食谱丛书')
# 商品位置
goods_lm1 = Marks(10, 20)
goods_lm2 = Marks(20, 50)

# 位置定位商品
XM.marks.append(goods_lm1)
HW.marks.append(goods_lm2)
IT_book.marks.append(goods_lm1)
food_book.marks.append(goods_lm2)
# 商品放入店铺
phone_shop.goods.append(XM)
phone_shop.goods.append(HW)
book_shop.goods.append(IT_book)
book_shop.goods.append(food_book)
# 店铺放商城
mail.shops.append(phone_shop)
mail.shops.append(book_shop)

print(f'mail_name: {mail.name}')
print('----------------------')
for shop in mail.shops:
    print(f'shop_name: {shop.name}')
    for goods in shop.goods:
        for idx, lm in enumerate(goods.marks):
            print(f'goods_info: name: {goods.name} price: {goods.price} brand: {goods.brand} marks: {idx} {lm.x} {lm.y}')
    print('----------------------')

输出

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饭碗、碗碗香

感谢壮士的慷概解囊!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值