Python 基础第四话:面向对象小练习

目录

写在最前:

一、完成一个学生类(Student)的设计

二、完成一个简单的 phone 类设计

三、设计一个公司类,完成以下要求,并实例化不同对象进行验证

四、设计类及其继承类小练习


写在最前:

初学时,不要说不会,不要说不理解,那说明你练习的还不够多、独立思考的还不够认真,给自己一个过程去面向对象然后让代码逐渐趋于完美。

一、完成一个学生类(Student)的设计

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
练习 01:完成一个学生类(Student)的设计:
    要求能查看总学生人数(student_totalnum),全部学生姓名(student_name),毕业分数标准1000(graduation_standrd),已经毕业学员数量(graduates_num)
    实现考试方法,成绩分数如果大于60分代表其通过考试,分数计入该学员总分
    如果该学员累计分数达到1000分,该学员即毕业
    实现查分方法,向该学员返回是否已经毕业,或者还差多少分数才能毕业
    实现查询所有已毕业学生数量的功能
    实现查询所有学生数量的功能
    实现查询所有学生姓名的功能
    实现查询所有毕业学生姓名及分数的功能
"""
class Student(object):
    # 定义学生总人数,初始值为 0
    student_totalnum = 0
    # 定义存储索引学生姓名的列表,初始为空
    student_list = []
    # 定义学生毕业分数标准为 1000 分
    graduation_standrd = 1000
    # 定义已经毕业学生数量,初始值为 0
    graduates_num = 0
    # 定义一个包含姓名、总分数的毕业学生字典,初始值为空
    graduates_dict = dict()

    def __init__(self, student_name, student_age, student_sex):
        # 绑定学生姓名属性必须强制填写
        self.student_name = student_name
        # 绑定学生年龄属性必须强制填写
        self.student_age = student_age
        # 编订学生性别属性必须强制填写
        self.student_sex = student_sex

        # 学生初始化分数为 0,为防止分数直接被修改,设为私有变量
        self.__student_score = 0
        # 当有学生注册时,学生总人数 +1
        Student.student_totalnum += 1
        # 当有学生注册是,把学生姓名存入学习学生列表
        Student.student_list.append(student_name)

    def examinagion(self, student_score):
        if self.__student_score >= Student.graduation_standrd:
            str01 = str(self.student_name) + ',首先恭喜你已经达到了毕业分数,非常抱歉,你已不能再参加考试,你已取得总分数为:' + str(self.__student_score)
            Student.graduates_dict.setdefault(self.student_name, self.__student_score)
            Student.graduates_num = len(Student.graduates_dict)
        elif 60 <= student_score <= 100:
            self.__student_score += student_score
            str01 = str(self.student_name) + ',考试成绩有效,已计入总分数,当前累计总分数为:' + str(self.__student_score)
        elif 0 <= student_score < 60:
            str01 = str(self.student_name) + ',考试成绩低于 60 分,考试无效,不能计入总分数,可参加补考,当前累计总分数为:' + str(self.__student_score)
        else:
            str01 = str(self.student_name) + ',考试成绩无效,分数异常,我们是百分制哦。'
        return str01

    def query_score(self):
        if self.__student_score >= Student.graduation_standrd:
            str02 = str(self.student_name) + ',恭喜你已经毕业,总分数为:' + str(self.__student_score)
        else:
            disparity_score = Student.graduation_standrd - self.__student_score
            str02 = str(self.student_name) + ',你当前的总分数为:' + str(self.__student_score) +',还需 ' + str(disparity_score) + ' 分就能成功毕业了。'
        return str02

    @classmethod
    def query_graduates_num(cls):
        cls.graduates_num = len(cls.graduates_dict)
        str03 = '当前所有毕业学生的数量为:' + str(cls.graduates_num)
        return str03

    @classmethod
    def query_student_totalnum(cls):
        str04 = '当前所有学生数量为:' + str(cls.student_totalnum) + ',其中已毕业学生数量为:' + str(cls.graduates_num)
        return str04

    @classmethod
    def query_student_list(cls):
        return cls.student_list

    @classmethod
    def query_graduates_dict(cls):
        return cls.graduates_dict

    @staticmethod
    def welcom_student():
        str05 = 'Welcome to Beijing!'
        return str05

二、完成一个简单的 phone 类设计

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
练习 02:创建一个名为 phone 的类
    1)类实例成员变量有 screen_size、price、brand
    2)给成员变量创建访问及设置方法
    3)定义 play 方法,功能为打印:play game
    4)定义 sendMessage 方法,功能为打印:text message
    5)定义 powerOff 方法,功能为打印:power off
    6)创建 get_info 方法,打印对象的相关信息
    7)实例化类 phone(),对象名为 phone1,屏幕尺寸为 5.5,价格为 6288,品牌为 apple
    8)调用 3,4,5,6 方法,查看解决
    9)实例化类 phone(),对象名为 phone2,屏幕尺寸为 5,价格为 1999,品牌为 xiaomi
    10)调用 3,4,5,6 方法,查看结果
"""
class Phone(object):

    def __init__(self, screen_size, price, brand):
        self.__screen_size = screen_size
        self.__price = price
        self.__brand = brand

    def play(self):
        str01 = str(self.__brand) + ' play game'
        return str01

    def sendMssage(self, message):
        str02 = str(self.__brand) + ' >>> ' + str(message)
        return str02

    def powerOff(self, power_off):
        if str(power_off) == 'off':
            str03 = str(self.__brand) + ' 正在关闭电源.....'
        else:
            str03 = str(self.__brand) + ' 指令错误,无法关闭电源.....'
        return str03

    def getINFO(self):
        str04 = '屏幕尺寸为:' + str(self.__screen_size) + ';价格为:' + str(self.__price) + ':品牌位:' + str(self.__brand)
        return str04

