目录
写在最前:
初学时,不要说不会,不要说不理解,那说明你练习的还不够多、独立思考的还不够认真,给自己一个过程去面向对象然后让代码逐渐趋于完美。
一、完成一个学生类(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