鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[课后作业] 第063讲:类和对象(VI)| 课后测试题及答案

  [复制链接]
发表于 2023-2-27 15:50:11 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
class level_optMixin:
    def level_max(self,job):
        if job == 'E':
            return 10
        elif job == 'T':
            return 6
        elif job == 'M':
            return 3
    def level_judge(self,level,level_max):
        while level >level_max:
            level = int(input(f'该职位最高级别为{level_max},请重新录入级别:'))
        return level



class Employee:
    def __init__(self,name,job,level,year,uid,salary):
        self.name = name
        self.job = job
        self.level = level
        self.year = year
        self.uid = uid
        self.salary = salary

    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_uid(self):
        return self_uid

class Job_statistic:
   
   
    def statistic(self,job,employees):
        temp = {}
        count = 0
        for each in employees:
            if self.employees[each].job == job:
                count +=1
                temp[each] = self.employees[each].name
               
        if job == 'E':
            print(f'目前普通员工共有{count}人:')
        elif job == 'T':
            print(f'目前组长共有{count}人:')
        elif job == 'M':
            print(f'目前经理共有{count}人:')

        if len(temp) == 0:
            print('目前公司没有该职位')
        else:
            for each in temp:
                print(f'{each}-{temp[each]}')



class Salary:
    def output_salary(self,job,year,level):
        if job == 'E':
            return 3000+500*level+50*year
        elif job == 'T':
            return 4000+800*level+100*year
        elif job == 'M':
            return 5000+ 1000*(level + year)



class Manage(level_optMixin,Salary,Job_statistic):
    def __init__(self):
        self.employees = {}
        self.uid = 10000
        self.job_list = ['E','T','M']

    def inputorder(self):
        while True:
            order = int(input('\n1.录入;2.查询;3.升级;4.降级;5.退出:'))

        
            if order == 1:
                self.create_e()
                self.uid +=1
                continue
            elif order == 2:
                self.searching()
                continue
            elif order == 3:
                self.level_up()
                continue
            elif order == 4:
                self.level_down()
                continue
            elif order == 5:
                break
               




    def create_e(self):
        name = input('姓名:')
        
        job = input('(E.普通员工;T.组长;M.经理):')
        
        year = int(input('工龄:'))
        
        level = int(input('级别:'))
        level_max = self.level_max(job)
        level = self.level_judge(level,level_max)

        salary = self.output_salary(job,year,level)
        
        self.employees[self.uid] = Employee(name,job,level,year,self.uid,salary)

        print(f'录入成功!姓名:{name},工号:{self.uid},薪资:{salary}')


    def searching(self):
        order_0 = int(input('1.员工查询;2.职位查询:'))
        
        if order_0 == 1:
            uid_searching = int(input('请输入工号:'))
            if self.employees.get(uid_searching):
                print(f'姓名:{self.employees.get(uid_searching).name}')
                print(f'职位:{self.employees.get(uid_searching).job}')
                print(f'级别:{self.employees.get(uid_searching).level}')
                print(f'工龄:{self.employees.get(uid_searching).year}')
                print(f'薪资:{self.employees.get(uid_searching).salary}')
            else:
                print('该工号不存在')
        elif order_0 == 2:
            job_searching = input('(E.普通员工;T.组长;M.经理):')
            
            self.statistic(job_searching,self.employees)

    def level_up(self):
        uid_searching = int(input('请输入工号:'))
        if self.employees.get(uid_searching):
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},当前职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},当前薪资\
{self.employees.get(uid_searching).salary}')
            
            job = self.employees.get(uid_searching).job
            level = self.employees.get(uid_searching).level
            
            index = self.job_list.index(job)
            
            level_max = self.level_max(job)
            level_up = int(input('请输入需要增加的级数:'))

            salary_old = self.employees.get(uid_searching).salary
            
            if level + level_up > level_max:
                job = self.job_list[index +1]
                level = 1
            else:
                level +=level_up

            year = self.employees.get(uid_searching).year

            salary_new = self.output_salary(job,year,level)

            self.employees.get(uid_searching).job = job
            self.employees.get(uid_searching).level = level
            self.employees.get(uid_searching).salary = salary_new
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},升级后职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},\
升级后薪资{salary_new}({salary_new-salary_old})')
            
    def level_down(self):
        uid_searching = int(input('请输入工号:'))
        if self.employees.get(uid_searching):
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},当前职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},当前薪资\
{self.employees.get(uid_searching).salary}')
            
            job = self.employees.get(uid_searching).job
            level = self.employees.get(uid_searching).level
            
            index = self.job_list.index(job)
            
            salary_old = self.employees.get(uid_searching).salary
            
            level_down = int(input('请输入需要减少的级数:'))
            if level - level_down < 1:
                job = self.job_list[index -1]
                level = self.level_max(job)
            else:
                level -=level_down

            year = self.employees.get(uid_searching).year
            
            self.employees.get(uid_searching).job = job
            self.employees.get(uid_searching).level = level
            salary_new = self.output_salary(job,year,level)
            
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},降级后职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},\
降级后薪资{salary_new}({salary_new-salary_old})')
        
        
def main():
    m = Manage()
    m.inputorder()

