问答题:
0.根据调用对象的不同,返回的结果也不同来体现
1.降低耦合度
2.可以
3.我曾经跨过山河人海
4降低耦合度
5.是的
1
0.类的继承
1.灵活
2.可以
3.不造
4.只要会嘎嘎叫的就是鸭子
5.不是
1
6
好难啊
1
在
1
查看
问答题:
0.接收不同的对象作为参数,并在不检查参数类型的情况下执行他的方法
1.可以适应不同的使用情况
2.可以
3.按图索骥
4.低耦合
5.属于
class Worker:
def __init__(self, name, job, garde, year, uid):
self.name = name
self.job = job
self.garde = garde
self.year = year
self.uid = uid
def get_uid(self):
return self.uid
def get_name(self):
return self.name
def get_job(self):
return self.job
def get_garde(self):
return self.garde
def get_year(self):
return self.year
def salary(self):
pass
class Employee(Worker):
def salary(self):
return 3000 + 500 * self.garde + 50 * self.year
class Teamleader(Worker):
def salary(self):
return 4000 + 800 * self.garde + 100 * self.year
class Manager(Worker):
def salary(self):
return 5000 + 1000 * (self.garde + self.year)
class Manage:
def __init__(self):
self.num = 10000
self.member = []
# 录入
def key_in(self):
name = input('姓名:')
while 1:
job = input('职位(E.普通员工;T.组长;M.经理):')
if job not in ('E', 'T', 'M'):
print('输入错误,请重新输入')
else:
break
while 1:
grade = int(input('等级:'))
if job == 'E' and grade > 10:
print('该职位最高级别为10级别,请重新录入')
elif job == 'T' and grade > 6:
print('该职位最高级别为6级别,请重新录入')
elif job == 'M' and grade > 3:
print('该职位最高级别为3级别,请重新录入')
else:
break
year = int(input('工龄:'))
number = self.num
self.num += 1
if job == 'E':
n = Employee(name, job, grade, year, number)
elif job == 'T':
n = Teamleader(name, job, grade, year, number)
elif job == 'M':
n = Manager(name, job, grade, year, number)
self.member.append()
print(f'录入成功!姓名:{name},工号:{number},薪资:{n.salary()}')
def find(self):
while 1:
order = input('1.员工查询2.职位查询')
if order not in ('1', '2'):
print('输入错误,请重新输入')
else:
break
if order == '1':
num = input('请输入工号:')
for i in self.member:
if str(i) == num:
print(f'姓名:{i}')
print(f'职位:{i}')
print(f'级别:{i}')
print(f'工龄:{i}')
print(f'薪资:{i}')
break
else:
print('该工号不存在')
elif order == '2':
while 1:
garde = input('职位(E.普通员工;T.组长;M.经理)')
if garde not in ('E', 'T', 'M'):
print('输入错误,请重新输入')
else:
break
ss = == garde]
q = {'E': '普通员工', 'T': '组长', 'M': '经理'}
if ss:
print(f'目前{q}共有{len(ss)}人')
for i in ss:
print(f'{i} - {i}')
else:
print(f'目前公司没有{q}')
def change_up(self):
aa = 0
num = input('请输入工号:')
for i in self.member:
if str(i) == num:
print(f'{i},工号:{i},当前职位:{i+str(i)},当前薪资:{i[-1]}')
up = int(input('请输入需要增加的级数'))
i += up
qq = i[-1]
if i == 'E':
if 1 <= i <= 10:
self.member = i
self.member[-1] = 3000 + 500 * i + 50 * i
elif 11 <= i <= 16:
self.member = 1
self.member = 'T'
self.member[-1] = 4000 + 800 + 100 * i
elif 19 >= i >= 17:
self.member = 1
self.member = 'M'
self.member[-1] = 5000 + 1000 * (1 + i)
else:
aa = '输入错误'
elif i == 'T':
if 1 <= i <= 6:
self.member = i
self.member[-1] = 4000 + 800 * i + 100 * i
elif 7 <= i <= 9:
self.member = 1
self.member = 'M'
self.member[-1] = 5000 + 1000 * (1 + i)
else:
aa = '输入错误'
elif i == 'M':
if 1 <= i <= 3:
self.member = i
self.member[-1] = 5000 + 1000 * (i + i)
else:
aa = '输入错误'
if aa == '输入错误':
print(aa)
break
else:
print('升级成功!')
print(
f'姓名:{i},工号:{i[-2]},升级后职位:{self.member+str(self.member)},薪资:{self.member[-1]}(+{self.member[-1] - qq})')
break
else:
print('该工号不存在')
def change_down(self):
bb = 0
num = input('请输入工号:')
for i in self.member:
if str(i) == num:
print(f'{i},工号:{i},当前职位:{i+str(i)},当前薪资:{i[-1]}')
down = int(input('请输入需要减少的级数'))
i -= down
qq = i[-1]
if i == 'E':
if 0 < i <= 10:
self.member = i
self.member[-1] = 3000 + 500 * i + 50 * i
else:
bb = '输入错误'
elif i == 'T':
if 0 < i <= 6:
self.member = i
self.member[-1] = 4000 + 800 * i + 100 * i
elif -10 <= i <= -1:
self.member = 10
self.member = 'E'
self.member[-1] = 3000 + 500 * 10 + 50 * i
else:
bb = '输入错误'
elif i == 'M':
if 0 < i <= 3:
self.member = i
self.member[-1] = 5000 + 1000 * (i + i)
elif -3 <= i <= -1:
self.member = 6
self.member = 'T'
self.member[-1] = 4000 + 800 * 6 + 100 * i
elif -13 <= i <= -4:
self.member = 10
self.member = 'E'
self.member[-1] = 3000 + 500 * 10 + 50 * i
else:
bb = '输入错误'
if bb == '输入错误':
print(bb)
break
else:
print('降级成功!')
print(
f'姓名:{i},工号:{i[-2]},升级后职位:{self.member + str(self.member)},薪资:{self.member[-1]}({self.member[-1] - qq})')
break
else:
print('该工号不存在')
def welcome(self):
print('欢迎使用老白企业员工管理系统')
while 1:
order = input('请输入指令:1.录入2.查询3.升级4.降级5.退出')
if order not in ('1', '2', '3', '4', '5'):
print('输入错误,请重新输入')
elif order == '1':
self.key_in()
elif order == '2':
self.find()
elif order == '3':
self.change_up()
elif order == '4':
self.change_down()
elif order == '5':
print('感谢您使用老白企业员工管理系统')
break
def main():
ff = Manage()
ff.welcome()
main()
一道代码题耗费了整个下午时间,呜呜
class Employee():
def __init__(self, name, job, grade, year, uid):
self.name = name
self.job = job
self.grade = grade
self.year = year
self.uid = uid
def get_uid(self):
return self.uid
def get_name(self):
return self.name
def get_job(self):
return self.job
def get_grade(self):
return self.grade
def get_year(self):
return self.year
def salary(self):
salary = 3000 + 500 * self.grade + 50 * self.year
return salary
class Teamleader(Employee):
def salary(self):
salary = 4000 + 800 * self.grade + 100 * self.year
return salary
class Manager(Employee):
def salary(self):
salary = 5000 + 1000 * (self.grade + self.year)
return salary
#正文
def main():
uid = 10000
employee_list = {}
jobs = {'E':[],'T':[],'M':[]}
e_max_grade = 10
t_max_grade = 6
m_max_grade = 3
while True:
select = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
if select == '1':
name = input("姓名:")
job = input("职位(E.普通员工;T.组长;M.经理):")
year = int(input("工龄:"))
grade = int(input("级别:"))
if job == 'E':
if grade > e_max_grade:
grade = int(input(("该职位最高级别职位为%d,请重新录入级别:" % e_max_grade)))
e = Employee(name, job, grade, year, uid)
employee_list = e
jobs['E'].append(e.get_uid())
print("录入成功!姓名:%s,工号:%d,薪资:%d" % (e.get_name(), e.get_uid(), e.salary()) )
uid = uid + 1
if job == 'T':
if grade > t_max_grade:
grade = int(input(("该职位最高级别职位为%d,请重新录入级别:" % t_max_grade)))
t = Teamleader(name, job, grade, year, uid)
employee_list = t
jobs['T'].append(t.get_uid())
print("录入成功!姓名:%s,工号:%d,薪资:%d" % (t.get_name(), t.get_uid(), t.salary()) )
uid = uid + 1
if job == 'M':
if grade > m_max_grade:
grade = int(input(("该职位最高级别职位为%d,请重新录入级别:" % m_max_grade)))
m = Manager(name, job, grade, year, uid)
employee_list = m
jobs['M'].append(m.get_uid())
print("录入成功!姓名:%s,工号:%d,薪资:%d" % (m.get_name(), m.get_uid(), m.salary()) )
uid = uid + 1
if select == '2':
stype = int(input("1.员工查询;2.职位查询:"))
if stype == 1:
suid = int(input("请输入工号:"))
try:
result = employee_list
except KeyError:
print("该工号不存在!")
continue
print("姓名:%s" % result.get_name())
print("职位:%s" % result.get_job())
print("级别:%d" % result.get_grade())
print("工龄:%d" % result.get_year())
print("薪资:%d" % result.salary())
if stype == 2:
sjob = input("职位(E.普通员工;T.组长;M.经理):")
scnt = len(jobs)
if sjob == 'E':
print("目前普通员工共有%d人:" % scnt)
if sjob == 'T':
print("目前组长共有%d人:" % scnt)
if sjob == 'M':
print("目前经理共有%d人:" % scnt)
for iuid in jobs:
#print(iuid)
#print(jobs)
ie = employee_list
print("%d - %s" % (ie.get_uid(), ie.get_name()))
if select == '3':
suid = int(input("请输入工号:"))
e = employee_list
print("%s ,工号:%d ,当前职位:%s,当前薪资:%d" % (e.get_name(), e.get_uid(),e.get_job() + str(e.get_grade()), e.salary() ))
sgrade = int(input("请输入需要增加的级数:"))
n_salsry = e.salary()#目前的薪资
if e.get_job() == 'E':
if e.get_grade() + sgrade > e_max_grade :
e.grade = 1
e.job = 'T'
#更新数据库
#移出E类别,加入T类别
jobs['E'].remove(suid)
jobs['T'].append(suid)
#原来存的是Emloyee类,升级后变成Teamleader类
ne =Teamleader(e.name, e.job, e.grade, e.year, e.uid)
employee_list = ne
else:
e.grade = e.get_grade() + sgrade
if e.get_job() == 'T':
if e.get_grade() + sgrade > t_max_grade :
e.grade = 1
e.job = 'M'
#更新数据库
#移出T类别,加入M类别
jobs['T'].remove(suid)
jobs['M'].append(suid)
#原来存的是Teamleader类,升级后变成Manager类
ne =Manager(e.name, e.job, e.grade, e.year, e.uid)
employee_list = ne
else:
e.grade = e.get_grade() + sgrade
if e.get_job() == 'M':
if e.get_grade() + sgrade > m_max_grade :
print("已超经理最高级别,按最高级处理%d级" % m_max_grade)
e.grade = m_max_grade
else:
e.grade = e.get_grade() + sgrade
s_salary = ne.salary() #升级后的薪资
gap_salary = s_salary - n_salsry
#更新数据库(字典表)
#上面直接修改了实例对象的属性值,不用在更新字典表了
print("升级成功!")
print("%s ,工号:%d ,当前职位:%s,升级后薪资:%d (+ %d )" % (ne.get_name(), ne.get_uid(),ne.get_job() + str(ne.get_grade()), ne.salary(), gap_salary))
if select == '4':
suid = int(input("请输入工号:"))
e = employee_list
print("%s ,工号:%d ,当前职位:%s,当前薪资:%d" % (e.get_name(), e.get_uid(),e.get_job() + str(e.get_grade()), e.salary() ))
sgrade = int(input("请输入需要减少的级数:"))
n_salsry = e.salary()#目前的薪资
if e.get_job() == 'E':
if e.get_grade() - sgrade<=0:
print("已超普通员工最低级别,按最低级处理1级")
e.grade = 1
else:
e.grade = e.get_grade() - sgrade
if e.get_job() == 'T':
if e.get_grade()- sgrade<=0:
e.grade = e_max_grade
e.job = 'E'
#更新数据库
#移出T类别,加入E类别
jobs['T'].remove(suid)
jobs['E'].append(suid)
#原来存的是Teamleader类,降级后变成Employee类
ne =Employee(e.name, e.job, e.grade, e.year, e.uid)
employee_list = ne
else:
e.grade = e.get_grade() - sgrade
if e.get_job() == 'M':
if e.get_grade()- sgrade<=0:
e.grade = t_max_grade
e.job = 'T'
#更新数据库
#移出M类别,加入T类别
jobs['M'].remove(suid)
jobs['T'].append(suid)
#原来存的是Manager类,降级后变成Teamleader类
ne =Teamleader(e.name, e.job, e.grade, e.year, e.uid)
employee_list = ne
else:
e.grade = e.get_grade() - sgrade
s_salary = ne.salary() #升级后的薪资
gap_salary = n_salsry -s_salary
#更新数据库(字典表)
#上面直接修改了实例对象的属性值,不用在更新字典表了
print("升级成功!")
print("%s ,工号:%d ,当前职位:%s,升级后薪资:%d (- %d )" % (ne.get_name(), ne.get_uid(),ne.get_job() + str(ne.get_grade()), ne.salary(), gap_salary))
if select == '5':
break
main()
0.同一个函数或符号在不同的情况下,有不同的功能。
1.能够在继承父类的方法的同时,重写父类的方法,实现个性化
2.可以
3.When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
4.低耦合
5.不属于
0.通过类的继承,在子类中重写父类的方法,不同的子类的实例化对象调用同名的方法时就会呈现不一样的作用效果。
1.可以很好的应对各种不同的输入对象,扩展了运算符、函数和对象的功能丰富性
2可以,这里体现的就是运算符的多样性
3.你看起来像鸭子,那么你就是鸭子
4.降低了耦合度
5.不是,两次运算都是对数据类型求和,没有体现不同场景这个条件
0.
class Staff:
def __init__(self,name,job,grade,year,uid):
self.name=name
self.job=job
self.grade=grade
self.year=year
self.uid=uid
#获取员工工号
def get_uid(self):
return self.uid
#获取员工名字
def get_name(self):
return self.name
#获取员工职位
def get_job(self):
return self.job
#获取员工等级
def get_grade(self):
return self.grade
#获取员工工龄
def get_year(self):
return self.year
def salary(self):
pass
class Employee(Staff):
def salary(self):
grade=self.get_grade()
age=self.get_year()
return 3000+500*grade+50*age
class Teamleader(Staff):
def salary(self):
grade=self.get_grade()
age=self.get_year()
return 4000+800*grade+100*age
class Manager(Staff):
def salary(self):
grade=self.get_grade()
age=self.get_year()
return 5000+1000*(grade+age)
class Main:
message={}
uid=10000
#录入功能
def entering(self):
name=input("请输入员工姓名:")
job=input("请输入职位(E:普通员工;T:组长;M:经理):")
while True:
try:
year=int(input("请输入工龄:"))
break
except ValueError:
print("必须输入整数!")
while True:
try:
grade=int(input("请输入级别:"))
if job=='E' and grade>10:
raise TypeError("该职位最高级别为10\n请重新输入!")
if job=='T' and grade>6:
raise TypeError("该职位最高级别为6\n请重新输入!")
if job=='M' and grade>3:
raise TypeError("该职位最高级别为3\n请重新输入!")
break
except ValueError:
print("必须输入整数!")
except TypeError as e:
print(e)
if job=='E':
staff=Employee(name,job,grade,year,self.uid)
elif job=='T':
staff=Teamleader(name,job,grade,year,self.uid)
elif job=='M':
staff=Manager(name,job,grade,year,self.uid)
self.message=staff
salary=staff.salary()
self.uid+=1
print("录入成功!")
print(f"姓名:{staff.get_name()} 工号:{staff.get_uid()} 薪资{salary}")
#验证输入工号是否存在
def uid_verify(self,uid):
if not self.message.get(uid):
print("工号不存在!")
else:
return uid
#统计员工人数(与查询功能的find()方法结合使用)
def people_num(self,ty):
count=0
ls=[]
for each in self.message.values():
if each.job==ty:
ls.append(each)
count+=1
if ty=='E':
job="普通员工"
elif ty=='T':
job="组长"
elif ty=='M':
job="经理"
return job,count,ls
#查询功能
def find(self):
way=input("1.员工查询;2.职位查询:")
if way=='1':
uid=int(input("请输入工号:"))
uid=self.uid_verify(uid)
if uid:
staff=self.message
salary=staff.salary()
print(f"姓名:{staff.get_name()}\n职位:{staff.get_job()}")
print(f"级别:{staff.get_grade()}\n薪资:{salary}")
if way=='2':
job=input("职位(E:普通员工;T:组长;M:经理:)")
re=self.people_num(job)
if re==0:
print(f"目前公司没有{re}位置")
else:
print(f"目前{re}共有{re}人")
for each in re:
print(f"{each.uid}-{each.name}")
#升级功能
def up_grade(self):
uid=int(input("请输入工号:"))
uid=self.uid_verify(uid)
if uid:
staff=self.message
salary1=staff.salary()
print(f"姓名:{staff.get_name()} 工号:{uid} 职位:{staff.get_job()}\
当前薪资:{salary1}")
add_grade=int(input("请输入要增加的级数:"))
job=staff.job
grade=staff.grade
if job=='E' and grade+add_grade>10:
self.message=Teamleader(staff.name,'T',1,staff.year,uid)
else:
staff.grade+=add_grade
if job=='T' and grade+add_grade>6:
self.message=Manager(staff.name,'M',1,staff.year,uid)
else:
staff.grade+=add_grade
if job=='M' and grade+add_grade>3:
staff.grade==3
else:
staff.grade+=add_grade
new_staff=self.message
salary2=new_staff.salary()
print("升级成功!")
print(f"姓名:{new_staff.get_name()}\n工号:{uid}\n职位:{new_staff.get_job()}")
print(f"升级后薪资:{salary2}+({salary2-salary1})")
#降级功能
def down_grade(self):
uid=int(input("请输入工号:"))
uid=self.uid_verify(uid)
if uid:
staff=self.message
salary1=staff.salary()
print(f"姓名:{staff.get_name()} 工号:{uid} 职位:{staff.get_job()}\
当前薪资:{salary1}")
add_grade=int(input("请输入要减少的级数:"))
job=staff.job
grade=staff.grade
if job=='E' and grade-add_grade<=0:
staff.grade==1
else:
staff.grade-=add_grade
if job=='T' and grade-add_grade<=0:
self.message=Teamleader(staff.name,'E',10,staff.year,uid)
else:
staff.grade-=add_grade
if job=='M' and grade-add_grade<=0:
self.message=Teamleader(staff.name,'T',6,staff.year,uid)
else:
staff.grade-=add_grade
new_staff=self.message
salary2=new_staff.salary()
print("降级成功!")
print(f"姓名:{new_staff.get_name()}\n工号:{uid}\n职位:{new_staff.get_job()}")
print(f"降级后薪资:{salary2}-({salary1-salary2})")
#程序功能接口
def main(self):
while True:
order=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
if order=='1':
self.entering()
elif order=='2':
self.find()
elif order=='3':
self.up_grade()
elif order=='4':
self.down_grade()
elif order=='5':
break
else:
print("输入命令有误!")
m=Main()
m.main()
打卡
1
0.
面向对象的多态是通过继承的重写和不同对象调用同名方法实现的。
1.
一类代码可以实现多种功能,让代码更简洁。
2.
可以,这就是多态
多态是指运算符,函数,对象在不同的状态下具有不同的作用。
3.
美国印第安纳州的诗人詹姆斯·惠特科姆·莱利(James Whitcomb Riley, 1849 ~ 1916)的诗句
“如果有个东西看起来像鸭子,游的像鸭子,叫的像鸭子,把它应该就是个鸭子。”
4.
提高了内聚,因为只要实质一样,形式不一样也可以实现某这功能,提高了内聚。
5.
不是多态
多态是指不同的场景下产生不同的作用。这里是将z参数提前赋值,场景本身没有变化,所以不算多态。
动动手
0.
class Employee:
def __init__(self,name,job,grade,year,uid):
self.name = name
self.job = job
self.grade = grade
self.year = year
self.uid = uid
def get_uid(self):
return self.uid
def get_name(self):
return self.name
def get_job(self):
return self.job
def get_grade(self):
return self.grade
def get_year(self):
return self.year
def salary(self,job):
if job == 'E':
mon = 3000 + 500 * self.grade + 50 * self.year
elif job == 'T':
mon = 4000 + 800 * self.grade + 100 * self.year
elif job == 'M':
mon = 5000 + 1000 * (self.grade + self.year)
return mon
def main():
worker = []
uid = 10000
while True:
print(uid)
s = input('1.录入;2.查询;3.升级;4.降级;5.退出:')
if s == '1':
name = input('姓名:')
job = input('职位(E.普通员工;T.组长;M.经理):')
while job not in ('E','T','M'):
job = input('只能输入E.T.M,请重新输入:')
year = int(input('工龄:'))
grade = int(input('级别:'))
if job == 'E' :
while grade <= 0 or grade > 10:
grade = int(input('该职位最高级别为10z最小为1,请重新输入:'))
elif job == 'T':
while grade <= 0 or grade > 6:
grade = int(input('该职位最高级别为6最小为1,请重新输入:'))
else:
while grade <= 0 or grade > 3:
grade = int(input('该职位最高级别为3最小为1,请重新输入:'))
worker.append(Employee(name,job,grade,year,uid))
print(f'录入成功,姓名:{name},工号:{uid},薪资:{worker[-1].salary(job)}')
uid += 1
elif s == '2':
print(uid)
find = input('1.员工查询;2.职位查询:')
if find == '1':
yuid = int(input('请输入工号:'))
for i in worker:
if i.uid == yuid:
print(f'姓名:{i.name}',f'职位:{i.job}',f'级别:{i.grade}',f'工龄:{i.year}',f'薪资:{i.salary(i.job)}',sep = '\n')
break
else:
print('该工号不存在')
elif find == '2':
w = []
job = input('职位(E.普通员工;T.组长;M.经理):')
while job != 'E' and job != 'T' and job != 'M':
job = input('输入错误,请重新输入:')
for j in worker:
if j.job == job:
w.append(str(j.uid)+'-'+j.name)
if len(w) == 0:
if job == 'E':
print('目前公司么有普通员工!')
elif job == 'T':
print('目前公司没有组长!')
elif job == 'M':
print('目前公司没有经理!')
else:
if job == 'E':
a = '普通员工'
elif job == 'T':
a = '组长'
elif job == 'M':
a = '经理'
print(f'目前{a}共有{len(w)}人:')
for k in w:
print(k)
w.clear()
elif s == '3':
yuid = int(input('请输入工号:'))
worker.append(' ')
for l in worker:
if l.uid == yuid:
print(f'{l.name},工号:{l.uid},当前职位:{l.job + str(l.grade)},当前薪资:{l.salary(l.job)}')
break
else:
print('该工号不存在')
gra = int(input('请输入需要增加的级数:'))
if gra < 0:
print('只能输入正整数或0')
l.grade += gra
if l.job == "E" and l.grade > 10:
l.job = "T"
l.grade = 1
elif l.job == "T" and l.grade > 6:
l.job = "M"
l.grade = 1
elif l.job == "M" and l.grade > 3:
l.job = "M"
l.grade = 3
print('升级成功')
print(f'{l.name} 工号:{l.uid},升级后的职位{l.job + str(l.grade)},升级后的薪资:{l.salary(l.job)}')
worker.pop()
elif s == '4':
yuid = int(input('请输入工号:'))
worker.append(' ')
for l in worker:
if l.uid == yuid:
print(f'{l.name},工号:{l.uid},当前职位:{l.job + str(l.grade)},当前薪资:{l.salary(l.job)}')
break
else:
print('该工号不存在')
gra = int(input('请输入需要减少的级数:'))
if gra < 0:
print('只能输入正整数或0')
l.grade -= gra
if l.job == "M" and l.grade < 1:
l.job = "T"
l.grade = 6
elif l.job == "T" and l.grade < 1:
l.job = "E"
l.grade = 10
elif l.job == "E" and l.grade < 1:
l.job = "E"
l.grade = 1
print('降级成功')
print(f'{l.name} 工号:{l.uid},升级后的职位{l.job + str(l.grade)},升级后的薪资:{l.salary(l.job)}')
worker.pop()
elif s == "5":
break
main()