三、设计一个公司类,完成以下要求,并实例化不同对象进行验证

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
练习 03:设计一个公司类,完成以下要求,并实例化不同对象进行验证
    类变量
        - 类下公司的总个数,类下实例的名称列表
    类方法
        - 返回公司类共有多少个公司实例
        - 返回公司类的公司实例有名称列表
    实例变量
        - 公司名,简介,利润,销售额,总成本,雇员姓名,雇员列表
    实例方法:
        - 招聘人才(每招一个人会有成本产生,影响该实例雇员列表,人数,总成本)
        - 解雇人员(每解雇一个人会有成本产生,影响该实例雇员列表,人数 ,总成本)
        - 公司广告推广(影响该实例总成本)
        - 交社保(按公司雇员总人数计算,影响该实例总成本)
        - 交税(按公司雇员总人数计算,影响该实例总成本)
        - 销售(按销售件数*价格计算销售额,利润按销售额*利润率进行计算利润。)
        - 获取公司雇员列表
        - 获取公司净利润
"""
class Company(object):

    # 公司总个数
    company_total = 0
    # 公司名称列表
    company_list = []

    def __init__(self, company_name, company_profile, company_cost):

        # 公司名称
        self.__company_name = company_name
        # 公司简介
        self.__company_profile = company_profile
        # 公司利润
        self.__company_profits = 0
        # 公司销售额
        self.__company_sales = 0
        # 公司总成本,初始值为注册资金
        self.__company_cost = company_cost
        # 雇员字典(雇员姓名 => 成本)
        self.__employee_dict = dict()

        # 有新公司注册,公司总个数 +1
        Company.company_total += 1
        # 有新公司注册,记录公司名称
        Company.company_list.append(company_name)

    # 招聘人才
    def recruitTalented(self, employee_name, employee_salary):
        if employee_name in self.__employee_dict:
            str01 = '警告!请不要重复录入员工信息,' + str(employee_name) + ' 已经存在于公司人才信息库,如有重名,烦请添加一个别称予以区分。'
        else:
            self.__employee_dict.setdefault(employee_name, employee_salary)
            self.__company_cost += employee_salary
            employee_num = len(self.__employee_dict)
            str01 = '人才聘请成功,已成功录入公司人才信息库,当前公司总人数为:' + str(employee_num)
        return str01

    # 解雇人才
    def dismissTalented(self, dismiss_name):
        if dismiss_name in self.__employee_dict:
            dismiss_salary = self.__employee_dict.pop(dismiss_name)
            self.__company_cost -= dismiss_salary
            employee_num = len(self.__employee_dict)
            str02 ='人才解雇成功,' + str(dismiss_name) + ' 已经成功移除公司人才信息库,当前公司总人数为:' + str(employee_num)
        else:
            str02 = '警告!信息有误,请确认需要解雇员工的个人信息。'
        return str02

    # 公司广告推广
    def advertsing(self, ad_costs):
        self.__company_cost += ad_costs
        str03 = '公司广告推广,当前公司总成本为:' + str(self.__company_cost)
        return str03

    # 交社保
    def paymentSocialSecurity(self):
        socia_security_base = 0
        for _, employee_salary in self.__employee_dict.items():
            socia_security_base += (employee_salary * 0.2)
        self.__company_cost += socia_security_base
        str04 = '当前公司社保缴纳基数为:' + str(socia_security_base) + ',目前公司总成本为:' + str(self.__company_cost)
        return str04

    # 交税
    def payTaxes(self):
        pay_tax_base = 0
        for _, employee_salary in self.__employee_dict.items():
            pay_tax_base += (employee_salary * 0.12)
        self.__company_cost += pay_tax_base
        str05 = '当前公司交税基数为:' + str(pay_tax_base) + ',目前公司总成本为:' + str(self.__company_cost)
        return str05

    # 销售(按销售件数*价格计算销售额,利润按销售额*利润率进行计算利润)
    def companySales(self, sales_count, selling_price, profit_margin):
        if 0 <= profit_margin <= 1:
            self.__company_sales += (sales_count * selling_price)
            self.__company_profits += (sales_count * selling_price * profit_margin)
            str06 = '公司销售额为:' + str(self.__company_sales) + ',公司利润为:' + str(self.__company_profits)
        else:
            str06 = '利润率有误,请重新核对销售数据。'
        return str06

    # 获取公司雇员列表
    def employeeList(self):
        return list(self.__employee_dict.keys())

    # 获取公司净利润
    def companyReported(self):
        company_reported = (self.__company_profits - self.__company_cost)
        str07 = '目前公司净利润为:' + str(company_reported)
        return str07

    # 获取所有公司个数及公司名称
    @classmethod
    def companyInfo(cls):
        str08 = '目前公司数量为:' + str(cls.company_total) + ' 个,分别为:' + str(cls.company_list)
        return str08

四、设计类及其继承类小练习

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
练习 04:设计一个叫cinema的电影院的类,包含:
    类方法:
        初始化方法,并初始相应的类变量实例变量
        getSales(获取全部电影院实际销售的方法)的电影院
    实例方法:
        saleTickets方法,要求更新实例的销售总额及类的销售总额
    类变量:
        类下所有实例电影院的数量,销售额总和
    实例变量:
        电影院名称,位置,销售额
    创建一个miniCinema迷你电影院的类,继承自cinema类
        重写卖票方法,大于100元的票价加入打9折扣的功能。
        对miniCinema实例进行调用体现多态性
"""