main()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-26 14:58:18 | 显示全部楼层
0.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-24 12:13:24 | 显示全部楼层
import sys

class Person:
    uid = 10000
    person_list = []

    def __init__(self, name, job, grade, year, uid):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid
        self.money = None

    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):
        if self.job == 'E':
            self.money =  3000 + 500 * self.grade + 50 * self.year
        elif self.job == 'T':
            self.money =  4000 + 800 * self.grade + 100 * self.year
        elif self.job == 'M':
            self.money =  5000 + 1000 * (self.grade + self.year)


class Employee(Person):
    def __init__(self,name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)
        self.job = 'E'
        self.grade_max = 10


    def salary(self):
        self.money = 3000 + 500 * self.grade + 50 * self.year
        return self.money


class Teamleader(Person):
    def __init__(self,name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)
        self.job = 'T'
        self.grade_max = 6

    def salary(self):
        self.money = 4000 + 800 * self.grade + 100 * self.year
        return self.money


class Manager(Person):
    def __init__(self,name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)
        self.job = 'M'
        self.grade_max = 3

    def salary(self):
        self.money = 5000 + 1000 * (self.grade + self.year)
        return self.money



def add():
    name = input('姓名:')
    job = input('职位(E.普通员工;T.组长;M.经理):')
    year = int(input('工龄:'))
    grade = int(input('级别:'))
    if job == 'E':
        p = Employee(name, job, grade, year, Person.uid)
        if p.grade > p.grade_max:
            p.grade = int(input(f'该职位最高级别为{p.grade_max},请重新输入级别:'))
            p.salary()
    elif job == 'T':
        p = Teamleader(name, job, grade, year, Person.uid)
        if p.grade > p.grade_max:
            p.grade = int(input(f'该职位最高级别为{p.grade_max},请重新输入级别:'))
            p.salary()
    elif job == 'M':
        p = Manager(name, job, grade, year, Person.uid)
        if p.grade > p.grade_max:
            p.grade = int(input(f'该职位最高级别为{p.grade_max},请重新输入级别:'))
    p.money = p.salary()
    Person.person_list.append(p)
    print(f'录入成功!姓名:{p.name},工号:{Person.uid},薪资:{p.money}')
    Person.uid += 1

def search():
    res = int(input('1.员工查询;2.职位查询:'))
    if res == 1:
        uid = int(input('请输入工号:'))
        for p in Person.person_list:
            if uid == p.uid:
                print(f'姓名: {p.name}')
                print(f'职位: {p.job}')
                print(f'级别: {p.grade}')
                print(f'工龄: {p.year}')
                print(f'薪资: {p.money}')
                break
        else:
            print('该工号不存在!')
    elif res == 2:
        res = input('职位(E.普通员工;T.组长;M.经理):')
        if res == "E":
            p_lst = []
            for p in Person.person_list:
                if p.job == res:
                    p_lst.append(p)
            print(f'目前普通员工共有 {len(p_lst)} 人')
            for p in p_lst:
                print(f'{p.uid} - {p.name}')
            if len(p_lst) == 0:
                print('目前公司没有普通员工!')
        elif res == 'T':
            p_lst = []
            for p in Person.person_list:
                if p.job == res:
                    p_lst.append(p)
            print(f'目前组长共有 {len(p_lst)} 人')
            for p in p_lst:
                print(f'{p.uid} - {p.name}')
            if len(p_lst) == 0:
                print('目前公司没有组长!')
        elif res == 'M':
            p_lst = []
            for p in Person.person_list:
                if p.job == res:
                    p_lst.append(p)
            print(f'目前经理共有 {len(p_lst)} 人')
            for p in p_lst:
                print(f'{p.uid} - {p.name}')
            if len(p_lst) == 0:
                print('目前公司没有经理!')

