利用面向对象程序设计的逻辑,解决下列问题:
某研究生从上海某211大学编程相关专业毕业后,在某头部互联网公司找到了一份年收入(税后)
30万元的工作。公司承诺每年薪金增长15%,到达60万每年后达到薪金天花板,每年薪金增长5%。
该学生刚毕业时在嘉定区看中了一套市价600万元的二手房,该二手房房价每年上涨10%。请问,
假设该学生的工资全部用来买房,需要多少年才能攒够首付(房价的30%)?若买得起房的当年该学生并未买房,10年后他还买得起这套房么?
具体要求如下:
程序仅包括两个class:PERSON和APARTEMNT
每个class都要有自定义的构造函数,且构造函数接受不定量的参数
除属于class的方法外,程序不能包含任何函数
每个人都有一个想要买的房子,即每一个PERSON的对象中包含一个APARTMENT的对象
程序稳定,尽可能的不报错
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@File : 第五周作业.py
@Author: BC
@Date : 2023-04-19 20:22
'''
class APARTEMNT:
def __init__(hahaha, house_price,
increment): # 类的所有实例方法都必须至少有一个名为hahaha的参数,并且必须是方法的第一个形参(如果有多个形参的话),hahaha参数代表将来要创建的对象本身。
'''
在类的实例方法中访问实例属性时需要以hahaha为前缀,但在外部通过对象名调用对象方法时并不需要传递这个参数,如果在外部通过类名调用对象方法则需要显式为hahaha参数传值。
:param house_price: 房子价格
:param increment: 上涨百分比
'''
hahaha.house_price = house_price
hahaha.increment = increment
class PERSON:
# 计算薪资增长
def salary_increase(hahaha):
if hahaha.job_salary < 600000: # 判断薪金是否达到天花板
hahaha.job_salary = hahaha.job_salary * (1 + hahaha.increment)
else:
hahaha.job_salary = hahaha.job_salary * (1 + 0.05)
# 构造函数接受参数 job_salary 工资,increment 薪资增长率,house_price 房价,housing_fund 首付
def __init__(hahaha, job_salary, increment, house_price, housing_fund=0):
hahaha.job_salary = job_salary
hahaha.increment = increment
hahaha.apartment = APARTEMNT(house_price, 0.1)
hahaha.housing_fund = housing_fund
# 首付
def purchase_house(hahaha):
downpayment = hahaha.apartment.house_price * 0.3
if downpayment <= hahaha.housing_fund: # 如果已经攒够了首付
return True
else:
return False
# 计算房价涨幅
def house_price_increase(hahaha):
hahaha.apartment.house_price = hahaha.apartment.house_price * (1 + hahaha.apartment.increment)
# 进行一年时间流逝后的薪资增长、房价涨幅以及首付攒够情况
def one_year_after(hahaha):
hahaha.salary_increase()
hahaha.house_price_increase()
if not hahaha.purchase_house():
hahaha.housing_fund += hahaha.job_salary # 把工资用于攒首付
# 创建一个年收入为30万元的研究生
student = PERSON(300000, 0.15, 6000000)
years = 1
while not student.purchase_house(): # 年份增加,逐年比较
student.one_year_after()
years += 1
print("攒够首付需要", years, "年")
# 判断10年后能否买房
for i in range(10):
student.one_year_after()
if student.purchase_house():
print("10年后能够买房")
else:
print("10年后无法买房")
'''
面向对象程序设计(Object Oriented Programming,OOP)有更好的可读性和可扩展性。
面向对象程序设计的一条基本原则是计算机程序由多个能够起到子程序作用的单元或对象组合而成
面向对象程序设计的一个关键性观念是将数据以及对数据的操作封装在一起,组成一个相互依存、不可分割的整体,即对象。
对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类,面向对象程序设计的关键就是如何合理地定义和组织这些类以及类之间的关系。
Python完全采用了面向对象程序设计的思想,封装、继承、多态以及对基类方法的覆盖或重写。
创建类时用变量形式表示的对象属性称为数据成员,用函数形式表示的对象行为称为成员方法,成员属性和成员方法统称为类的成员。
'''