留位,晚点答
答案
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.属于
class Mumber:
def __int__(self , uid , name , job , age , grade):
self.uid = uid
self.name = name
self.job = job
self.age = age
self.grade = grade
class Menu:
def __int__(self):
self.mumbers = {}
self.uid = 10000
def welcome(self):
while True:
option = input(" 1. 录入 2. 查询 3. 升级 4. 降级 5. 退出")
if option == "1":
pass
def create_info(self):
name = input("请输入姓名:")
while True:
job = input("请输入职位")
if job != "E" and job != "T" and job != "M":
print("输入错误")
continue
break
age = input("请输入级别")
while True:
grade = int(input("请输入等级:"))
if grade >= 7 :
print("等级最高是六级,请重新输入")
continue
break
mumber = Mumber(self.uid, name ,job ,age ,grade)
self.mumbers = mumber
self.uid += 1
看看
本帖最后由 2360620558 于 2023-2-16 23:30 编辑
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.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, job):
if job == "E":
return 3000 + 500 * self.grade + 50 * self.year
if job == "T":
return 4000 + 800 * self.grade + 100 * self.year
if job == "M":
return 5000 + 1000 * (self.grade + self.year)
def set_job(self, job):
self.job = job
def set_grade(self, grade):
self.grade = grade
def main():
uid = 10000
mans = {}
jobs = {"E":[], "T":[], "M":[]}
Emax_grade = 10
Tmax_grade = 6
Mmax_grade = 3
while True:
ins = input("\n1.录入;2.查询;3.升级;4.降级;5退出:")
if ins == "1":
name = input("姓名:")
job = input("职位(E.普通员工;T.组长;M.经理):")
while job != "E" and job != "T" and job != "M":
job = input("职位不正确,请重新输入职位(E.普通员工;T.组长;M.经理):")
year = int(input("工龄:"))
grade = int(input("级别:"))
if job == "E":
while grade > Emax_grade:
grade = int(input(f"该职位最高级别是{Emax_grade},请重新录入级别:"))
e = Staff(name, job, grade, year, uid)
mans = e
jobs.append(e)
if job == "T":
while grade > Tmax_grade:
grade = int(input(f"该职位最高级别是{Tmax_grade},请重新录入级别:"))
e = Staff(name, job, grade, year, uid)
mans = e
jobs.append(e)
if job == "M":
while grade > Mmax_grade:
grade = int(input(f"该职位最高级别是{Mmax_grade},请重新录入级别:"))
e = Staff(name, job, grade, year, uid)
mans = e
jobs.append(e)
print(f"录入成功!姓名:{name},工号:{uid},薪资:{e.salary(job)}")
uid += 1
if ins == "2":
in_ins = input("1.员工查询;2.职位查询:")
if in_ins == "1":
inp_uid = int(input("请输入工号:"))
if mans.get(inp_uid):
e = mans
print(f"姓名:{e.get_name()}")
print(f"职位:{e.get_job()}")
print(f"级别:{e.get_grade()}")
print(f"工龄:{e.get_year()}")
print(f"薪资:{e.salary(e.get_job())}")
else:
print("该工号不存在!")
if in_ins == "2":
job = input("职位(E.普通员工;T.组长;M.经理):")
while job != "E" and job != "T" and job != "M":
job = input("职位不正确,请重新输入职位(E.普通员工;T.组长;M.经理):")
if job == "E":
if len(jobs):
print(f"目前公司普通员工共有 {len(jobs)} 人:)")
for each in jobs:
print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
else:
print("目前公司没有普通员工!")
if job == "T":
if len(jobs):
print(f"目前公司组长共有 {len(jobs)} 人:)")
for each in jobs:
print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
else:
print("目前公司没有组长!")
if job == "M":
if len(jobs):
print(f"目前公司经理共有 {len(jobs)} 人:)")
for each in jobs:
print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
else:
print("目前公司没有经理!")
if ins == "3":
q_uid = int(input("请输入工号:"))
if mans.get(q_uid):
e = mans
print(f"{e.get_name()},工号:{e.get_uid()},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{e.salary(e.get_job())}")
ord_salary = e.salary(e.get_job())
up_grade = int(input("请输入需要增加的级数:"))
grade = e.get_grade() + up_grade
if e.get_job() == "E" and grade > Emax_grade:
job = "T"
grade = 1
jobs["E"].remove(e)
e.set_job(job)
e.set_grade(grade)
jobs["T"].append(e)
elif e.get_job() == "T" and grade > Tmax_grade:
job = "M"
grade = 1
jobs["T"].remove(e)
e.set_job(job)
e.set_grade(grade)
jobs["M"].append(e)
elif e.get_job() == "M" and grade > Mmax_grade:
print("该职位最高级别是 3 级!")
e.set_grade(Mmax_grade)
else:
e.set_grade(grade)
print("升级成功!")
print(f"{e.get_name()},工号:{q_uid},升级后的职位:{e.get_job()}{e.get_grade()},升级后的薪资:{e.salary(e.get_job())}(+{e.salary(e.get_job()) - ord_salary})")
else:
print("该工号不存在!")
if ins == "4":
q_uid = int(input("请输入工号:"))
if mans.get(q_uid):
e = mans.get(q_uid)
print(f"{e.get_name()},工号:{e.get_uid()},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{e.salary(e.get_job())}")
ord_salary = e.salary(e.get_job())
dm_grade = int(input("请输入需要降低的级数:"))
grade = e.get_grade() - dm_grade
if e.get_job() == "E" and grade < 1:
print("该职位最低级别是 1 级!")
grade = 1
e.set_grade(grade)
if e.get_job() == "T" and grade < 1:
job = "E"
grade = Emax_grade
jobs["T"].remove(e)
e.set_job(job)
e.set_grade(grade)
jobs["E"].append(e)
if e.get_job() == "M" and grade < 1:
job = "T"
grade = Tmax_grade
jobs["M"].remove(e)
e.set_job(job)
e.set_grade(grade)
jobs["T"].append(e)
else:
e.set_grade(grade)
print("降级成功!")
print(f"{e.get_name()},工号:{q_uid},降级后的职位:{e.get_job()}{e.get_grade()},降级后的薪资:{e.salary(e.get_job())}({e.salary(e.get_job()) - ord_salary})")
else:
print("该工号不存在!")
if ins == "5":
break
main()
0 通过对主类的集成,并在子类中修改,每一个子类增添相对于本子类输入类型的方法,实现多态
1 可以接口不变,覆盖更多的输入类型或者处理方法
2 可以的,+和体现了多态
3 我看它走路像鸭子,游泳像鸭子,叫声像鸭子,那这只鸟就是鸭子
4 增强了内聚?
5 不是,单纯的默认参数
1
1
瞅瞅
class People:
num = 0
count = 10000
l = ["E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "E10", "T1", "T2", "T3", "T4", "T5", "T6", "M1", "M2", "M3"]
d = {"E":"普通员工", "T":"组长", "M":"经理"}
def __init__(self, uid, name, job, grade, year, salary, num):
self.uid = uid
self.name = name
self.job = job
self.grade = grade
self.year =year
self.salary = salary
self.num = num
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 get_salary(self):
return self.salary
def get_num(self):
return self.num
def main():
inf = []
while True:
x = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
if x == 1:
inf.append(write())
continue
elif x == 2:
find(inf)
continue
elif x == 3:
upgrade(inf)
continue
elif x == 4:
downgrade(inf)
continue
else:
break
def write():
name = input("姓名:")
job = input("职位(E.普通员工;T.组长;M.经理):")
if job != "E" and job != "T" and job != "M":
print(f"本公司没有{job}职务哦~")
print()
return
year = int(input("工龄:"))
grade = get_grade(job)
s = salary(job, grade, year)
print(f"录入成功!姓名:{name}, 工号:{People.count}, 薪资:{s}")
People.count += 1
People.num += 1
print()
return People(People.count-1, name, job, grade, year, s, People.num-1)
def find(inf):
f = int(input("1.员工查询;2.职位查询:"))
if f == 1:
count = 0
uid = int(input("请输入工号:"))
for each in inf:
if uid == each.get_uid():
count += 1
print(f"姓名:{each.name}")
print(f"职位:{each.job}")
print(f"级别:{each.grade}")
print(f"工龄:{each.year}")
print(f"薪资:{each.salary}")
if count == 0:
print("该工号不存在!")
print()
elif f == 2:
count = 0
jobb = input("职位(E.普通员工;T.组长;M.经理):")
if jobb != "E" and jobb != "T" and jobb != "M":
print(f"本公司没有{jobb}职务哦~")
print()
return
for each in inf:
if jobb in each.job:
count += 1
print(f"第{count}位:{each.uid} - {each.name}")
if count == 0:
print(f"目前公司没有{each.d}!")
else:
print(f"目前{each.d}共有{count}人。")
print()
else:
print("请输入正确的查询方式~")
print()
return
def upgrade(inf):
uid = int(input("请输入工号:"))
count = 0
i = 0
for each in inf:
if uid == each.get_uid():
count += 1
now_grade_letter = each.get_job()
now_grade_number = each.get_grade()
list_num = each.get_num()
print(f"{each.get_name()},工号:{each.get_uid()}, 当前职位:{each.get_job()}{each.get_grade()}, 当前薪资:{each.get_salary()}")
if count == 0:
print("该工号不存在!")
return
num = int(input("请输入需要增加的级数:"))
now_grade = now_grade_letter + str(now_grade_number)
while i < len(People.l):
if People.l == now_grade:
if i + num >= len(People.l):
print("升级失败!已超出本公司职位的最大等级!")
return
else:
print("升级成功!")
x = list(People.l)
inf.job = x
inf.grade = int(x)
s = inf.salary
inf.salary = salary(x, int(x), inf.get_year())
print(f"{inf.get_name()},工号:{inf.get_uid()}, 升级后职位:{People.l}, 升级后薪资:{inf.get_salary()}(+{inf.get_salary()-s})")
print()
i += 1
return
def downgrade(inf):
uid = int(input("请输入工号:"))
count = 0
i = 0
for each in inf:
if uid == each.get_uid():
count += 1
now_grade_letter = each.get_job()
now_grade_number = each.get_grade()
list_num = each.get_num()
print(f"{each.get_name()},工号:{each.get_uid()}, 当前职位:{each.get_job()}{each.get_grade()}, 当前薪资:{each.get_salary()}")
if count == 0:
print("该工号不存在!")
return
num = int(input("请输入需要减少的级数:"))
now_grade = now_grade_letter + str(now_grade_number)
while i < len(People.l):
if People.l == now_grade:
if i - num <= 0:
print("降级失败!已超出本公司职位的最小等级!")
print()
return
else:
print("降级成功!")
x = list(People.l)
inf.job = x
inf.grade = int(x)
s = inf.salary
inf.salary = salary(x, int(x), inf.get_year())
print(f"{inf.get_name()},工号:{inf.get_uid()}, 降级后职位:{People.l}, 降级后薪资:{inf.get_salary()}(-{s-inf.get_salary()})")
print()
i += 1
return
def get_grade(job,):
while True:
grade = int(input("级别:"))
if job == "E":
if grade <= 10 and grade > 0:
return grade
else:
print("该职位最高级别为10,请重新录入级别:")
continue
if job == "T":
if grade <= 6 and grade > 0:
return grade
else:
print("该职位最高级别为6,请重新录入级别:")
continue
if job == "M":
if grade <= 3 and grade > 0:
return grade
else:
print("该职位最高级别为3,请重新录入级别:")
continue
def salary(job, grade, year):
if job == "E":
return 3000 + 500 * grade + 50 * year
elif job == "T":
return 4000 + 800 * grade + 100 *year
else:
return 5000 + 1000 * (grade + year)
main()
谢谢
666666666666
class Emp:
def get_uid(self,uid):
self.uid=uid
return self.uid
def get_name(self,name):
self.name=name
return self.name
def get_job(self,job):
self.job=job
return self.job
def get_grade(self,grade):
self.grade=grade
return self.grade
def get_year(self,year):
self.year=year
return self.year
def salary(self):
if self.job=='经理':
return 5000+1000*(self.grade+self.year)
if self.job=='组长':
return 4000+800*self.grade+100*self.year
if self.job=='普通员工':
return 3000+500*self.grade+50*self.year
def shenzhi(x,i):
gra=g-x
jo=j
year=y
name=n
sa=s
if gra<1:
gra=1
x= g-1
job="经理"
elif gra<4:
job="经理"
elif gra<7:
job="组长"
else:
job="普通员工"
if job==jo:
j=m.get_job(job)
g=m.get_grade(gra)
m.get_year(year)
y=m.salary()
ic=m.salary()-sa
elif job!=jo & x>0:
if job=="经理":
gra=3
else:
gra=6
j=m.get_job(job)
g=m.get_grade(gra)
m.get_year(year)
y=m.salary()
ic=m.salary()-sa
elif job!=jo & x<0:
if job=="组长":
gra=4
else:
gra=10
j=m.get_job(job)
g=m.get_grade(gra)
m.get_year(year)
m.get_uid(uid)
y=m.salary()
ic=m.salary()-sa
print(f"调整级别后:{m.get_name(name)}的等级为{m.get_grade(gra)},职位为{m.get_job(job)},薪资:{m.salary()}({ic})")
def main():
uid=10000
menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
m=Emp()
n=[]
j=[]
g=[]
y=[]
u=[]
s=[]
while menu !="5":
if menu=='1':
name=input('姓名:')
job=input('职位:')
grade=0
while grade==0:
ifjob=="经理":
grade=int(input('级别:'))
while grade>3:
grade=int(input("该职位级别最高为3,请重新输入:"))
elif job=="组长":
grade=int(input('级别:'))
while grade<3 or grade>6:
grade=int(input("该职位级别4~6,请重新输入:"))
elif job=="普通员工":
grade=int(input('级别:'))
while grade<6 or grade>10:
grade=int(input("该职位级别7~10,请重新输入:"))
else:
job=input("请输入正确的职位")
grade=0
year=int(input('工龄:'))
uid+=1
n.append(m.get_name(name))
j.append(m.get_job(job))
g.append(m.get_grade(grade))
y.append(m.get_year(year))
u.append(m.get_uid(uid))
s.append(m.salary())
print(f"录入成功!姓名:{m.get_name(name)},工号:{m.get_uid(uid)},薪资:{m.salary()}")
menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
elif menu=='2':
find=input("1.员工查询; 2.职位查询:")
if find=="1":
i=int(input("请输入员工编号:"))
while i not in u:
i=int(input("你所查找的编号不存在,请重新输入:"))
num=u.index(i)
print("您查询的员工信息如下:")
print('姓名:', n)
print('职位:', j)
print('等级:', g)
print('工龄:', y)
print('薪资:', s)
if find=='2':
x=input("请输入职位:")
id1 =
if len(id1)==0:
print(f"目前公司还没有{x}")
else:
print(f"目前{x}共有{len(id1)}人")
for i in id1:
print(f"姓名:{n};工号:{u}")
menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
elif menu=="3":
i=int(input("请输入员工编号:"))
x=int(input("请输入调整等级:"))
while x>4:
x=int(input("最大调整等级为7,请重新输入:"))
gra=g-x
jo=j
year=y
name=n
sa=s
if gra<1:
gra=1
x= g-1
job="经理"
elif gra<4:
job="经理"
elif gra<7:
job="组长"
else:
job="普通员工"
if job==jo:
j=m.get_job(job)
g=m.get_grade(gra)
m.get_year(year)
grade=gra
y=m.salary
ic=m.salary()-sa
elif job!=jo:
if job=="经理":
gra=3
else:
gra=6
j=m.get_job(job)
g=m.get_grade(gra)
m.get_year(year)
grade=gra
y=m.salary()
ic=m.salary()-sa
print(f"调整级别后:{m.get_name(name)}的等级为{m.get_grade(gra)},职位为{m.get_job(job)},薪资:{m.salary()}({ic})")
menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
elif menu=="4":
i=int(input("请输入员工编号:"))
x=int(input("请输入调整等级:"))
while x>4:
x=int(input("最大调整等级为7,请重新输入:"))
x=-x
shenzhi(x,i)
main()
新年好
# 员工类
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):
return 3000 + 500 * self.grade + 50 * self.year
# 组长类
class Teamleader(Staff):
def salary(self):
return 4000 + 800 * self.grade + 100 * self.year
# 经理类
class Manager(Staff):
def salary(self):
return 5000 + 1000 * (self.grade + self.year)
# 管理程序功能类
class Manage():
def __init__(self):
self.staffs = {}
self.uid = 10000 # 工号自动分配,由10000开始
self.grade_max_E = 10
self.grade_max_T = 6
self.grade_max_M = 3
# 程序主入口
def welcome(self):
while True:
func = int(input("\n1.录入;2.查询;3.升级;4.降级;5.退出:"))
if func == 1:
self.enter()
if func == 2:
self.inquiry()
if func == 3:
self.promote()
if func == 4:
self.demote()
if func == 5:
break
def check_grade(self, job, grade):
while True:
if job == 'E' and grade > self.grade_max_E:
grade = int(input(f"该职位最高级别为{self.grade_max_E},请重新录入级别:"))
elif job == 'T' and grade > self.grade_max_T:
grade = int(input(f"该职位最高级别为{self.grade_max_T},请重新录入级别:"))
elif job == 'M' and grade > self.grade_max_M:
grade = int(input(f"该职位最高级别为{self.grade_max_M},请重新录入级别:"))
else:
break
return grade
# 录入员工数据功能
def enter(self):
name = input("姓名:")
job = input("职位(E.普通员工;T.组长;M.经理):")
year = int(input("工龄:"))
grade = int(input("级别:"))
grade = self.check_grade(job, grade)
if job == 'M':
self.staffs = Manager(name, job, grade, year, self.uid)
if job == 'E':
self.staffs = Employee(name, job, grade, year, self.uid)
if job == 'T':
self.staffs = Teamleader(name, job, grade, year, self.uid)
print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{self.staffs.salary()}")
self.uid += 1
# 查询功能
def inquiry(self):
func = int(input("1.员工查询;2.职位查询:"))
if func == 1:
uid = int(input("请输入工号:"))
if not self.staffs.get(uid):
print("该工号不存在!")
else:
print(f"姓名:{self.staffs.name}")
print(f"职位:{self.staffs.job}")
print(f"级别:{self.staffs.grade}")
print(f"工龄:{self.staffs.year}")
print(f"薪资:{self.staffs.salary()}")
if func == 2:
job = input("职位(E.普通员工;T.组长;M.经理):")
count = 0
_ = []
for each in self.staffs.values():
if each.job == job:
count += 1
_.append(each.uid)
if count == 0:
if job == 'E':
print("目前公司没有普通员工!")
elif job == 'T':
print("目前公司没有组长!")
elif job == 'M':
print("目前公司没有经理!")
else:
print(f"目前普通员工共有{count}人:")
for i in range(count):
print(f"{_} - {self.staffs].name}")
# 程序升级功能
def promote(self):
uid = int(input("请输入工号:"))
if not self.staffs.get(uid):
print("该工号不存在!")
else:
print(f"{self.staffs.name},工号:{uid},当前职位:{self.staffs.job}{self.staffs.grade},当前薪资:{self.staffs.salary()}")
promote_grade = int(input("请输入需要增加的级数:"))
salary_old = self.staffs.salary()
if self.staffs.job == 'T' and (self.staffs.grade + promote_grade) > self.grade_max_T:
self.staffs = Manager(self.staffs.name, 'M', 1, self.staffs.year, uid)
elif self.staffs.job == 'E' and (self.staffs.grade + promote_grade) > self.grade_max_E:
self.staffs = Teamleader(self.staffs.name, 'T', 1, self.staffs.year, uid)
elif self.staffs.job == 'M' and (self.staffs.grade + promote_grade) > self.grade_max_M:
self.staffs.grade = self.grade_max_M
else:
self.staffs.grade += promote_grade
salary_d = self.staffs.salary() - salary_old
print("升级成功!")
print(f"{self.staffs.name},工号:{uid},升级后职位:{self.staffs.job}{self.staffs.grade},升级后薪资:{self.staffs.salary()}(+{salary_d})")
# 程序降级功能
def demote(self):
uid = int(input("请输入工号:"))
if not self.staffs.get(uid):
print("该工号不存在!")
else:
print(f"{self.staffs.name},工号:{uid},当前职位:{self.staffs.job}{self.staffs.grade},当前薪资:{self.staffs.salary()}")
demote_grade = int(input("请输入需要减少的级数:"))
salary_old = self.staffs.salary()
if self.staffs.job == 'T' and (self.staffs.grade - demote_grade) < 1:
self.staffs = Employee(self.staffs.name, 'E', self.grade_max_E, self.staffs.year, uid)
elif self.staffs.job == 'E' and (self.staffs.grade - demote_grade) < 1:
self.staffs.grade = 1
elif self.staffs.job == 'M' and (self.staffs.grade - demote_grade) < 1:
self.staffs = Teamleader(self.staffs.name, 'T', self.grade_max_T, self.staffs.year, uid)
else:
self.staffs.grade -= demote_grade
salary_d = salary_old - self.staffs.salary()
print("降级成功!")
print(
f"{self.staffs.name},工号:{uid},降级后职位:{self.staffs.job}{self.staffs.grade},降级后薪资:{self.staffs.salary()}(-{salary_d})")
# 主程序接口
def main():
m = Manage()
m.welcome()
main()
问答题:
0. Python 允许在子类中定义与父类同名的方法,即重写,通过重写,Python体现了面向对象的多态特性
1. 可以在不修改源代码情况下实现不同场景下的运算调用
2. 可以
3. 不知道
4. 低耦合
5. 不是
动动手:
1
1
答案