def upgrade():
    uid = int(input('请输入工号:'))

    for p in Person.person_list:
        if p.name == uid:
            m1 = int(p.money)
            print(f'{p.name},工号: {uid},当前职位:{p.job}{p.grade},当前薪资:{p.money}')
            grade = int(input('请输入需要增加的级数:'))
            p.grade = p.grade + grade
            if p.grade > p.grade_max:
                if p.job == 'E':
                    p.job = 'T'
                    p.grade = p.grade - p.grade_max
                elif p.job == 'T':
                    p.job = 'M'
                    p.grade = p.grade - p.grade_max
            p.salary()
            m2 = int(p.money)
            print('升级成功')
            print(f'{p.name},工号: {uid},升级后职位职位:{p.job}{p.grade},升级后薪资:{p.money}(+{m2-m1})')


def downgrade():
    uid = int(input('请输入工号:'))
    for p in Person.person_list:
        if p.name == uid:
            m1 = int(p.money)
            print(f'{p.name},工号: {uid},当前职位:{p.job}{p.grade},当前薪资:{p.money}')
            grade = int(input('请输入需要减少的级数:'))
            p.grade = p.grade - grade
            if p.grade < 0:
                if p.job == 'T':
                    p.job = 'E'
                    p.grade = p.grade_max - p.grade
                elif p.job == 'M':
                    p.job = 'T'
                    p.grade = p.grade_max - p.grade
            p.salary()
            m2 = int(p.money)
            print('降级成功')
            print(f'{p.name},工号: {uid},降级后职位:{p.job}{p.grade},降级后薪资:{p.money}(-{m2 - m1})')
            break



def main():
    while True:
        res = int(input('\n1.录入;2.查询;3.升级;4.降级;5.退出:'))
        if res == 1:
            add()
        elif res == 2:
            search()
        elif res == 3:
            upgrade()
        elif res == 4:
            downgrade()
        elif res == 5:
            break


if __name__ == '__main__':
    main()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 11:10:13 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-23 11:08:48 | 显示全部楼层
0.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 15:16:05 | 显示全部楼层
写个简单的 偷懒啦
class yuangong():
    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
class employees(yuangong):
    def __init__(self,name,job,grade,year,uid):
        super().__init__(name,job,grade,year,uid)
    def salary(self):
        return 3000 + 500*self.grade+50*self.year
class teamleader(yuangong):
    def __init__(self,name,job,grade,year,uid):
        super().__init__(name,job,grade,year,uid)
    def salary(self):
        return 4000+800*self.grade+100*self.year
class manager(yuangong):
    def __init__(self,name,job,grade,year,uid):
        super().__init__(name,job,grade,year,uid)
    def salary(self):
        return 5000 + 1000*(self.grade+self.year)

class Manager_min():
    def __init__(self):
        self.employee = {}
        self.uid = 10000
    def welcom(self):
        print('欢迎使用员工管理系统')
        while 1 :
            ins = input('请输入您的命令:1.增加员工 2.查询 3.升级 4.降级 5.退出')
            if ins == '1':
                self.create_yuangong()
            elif ins == '2':
                self.select()
            elif ins == '3':
                pass
            elif ins == '4':
                pass
            elif ins == '5':
                print('感谢使用员工管理系统,再见!')
                break
            else :
                print('你输入的密码不正确 ',end = '')
    def create_yuangong(self):
        name = input('请输入员工名称')
        job = input('职位(E员工 T组长 M经理)')
        year = int(input('工龄'))
        grade = int(input('级别'))
        
        if job == 'E':
            employee = employees(name,job,grade,year,self.uid)
            self.employee[self.uid] = employee

        elif job == 'T':
            employee = teamleader(name,job,grade,year,self.uid)
            self.employee[self.uid] = employee

        else:
            employee = manager(name,job,grade,year,self.uid)
            self.employee[self.uid] = employee
        self.uid += 1
    def select(self):
        uid = int(input('请输入你要查询的员工号'))
        while uid not in self.employee:
            uid = int(input('你输入的员工号不存在,请重新输入'))
        print(f'姓名:{self.employee[uid].name}\n职位:{self.employee[uid].job}\n级别:{self.employee[uid].job}\n工龄:{self.employee[uid].year}\n薪资:{self.employee[uid].salary()}')