class Cinema(object):

    cinema_totalnum = 0
    cinema_salessum = 0

    def __init__(self, cinema_name, cinema_address):

        self.cinema_name = cinema_name
        self.cinema_address = cinema_address
        self.cinema_sales = 0

        Cinema.cinema_totalnum += 1

    def saleTickets(self, sales):
        self.cinema_sales += sales
        Cinema.cinema_salessum += sales
        str01 = "%s 当前销售总额为:%6.1f,所以影院当前销售总额为:%6.1f。" %(self.cinema_name, self.cinema_sales, Cinema.cinema_salessum)
        return str01

    @classmethod
    def getSales(cls):
        str02 = "全部电影院(%d)实际销售额为:%6.1f。" %(cls.cinema_totalnum, cls.cinema_salessum)
        return str02

class MiniCinema(Cinema):

    def saleTickets(self, sales):
        if sales > 100:
            self.cinema_sales += (sales * 0.9)
            Cinema.cinema_salessum += (sales * 0.9)
        else:
            self.cinema_sales += sales
            Cinema.cinema_salessum += sales
        str03 = "%s 当前销售总额为:%6.1f,所有影院当前销售总额为:%6.1f。" %(self.cinema_name, self.cinema_sales, Cinema.cinema_salessum)
        return str03

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值