def main():
    main = Manager_min()
    main.welcom()

main()







        
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-21 16:52:54 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-20 21:15:56 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-20 11:39:04 | 显示全部楼层
0.同名方法,在不同类中的功能不一样
1.不同对象中的计算长度的函数可以用一个len()就解决
2.不能
3.
4.增强了内聚,降低了耦合
5.不是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-19 16:29:06 | 显示全部楼层
0.
方法的作用在不同状况下各不相同
1.

2.
可以
3.

4.
降低藕合
5.
不能

动动手:
  1. class JobMixin:
  2.     def shift_en(self, job):
  3.         if job == 'E':
  4.             return 'Employee'
  5.         elif job == 'T':
  6.             return 'Teamleader'
  7.         elif job == 'M':
  8.             return 'Manager'

  9.     def shift_cn(self, job):
  10.         if job == 'E':
  11.             return "普通员工"
  12.         elif job == 'T':
  13.             return "组长"
  14.         elif job == 'M':
  15.             return "经理"

  16.     def up_down(self, job, grade):
  17.         job_id = {'Employee': 0, 'Teamleader': 1, 'Manager': 2}
  18.         job_name = ['Employee', 'Teamleader', 'Manager']
  19.         grade_scope = {'Employee': 10, 'Teamleader': 6, 'Manager': 3}
  20.         id = job_id[job]
  21.         scope = grade_scope[job]
  22.         if grade > scope:
  23.             if id == 2:
  24.                 grade = scope
  25.             else:
  26.                 grade = 1
  27.                 id += 1
  28.                 job = job_name[id]
  29.         if grade < 0:
  30.             if id == 0:
  31.                 grade = 1
  32.             else:
  33.                 id -= 1
  34.                 job = job_name[id]
  35.                 grade = grade_scope[job]
  36.         return job, grade

  37.     def check(self, x, y='job'):
  38.         if isinstance(x, str):
  39.             while x not in ['E', 'T', 'M']:
  40.                 x = input("请输入正确的职位(E.普通员工;T.组长;M.经理):")
  41.         elif isinstance(x, int):
  42.             grade_scope = {'Employee': 10, 'Teamleader': 6, 'Manager': 3}
  43.             scope = grade_scope[y]
  44.             while x not in range(scope+1):
  45.                 x = int(input(f"该职位最高级别为{scope},请重新录入级别:"))
  46.         return x

  47. class Staff:
  48.     def __init__(self, name, job, year, grade, uid):
  49.         self.name = name
  50.         self.job = job
  51.         self.year = year
  52.         self.grade = grade
  53.         self.uid = uid

  54.     def get_uid(self):
  55.         return self.uid

  56.     def get_name(self):
  57.         return self.name

  58.     def get_job(self):
  59.         return self.job

  60.     def get_grade(self):
  61.         return self.grade

  62.     def get_year(self):
  63.         return self.year

  64.     def salary(self):
  65.         if self.job == 'Employee':
  66.             return 3000 + 500 * self.grade + 50 * self.year
  67.         elif self.job == 'Teamleader':
  68.             return 4000 + 800 * self.grade + 100 * self.year
  69.         elif self.job == 'Manager':
  70.             return 5000 + 1000 * (self.grade + self.year)

  71. class Manage(JobMixin):
  72.     def __init__(self):
  73.         self.members = {}
  74.         self.job = {'Employee': {}, 'Teamleader': {}, 'Manager': {}}
  75.         self.uid = 10000

  76.     def register(self):
  77.         name = input("姓名:")
  78.         job = input("职位(E.普通员工;T.组长;M.经理):")
  79.         job = super().check(job)
  80.         job = super().shift_en(job)
  81.         year = int(input("工龄:"))
  82.         grade = int(input("级别:"))
  83.         grade = super().check(grade, job)
  84.         self.members[self.uid] = Staff(name, job, year, grade, self.uid)
  85.         self.job[job][self.uid] = name
  86.         salary = self.members[self.uid].salary()
  87.         print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{salary}")
  88.         self.uid += 1

  89.     def inquire(self):
  90.         order = int(input("1.工人查询;2.职位查询:"))
  91.         if order == 1:
  92.             uid = int(input("请输入工号:"))
  93.             if uid in self.members:
  94.                 play = self.members[uid]
  95.                 salary = play.salary()
  96.                 print(f"姓名:{play.name}\n"
  97.                       f"职位:{play.job[0]}\n"
  98.                       f"级别:{play.grade}\n"
  99.                       f"工龄:{play.year}\n"
  100.                       f"薪资:{salary}")
  101.             else:
  102.                 print("该工号不存在!")

  103.         elif order == 2:
  104.             job = input("职位(E.普通员工;T.组长;M.经理):")
  105.             job = super().check(job)
  106.             job, job_cn = super().shift_en(job), super().shift_cn(job)
  107.             if self.job[job]:
  108.                 print(f"目前{job_cn}共有{len(self.job[job])}人:")
  109.                 for i in self.job[job]:
  110.                     print(f"{i} - {self.job[job][i]}")
  111.             else:
  112.                 print(f"目前公司没有{job_cn}")

  113.     def upgrade(self):
  114.         uid = int(input("请输入工号:"))
  115.         if uid in self.members:
  116.             play = self.members[uid]
  117.             salary = play.salary()
  118.             print(f"{play.name},工号:{uid},当前职位:{play.job[0]}{play.grade},当前薪资:{salary}")

  119.             up = int(input("请输入需要增加的级数:"))
  120.             print("升级成功")
  121.             grade = play.grade + up
  122.             job, grade = super().up_down(play.job, grade)
  123.             if play.job != job:
  124.                 del self.job[play.job][play.uid]
  125.                 self.job[job][play.uid] = play.name
  126.                 play.job = job
  127.             play.job = job
  128.             play.grade = grade
  129.             new_salary = play.salary()
  130.             print(f"{play.name},工号:{uid},升级后职位:{job[0]}{play.grade},升级后薪资:{new_salary}(+{new_salary - salary})")
  131.         else:
  132.             print("该工号不存在!")

  133.     def relegation(self):
  134.         uid = int(input("请输入工号:"))
  135.         if uid in self.members:
  136.             play = self.members[uid]
  137.             salary = play.salary()
  138.             print(f"{play.name},工号:{uid},当前职位:{play.grade},当前薪资:{salary}")

  139.             down = int(input("请输入需要增加的级数:"))
  140.             print("升级成功")
  141.             grade = play.grade - down
  142.             job, grade = super().up_down(play.job, grade)
  143.             if play.job != job:
  144.                 del self.job[play.job][play.uid]
  145.                 self.job[job][play.uid] = play.name
  146.                 play.job = job
  147.             play.grade = grade
  148.             new_salary = play.salary()
  149.             print(f"{play.name},工号:{uid},降级后职位:{job[0]}{play.grade},降级后薪资:{new_salary}({new_salary - salary})")
  150.         else:
  151.             print("该工号不存在!")


  152. # 执行
  153. main = Manage()
  154. while True:
  155.     try:
  156.         o = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
  157.         if o == 1:
  158.             main.register()
  159.         elif o == 2:
  160.             main.inquire()
  161.         elif o == 3:
  162.             main.upgrade()
  163.         elif o == 4:
  164.             main.relegation()
  165.         elif o == 5:
  166.             break
  167.     except ValueError:
  168.         print("请输入正确的指令!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-19 10:26:52 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-18 17:54:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-18 15:11:40 | 显示全部楼层
问答题:

0.

1.根据不同的对象进行不同的操作

2.可以

3.

4.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-17 17:03:02 | 显示全部楼层
留位,晚点答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-17 07:58:28 | 显示全部楼层
答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-16 14:47:23 | 显示全部楼层
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.属于
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 11:09:44 | 显示全部楼层
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[self.uid] = mumber
        self.uid += 1


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 21:37:09 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-15 11:54:15 | 显示全部楼层
本帖最后由 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.
  1. class Staff:
  2.     def __init__(self, name, job, grade, year, uid):
  3.         self.name = name
  4.         self.job = job
  5.         self.grade = grade
  6.         self.year = year
  7.         self.uid = uid

  8.     def get_uid(self):
  9.         return self.uid
  10.     def get_name(self):
  11.         return self.name
  12.     def get_job(self):
  13.         return self.job
  14.     def get_grade(self):
  15.         return self.grade
  16.     def get_year(self):
  17.         return self.year
  18.    
  19.     def salary(self, job):
  20.         if job == "E":
  21.             return 3000 + 500 * self.grade + 50 * self.year
  22.         if job == "T":
  23.             return 4000 + 800 * self.grade + 100 * self.year
  24.         if job == "M":
  25.             return 5000 + 1000 * (self.grade + self.year)
  26.         
  27.     def set_job(self, job):
  28.         self.job = job
  29.     def set_grade(self, grade):
  30.         self.grade = grade   

  31. def main():
  32.     uid = 10000
  33.     mans = {}
  34.     jobs = {"E":[], "T":[], "M":[]}
  35.     Emax_grade = 10
  36.     Tmax_grade = 6
  37.     Mmax_grade = 3

  38.     while True:
  39.         ins = input("\n1.录入;2.查询;3.升级;4.降级;5退出:")

  40.         if ins == "1":
  41.             name = input("姓名:")
  42.             job = input("职位(E.普通员工;T.组长;M.经理):")
  43.             while job != "E" and job != "T" and job != "M":
  44.                 job = input("职位不正确,请重新输入职位(E.普通员工;T.组长;M.经理):")
  45.             year = int(input("工龄:"))
  46.             grade = int(input("级别:"))

  47.             if job == "E":
  48.                 while grade > Emax_grade:
  49.                     grade = int(input(f"该职位最高级别是{Emax_grade},请重新录入级别:"))
  50.                 e = Staff(name, job, grade, year, uid)
  51.                 mans[uid] = e
  52.                 jobs[job].append(e)
  53.             
  54.             if job == "T":
  55.                 while grade > Tmax_grade:
  56.                     grade = int(input(f"该职位最高级别是{Tmax_grade},请重新录入级别:"))
  57.                 e = Staff(name, job, grade, year, uid)
  58.                 mans[uid] = e
  59.                 jobs[job].append(e)

  60.             if job == "M":
  61.                 while grade > Mmax_grade:
  62.                     grade = int(input(f"该职位最高级别是{Mmax_grade},请重新录入级别:"))
  63.                 e = Staff(name, job, grade, year, uid)
  64.                 mans[uid] = e
  65.                 jobs[job].append(e)

  66.             print(f"录入成功!姓名:{name},工号:{uid},薪资:{e.salary(job)}")
  67.             uid += 1
  68.         
  69.         if ins == "2":
  70.             in_ins = input("1.员工查询;2.职位查询:")
  71.             
  72.             if in_ins == "1":
  73.                 inp_uid = int(input("请输入工号:"))
  74.                 if mans.get(inp_uid):
  75.                     e = mans[inp_uid]
  76.                     print(f"姓名:{e.get_name()}")
  77.                     print(f"职位:{e.get_job()}")
  78.                     print(f"级别:{e.get_grade()}")
  79.                     print(f"工龄:{e.get_year()}")
  80.                     print(f"薪资:{e.salary(e.get_job())}")
  81.                 else:
  82.                     print("该工号不存在!")

  83.             if in_ins == "2":
  84.                 job = input("职位(E.普通员工;T.组长;M.经理):")
  85.                 while job != "E" and job != "T" and job != "M":
  86.                     job = input("职位不正确,请重新输入职位(E.普通员工;T.组长;M.经理):")
  87.                 if job == "E":
  88.                     if len(jobs[job]):
  89.                         print(f"目前公司普通员工共有 {len(jobs[job])} 人:)")
  90.                         for each in jobs[job]:
  91.                             print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
  92.                     else:
  93.                         print("目前公司没有普通员工!")

  94.                 if job == "T":
  95.                     if len(jobs[job]):
  96.                         print(f"目前公司组长共有 {len(jobs[job])} 人:)")
  97.                         for each in jobs[job]:
  98.                             print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
  99.                     else:
  100.                         print("目前公司没有组长!")

  101.                 if job == "M":
  102.                     if len(jobs[job]):
  103.                         print(f"目前公司经理共有 {len(jobs[job])} 人:)")
  104.                         for each in jobs[job]:
  105.                             print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
  106.                     else:
  107.                         print("目前公司没有经理!")

  108.         if ins == "3":
  109.             q_uid = int(input("请输入工号:"))
  110.             
  111.             if mans.get(q_uid):
  112.                     e = mans[q_uid]
  113.                     print(f"{e.get_name()},工号:{e.get_uid()},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{e.salary(e.get_job())}")
  114.                     ord_salary = e.salary(e.get_job())
  115.                     up_grade = int(input("请输入需要增加的级数:"))
  116.                     grade = e.get_grade() + up_grade

  117.                     if e.get_job() == "E" and grade > Emax_grade:
  118.                         job = "T"
  119.                         grade = 1
  120.                         jobs["E"].remove(e)
  121.                         e.set_job(job)
  122.                         e.set_grade(grade)
  123.                         jobs["T"].append(e)
  124.                            
  125.                     elif e.get_job() == "T" and grade > Tmax_grade:
  126.                         job = "M"
  127.                         grade = 1
  128.                         jobs["T"].remove(e)
  129.                         e.set_job(job)
  130.                         e.set_grade(grade)
  131.                         jobs["M"].append(e)

  132.                     elif e.get_job() == "M" and grade > Mmax_grade:
  133.                         print("该职位最高级别是 3 级!")
  134.                         e.set_grade(Mmax_grade)
  135.                     
  136.                     else:
  137.                         e.set_grade(grade)
  138.                     print("升级成功!")
  139.                     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})")
  140.             else:
  141.                 print("该工号不存在!")


  142.         if ins == "4":
  143.             q_uid = int(input("请输入工号:"))

  144.             if mans.get(q_uid):
  145.                 e = mans.get(q_uid)
  146.                 print(f"{e.get_name()},工号:{e.get_uid()},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{e.salary(e.get_job())}")
  147.                 ord_salary = e.salary(e.get_job())
  148.                 dm_grade = int(input("请输入需要降低的级数:"))
  149.                 grade = e.get_grade() - dm_grade

  150.                 if e.get_job() == "E" and grade < 1:
  151.                     print("该职位最低级别是 1 级!")
  152.                     grade = 1
  153.                     e.set_grade(grade)

  154.                 if e.get_job() == "T" and grade < 1:
  155.                     job = "E"
  156.                     grade = Emax_grade
  157.                     jobs["T"].remove(e)
  158.                     e.set_job(job)
  159.                     e.set_grade(grade)
  160.                     jobs["E"].append(e)
  161.                
  162.                 if e.get_job() == "M" and grade < 1:
  163.                     job = "T"
  164.                     grade = Tmax_grade
  165.                     jobs["M"].remove(e)
  166.                     e.set_job(job)
  167.                     e.set_grade(grade)
  168.                     jobs["T"].append(e)
  169.                
  170.                 else:
  171.                     e.set_grade(grade)
  172.                 print("降级成功!")
  173.                 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})")
  174.             else:
  175.                 print("该工号不存在!")
  176.         
  177.         if ins == "5":
  178.             break
  179. main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 07:27:37 | 显示全部楼层
0 通过对主类的集成,并在子类中修改,每一个子类增添相对于本子类输入类型的方法,实现多态
1 可以接口不变,覆盖更多的输入类型或者处理方法
2 可以的,+和体现了多态
3 我看它走路像鸭子,游泳像鸭子,叫声像鸭子,那这只鸟就是鸭子
4 增强了内聚?
5 不是,单纯的默认参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-9-19 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表