鱼C论坛

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

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

  [复制链接]
发表于 2025-5-5 16:27:27 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
只需要对象的方法符合要求,就可以调用
第 1 题的答案是:
使代码更加模块化、易于扩展和维护。
第 2 题的答案是:
可以
第 3 题的答案是:
“如果它走起来像鸭子,叫起来也像鸭子,那么它很可能就是一只鸭子。”
    这句话强调的是行为和接口的重要性,而不是对象的具体类型。
第 4 题的答案是:
鸭子类型增强了低耦合度:通过关注对象的行为而非具体类型,
    鸭子类型减少了模块之间的硬编码依赖,提高了系统的灵活性和可维护性。
    鸭子类型不直接影响内聚性:内聚性主要关注模块内的功能联系,鸭子类
    型更多地帮助实现低耦合,但需要结合良好的设计来实现高内聚。
第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-29 10:47:55 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-29 09:41:36 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-28 21:51:38 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
具有同样名字的方法,可以有不同的作用
第 1 题的答案是:
同样方法不同作用
第 2 题的答案是:
可以
第 3 题的答案是:
bzd
第 4 题的答案是:
低耦合
第 5 题的答案是:
不是
-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-26 15:35:01 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-25 17:16:33 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:​​继承与方法重写​​:子类覆盖父类方法。
​​鸭子类型​​:不依赖继承,只依赖对象的行为。
​​运算符重载​​:通过特殊方法自定义运算符行为。
​​抽象基类​​:强制子类实现统一接口。
​​动态类型系统​​:函数参数和变量无需声明类型,运行时确定行为。

第 1 题的答案是:提高代码的灵活性和可扩展性​
减少代码重复(DRY 原则)
第 2 题的答案是:可以

第 3 题的答案是:If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.

第 4 题的答案是:​​降低耦合度

第 5 题的答案是:这个例子体现的是 ​​函数参数默认值(Default Arguments)​​ 和 ​​函数重载(Function Overloading)的模拟​​,而不是多态(Polymorphism)。



-------- 动动手 --------

请将第 0 题的代码写在下方:class Employee:
    def __init__(self, name, grade, year, uid):
        self.name = name
        self.grade = grade
        self.year = year
        self.uid = uid

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


class TeamLeader(Employee):
    def salary(self):  #
        return 4000 + 800 * self.grade + 100 * self.year


class Manager(Employee):
    def salary(self):
        return 5000 + 1000 * (self.grade + self.year)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-24 15:16:41 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-24 12:24:25 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-23 21:03:03 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
继承和方法重写,鸭子类型
第 1 题的答案是:
一个接口面对不同对象
第 2 题的答案是:
可以,+号和==号都多态
第 3 题的答案是:

第 4 题的答案是:
增强了
第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-23 15:47:02 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
不同对象传入同一个类中调用各自不同的方法
第 1 题的答案是:
减少代码冗余
第 2 题的答案是:
不能,从结果来看,两者没有任何关系
第 3 题的答案是:
不知道
第 4 题的答案是:
降低耦合
第 5 题的答案是:
是的
-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-19 22:12:31 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
方法重写(Override)、鸭子类型(Duck Typing)
第 1 题的答案是:
多态的优势是代码复用率高,可读性强,结构清晰
第 2 题的答案是:
从广义多态的角度来看是符合多态概念,符合多态 “一个接口,多种实现” 的本质特征,
但更多地体现了 Python 中运算符重载这一特性
第 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 题的代码写在下方:
# 初始化会员字典
members = {}

# 定义 job 字典
job_dict = {
    "E": "普通员工",
    "T": "组长",
    "M": "经理"
}

# 定义每个职位的最高级别
job_max_grade = {
    "E": 10,
    "T": 6,
    "M": 3
}

# 定义职位顺序
job_order = ["E", "T", "M"]

class Members:
    def __init__(self, name, job, grade, year, uid):
        self.name = name
        valid_job = job_order  # job_order 是 ["E", "T", "M"]
        if job in valid_job:
            self.job = job
        else:
            raise ValueError(f"职位必须是 {valid_job} 中的一个。")  # 直接使用列表
        
        # 获取当前职位的最高级别
        current_max_grade = job_max_grade[job]  # 通过字典键访问值
        
        if job == "E":
            if 1 <= grade <= current_max_grade:
                self.grade = grade
            else:
                raise ValueError(f"当职位为 'E' 时,级别必须在 1 到 {current_max_grade} 之间。")
        elif job == "T":
            if 1 <= grade <= current_max_grade:
                self.grade = grade
            else:
                raise ValueError(f"当职位为 'T' 时,级别必须在 1 到 {current_max_grade} 之间。")
        elif job == "M":
            if 1 <= grade <= current_max_grade:
                self.grade = grade
            else:
                raise ValueError(f"当职位为 'M' 时,级别必须在 1 到 {current_max_grade} 之间。")
        self.year = year
        self.uid = uid
    def get_uid(self, uid):
        if uid in members:
            member = members[uid]
            salary = member.get_salary(member.job, member.grade, member.year)
            return f'姓名:{member.name}\n职位:{member.job}\n级别:{member.grade}\n工龄:{member.year}\n薪资:{salary}\n'
        else:
            return '该工号不存在'
    def get_name(self):
        return (self.name)
    def get_job(self):
        return (self.job)
    def get_grade():
        return (self.grade)
    def get_year(self):
        return (self.year)
    def get_salary(self, job, grade, year):
        if job == 'E':
            j = 3000
            l = 500
            y =50
        elif job == 'T':
            j = 4000
            l = 800
            y =100
        elif job == 'M':
            j = 5000
            l = 1000
            y = 1000
        return( j + l *grade + y * year)
    def upgrade(self, upgrade):
        old_salary = self.get_salary(self.job, self.grade, self.year)
        new_grade = self.grade + upgrade
        current_job_index = job_order.index(self.job)
        while new_grade > job_max_grade[self.job]:
            if current_job_index < len(job_order) - 1:
                current_job_index += 1
                self.job = job_order[current_job_index]
                new_grade = 1  # 升为上一职位的最低级
            else:
                new_grade = job_max_grade[self.job]
                break
        self.grade = new_grade
        salary = self.get_salary(self.job, self.grade, self.year)
        print(f'升级成功!\n{self.name},工号:{self.uid};升级后职位:{self.job}{self.grade};升级后薪资:{salary}(+{salary - old_salary})')

    def downgrade(self, downgrade):
        old_salary = self.get_salary(self.job, self.grade, self.year)
        new_grade = self.grade - downgrade
        current_job_index = job_order.index(self.job)
        while new_grade < 1:
            if current_job_index > 0:
                current_job_index -= 1
                self.job = job_order[current_job_index]
                new_grade = job_max_grade[self.job]  # 降为下一职位的最高级
            else:
                new_grade = 1
                break
        self.grade = new_grade
        salary = self.get_salary(self.job, self.grade, self.year)
        print(f'降级成功!\n{self.name},工号:{self.uid};降级后职位:{self.job}{self.grade};降级后薪资:{salary}({salary - old_salary})')


class Manage:
    def __init__(self):
        # 这里原代码中 member = Members() 没有意义,因为没传参数会报错,可注释或删除
        # member = Members()
        pass
    def get_valid_job(self):
        while True:
            job = input("职位(E.普通员工:T.组长:M.经理):")
            if job.upper() in ("E", "T", "M"):
                job = job.upper()
                max_grade = 10 if job == "E" else 6 if job == "T" else 3
                return job, max_grade
            job = input("职位只能是 E.普通员工、T.组长或 M.经理。请重新录入职位:")
            if job.upper() in ("E", "T", "M"):
                job = job.upper()
                max_grade = 10 if job == "E" else 6 if job == "T" else 3
                return job, max_grade

    def get_valid_grade(self, job, max_grade):
        while True:
            try:
                grade = int(input("级别:"))
                if (job == "E" and 1 <= grade <= 10) or (job == "T" and 1 <= grade <= 6) or (job == "M" and 1 <= grade <= 3):
                    return grade
                grade = input(f"该职位最高级别为:{max_grade},请重新录入级别:")
                grade = int(grade)
                if (job == "E" and 1 <= grade <= 10) or (job == "T" and 1 <= grade <= 6) or (job == "M" and 1 <= grade <= 3):
                    return grade
            except ValueError:
                grade = input(f"输入错误: 级别必须是整数,该职位最高级别为:{max_grade},请重新录入级别:")
                try:
                    grade = int(grade)
                    if (job == "E" and 1 <= grade <= 10) or (job == "T" and 1 <= grade <= 6) or (job == "M" and 1 <= grade <= 3):
                        return grade
                except ValueError:
                    continue
               
    def run(self):
        while True:
            try:
                c = int(input("1.录入:2.查询:3.升级:4.降级:5.退出:"))
                if c == 1:
                    name = input("姓名:")
                    job, max_grade = self.get_valid_job()
                    year = int(input("工龄:"))
                    grade = self.get_valid_grade(job, max_grade)
                    if not members:
                        uid = 10000
                    else:
                        uid = max(int(m) for m in members.keys()) + 1
                    member = Members(name, job, grade, year, uid)
                    members[uid] = member
                    salary = member.get_salary(job, grade, year)
                    print(f"录入成功! 姓名:{name},工号:{uid},薪资:{salary}")
               
                elif c == 2:
                    c2 = input("1.员工查询,2.职位查询:")
                    if c2 == "1":
                        c2_uid = int(input("请输入工号:"))
                        if c2_uid in members:
                            member = members[c2_uid]
                            print(member.get_uid(c2_uid))
                        else:
                            print('该工号不存在')
                    elif c2 == "2":
                        c2_job, _ = self.get_valid_job()
                        job_title = job_dict[c2_job]
                        job_members = [member for uid, member in members.items() if member.job == c2_job]
                        if len(job_members) == 0:
                            print(f'目前公司没有{job_title}!')
                        else:
                            print(f"目前{job_title}的人数是{len(job_members)}")
                        for member in job_members:
                            print(f"{member.uid} - {member.name}")
                    else:
                        print('无效的选项,请输入1 或 2 。')
                elif c == 3:
                    c3_uid = int(input('请输入工号:'))
                    while c3_uid not in members:
                        print('该工号不存在,请重新输入!')
                        c3_uid = int(input('请输入工号:'))
                    member = members[c3_uid]
                    up_g = int(input(f"{member.name},工号:{member.uid};当前职位:{member.job}{member.grade};当前薪资:{member.get_salary(member.job, member.grade, member.year)}\n请输入需要增加的级数:"))
                    member.upgrade(up_g)

                elif c == 4:
                    c4_uid = int(input('请输入工号:'))
                    while c4_uid not in members:
                        print('该工号不存在,请重新输入!')
                        c4_uid = int(input('请输入工号:'))
                    member = members[c4_uid]
                    d_g = int(input(f"{member.name},工号:{member.uid};当前职位:{member.job}{member.grade};当前薪资:{member.get_salary(member.job, member.grade, member.year)}\n请输入需要减少的级数:"))
                    member.downgrade(d_g)
                                         
                elif c == 5:
                            break
            except ValueError as e:
                print(f"输入错误: {e}")
            except KeyError:
                print("工号不存在,请重新输入。")
               
def main():
    manage = Manage()
    manage.run()

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

使用道具 举报

发表于 2025-4-18 20:05:26 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-14 17:34:01 | 显示全部楼层
-------- 问答题 --------

第 0 题的答案是:
通过同一函数名操作不同类

第 1 题的答案是:
减少代码量

第 2 题的答案是:
不能

第 3 题的答案是:
If it walks like a duck and quacks like a duck, then it must be a duck.

第 4 题的答案是:
降低耦合度

第 5 题的答案是:
不属于

-------- 动动手 --------

请将第 0 题的代码写在下方:
  1. def create_uid():
  2.     uid = 9999

  3.     def inner() -> int:
  4.         nonlocal uid
  5.         uid += 1
  6.         return uid

  7.     return inner


  8. ct_uid = create_uid()


  9. class Worker:
  10.     def __init__(self, name: str, job: str, grade: int, year: int) -> None:
  11.         self.name = name
  12.         self.job = job
  13.         self.grade = grade
  14.         self.year = year
  15.         self.uid = ct_uid()

  16.     def get_uid(self):
  17.         print(f"工号:{self.uid}")

  18.     def get_name(self):
  19.         print(f"姓名:{self.name}")

  20.     def get_job(self):
  21.         print(f"职位:{self.job}")

  22.     def get_grade(self):
  23.         print(f"级别:{self.grade}")

  24.     def get_year(self):
  25.         print(f"工龄:{self.year}")


  26. class GetSalaryMixin:
  27.     def get_salary(self):
  28.         print(f"薪资:{self.salary()}")


  29. class ChangeGradeMixin:
  30.     def cgrade(self, rank: int) -> bool:
  31.         self.grade += rank
  32.         if self.grade < 1:
  33.             self.grade = 1
  34.         elif self.grade > self.max_grade:
  35.             self.grade = self.max_grade
  36.         return True


  37. class Employee(ChangeGradeMixin, GetSalaryMixin, Worker):
  38.     max_grade = 10

  39.     def __init__(self, name: str, grade: int, year: int) -> None:
  40.         super().__init__(name, "E", grade, year)

  41.     def salary(self):
  42.         return 3000 + 500 * self.grade + 50 * self.year


  43. class Teamleader(ChangeGradeMixin, GetSalaryMixin, Worker):
  44.     max_grade = 6

  45.     def __init__(self, name: str, grade: int, year: int) -> None:
  46.         super().__init__(name, "T", grade, year)

  47.     def salary(self):
  48.         return 4000 + 800 * self.grade + 100 * self.year


  49. class Manager(ChangeGradeMixin, GetSalaryMixin, Worker):
  50.     max_grade = 3

  51.     def __init__(self, name: str, grade: int, year: int) -> None:
  52.         super().__init__(name, "M", grade, year)

  53.     def salary(self):
  54.         return 5000 + 1000 * (self.grade + self.year)


  55. class Manage:
  56.     workers: list[Employee, Teamleader, Manager] = []
  57.     occupation_pool: dict[str, list[Employee | Teamleader | Manager]] = {
  58.         "E": [],
  59.         "T": [],
  60.         "M": [],
  61.     }

  62.     def input_plus_int(self, s: str) -> int:
  63.         while True:
  64.             try:
  65.                 num = int(input(s))
  66.                 if num < 0:
  67.                     raise ValueError
  68.                 return num
  69.             except ValueError:
  70.                 print("请用正整数输入!")
  71.             except KeyboardInterrupt:
  72.                 print("\n操作被用户中断")
  73.                 raise

  74.     def findWorker(self) -> tuple[int, Employee | Teamleader | Manager]:
  75.         uid = self.input_plus_int("请输入工号:")
  76.         for i, worker in enumerate(self.workers):
  77.             if worker.uid == uid:
  78.                 return i, worker
  79.         else:
  80.             print("该工号不存在!")
  81.             return -1, worker

  82.     def enroll(self) -> None:
  83.         name = input("姓名:")
  84.         job = input("职位(E.普通员工;T.组长;M.经理):")
  85.         year = self.input_plus_int("工龄:")
  86.         grade = self.input_plus_int("级别:")
  87.         if job == "E":
  88.             while grade > Employee.max_grade:
  89.                 grade = self.input_plus_int(
  90.                     f"该职位最高级别为{Employee.max_grade},请重新录入级别:"
  91.                 )
  92.             temp = Employee(name, grade, year)
  93.             self.workers.append(temp)
  94.             self.occupation_pool[job].append(temp)
  95.         elif job == "T":
  96.             while grade > Teamleader.max_grade:
  97.                 grade = self.input_plus_int(
  98.                     f"该职位最高级别为{Teamleader.max_grade},请重新录入级别:"
  99.                 )
  100.             temp = Teamleader(name, grade, year)
  101.             self.workers.append(temp)
  102.             self.occupation_pool[job].append(temp)
  103.         elif job == "M":
  104.             while grade > Manager.max_grade:
  105.                 grade = self.input_plus_int(
  106.                     f"该职位最高级别为{Manager.max_grade},请重新录入级别:"
  107.                 )
  108.             temp = Manager(name, grade, year)
  109.             self.workers.append(temp)
  110.             self.occupation_pool[job].append(temp)
  111.         else:
  112.             print("暂无该职位!")
  113.             return
  114.         print(f"录入成功!姓名:{temp.name},工号:{temp.uid},薪资:{temp.salary()}")
  115.         return

  116.     def inquire(self) -> None:
  117.         while True:
  118.             op = input("1.员工查询;2.职位查询:")
  119.             if op in ["1", "2"]:
  120.                 break
  121.             print("请输入1或2!")
  122.         if op == "1":
  123.             i, temp = self.findWorker()
  124.             if i == -1:
  125.                 return
  126.             temp.get_name()
  127.             temp.get_job()
  128.             temp.get_grade()
  129.             temp.get_year()
  130.             temp.get_salary()
  131.         else:
  132.             job = input("职位(E.普通员工;T.组长;M.经理):")
  133.             if job == "E":
  134.                 if self.occupation_pool[job] == []:
  135.                     print("目前公司没有普通员工&#128517;!")
  136.                     return
  137.                 print(f"目前普通员工有 {len(self.occupation_pool[job])} 人:")
  138.             elif job == "T":
  139.                 if self.occupation_pool[job] == []:
  140.                     print("目前公司没有组长!")
  141.                     return
  142.                 print(f"目前组长有 {len(self.occupation_pool[job])} 人:")
  143.             elif job == "M":
  144.                 if self.occupation_pool[job] == []:
  145.                     print("目前公司没有经理!")
  146.                     return
  147.                 print(f"目前经理有 {len(self.occupation_pool[job])} 人:")
  148.             for worker in self.occupation_pool[job]:
  149.                 print(f"{worker.uid} - {worker.name}")

  150.     def upgrade(self):
  151.         i, temp = self.findWorker()
  152.         if i == -1:
  153.             return
  154.         level = self.input_plus_int("请输入需要增加的级数:")
  155.         if temp.cgrade(level):
  156.             print("升级成功!")

  157.     def degrade(self):
  158.         i, temp = self.findWorker()
  159.         if i == -1:
  160.             return
  161.         level = self.input_plus_int("请输入需要减少的级数:")
  162.         if temp.cgrade(-level):
  163.             print("降级成功!")

  164.     def menu(self):
  165.         while True:
  166.             op = self.input_plus_int("1.录入;2.查询;3.升级;4.降级;5.退出:")
  167.             if op == 1:
  168.                 self.enroll()
  169.             elif op == 2:
  170.                 self.inquire()
  171.             elif op == 3:
  172.                 self.upgrade()
  173.             elif op == 4:
  174.                 self.degrade()
  175.             elif op == 5:
  176.                 break


  177. def main():
  178.     m = Manage()
  179.     m.menu()


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

使用道具 举报

发表于 2025-4-14 09:45:13 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
1、通过重写的方式,2、在定义函数时就定义好函数的多态性,3、通过鸭子类型
第 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 Employee:
    # 定义员工等级和对应的工资
    max_grade = {'E': 10, 'T': 6, 'M': 3}
    # 定义员工等级升级
    up_grade = {'E': 'T', 'T': 'M', 'M': None}
    # 定义员工等级降级
    down_grade = {'M': 'T', 'T': 'E', 'E': None}

    def __init__(self, uid, name, job, grade, year):
        # 初始化员工信息
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid

    def get_uid(self):
        # 返回员工ID
        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):
        # 根据员工职位计算工资
        # 如果职位是E,则返回3000 + 500 * 等级 + 50 * 工龄
        if self.job == 'E':
            return 3000 + 500 * self.grade + 50 * self.year
        # 如果职位是T,则返回4000 + 800 * 等级 + 100 * 工龄
        elif self.job == 'T':
            return 4000 + 800 * self.grade + 100 * self.year
        # 如果职位是M,则返回5000 + 1000 * (等级 + 工龄)
        elif self.job =='M':
            return 5000 + 1000 * (self.grade + self.year)
        # 否则返回0
        else:
            return 0
class Main:
    def __init__(self):
        self.employee_info = {}
        # 定义一个变量,用于存储员工编号的起始值
        self.begin_uid = 10000
    def input_info(self):
        # 输入姓名
        name = input('姓名:').strip()
        # 输入职位,直到输入正确为止
        while True:
            job = input('职位(E普通员工;T组长;M经理):').upper()
            # 判断输入的职位是否正确
            if job in ['E', 'T', 'M']:
                break
            else:
                print('输入错误,请重新输入')
        # 输入工龄
        year = int(input('工龄:'))
        max_grade = Employee.max_grade[job]
        # 输入级别,直到输入正确为止
        while True:
            grade = int(input('级别:'))
            # 判断输入的级别是否正确
            if 1 <= grade <= max_grade:
                break
            else:
                print(f'该职位最高级别为{max_grade},请重新输入')
        uid = self.begin_uid
        new_employee = Employee(uid, name, job, grade, year)
        salary = new_employee.get_salary()
        self.employee_info[uid] = new_employee
        self.begin_uid += 1
        print(f'录入成功!姓名:{name}, 工号:{uid}, 薪资:{salary}')
    def search_info(self):
        choice = int(input('1、员工查询;2、职位查询:'))
        if choice == 1:
            uid = int(input('请输入员工编号:'))
            if uid in self.employee_info:
                print(f'姓名:{self.employee_info[uid].get_name()}\n职位:{self.employee_info[uid].get_job()}\n级别:{self.employee_info[uid].get_grade()}\n工龄:{self.employee_info[uid].get_year()}\n薪资:{self.employee_info[uid].get_salary()}')
            else:
                print('该工号不存在')
        elif choice == 2:
            job = input('职位(E普通员工;T组长;M经理):').upper()
            if job == 'E':
                count = 0
                employees = []
                for uid, employee in self.employee_info.items():
                    if employee.get_job() == job:
                        count += 1
                        employees.append(f'{employee.get_uid()} - {employee.get_name()}')
                if count > 0:
                    print(f'目前普通员工共有{count}人:\n{employees}')
                else:
                    print('目前没有普通员工')
            elif job == 'T':
                count = 0
                employees = []
                for uid, employee in self.employee_info.items():
                    if employee.get_job() == job:
                        count += 1
                        employees.append(f'{employee.get_uid()} - {employee.get_name()}')
                if count > 0:
                    print(f'目前组长共有{count}人:\n{employees}')
                else:
                    print('目前公司没有组长')
            elif job == 'M':
                count = 0
                employees = []
                for uid, employee in self.employee_info.items():
                    if employee.get_job() == job:
                        count += 1
                        employees.append(f'{employee.get_uid()} - {employee.get_name()}')
                if count > 0:
                    print(f'目前经理共有{count}人:\n{employees}')
                else:
                    print('目前公司没有经理')
            else:
                print('目前公司没有这个职位')
    def up_grade(self):
        while True:
            uid = int(input('请输入工号:'))
            if uid in self.employee_info:
                break
            else:
                print('该工号不存在')
        print(f'{self.employee_info[uid].get_name()}, 工号:{uid}, 当前职位:{self.employee_info[uid].get_job()}{self.employee_info[uid].get_grade()},当前薪资:{self.employee_info[uid].get_salary()}')
        old_salary = self.employee_info[uid].get_salary()
        add_grade = int(input('请输入要增加的级数:'))
        print('升级成功!')
        if self.employee_info[uid].get_job() == 'E':
            if self.employee_info[uid].get_grade() + add_grade > 10:
                self.employee_info[uid].job = 'T'
                self.employee_info[uid].grade = 1
            else:
                self.employee_info[uid].grade += add_grade
        elif self.employee_info[uid].get_job() == 'T':
            if self.employee_info[uid].get_grade() + add_grade > 6:
                self.employee_info[uid].job = 'M'
                self.employee_info[uid].grade = 1
            else:
                self.employee_info[uid].grade += add_grade
        elif self.employee_info[uid].get_job() == 'M':
            if self.employee_info[uid].get_grade() + add_grade > 3:
                print('该员工已经是最高级别了')
                return
            else:
                self.employee_info[uid].grade += add_grade
        print(f'{self.employee_info[uid].get_name()}, 工号:{uid}, 升级后职位:{self.employee_info[uid].get_job()}{self.employee_info[uid].get_grade()},升级后薪资:{self.employee_info[uid].get_salary()}(+{self.employee_info[uid].get_salary() - old_salary})')
    def down_grade(self):
        while True:
            uid = int(input('请输入工号:'))
            if uid in self.employee_info:
                break
            else:
                print('该工号不存在')
        print(f'{self.employee_info[uid].get_name()}, 工号:{uid}, 当前职位:{self.employee_info[uid].get_job()}{self.employee_info[uid].get_grade()},当前薪资:{self.employee_info[uid].get_salary()}')
        old_salary = self.employee_info[uid].get_salary()
        down_grade = int(input('请输入要降低的级数:'))
        print('降级成功!')
        if self.employee_info[uid].get_job() == 'E':
            if self.employee_info[uid].get_grade() - down_grade < 1:
                print('该员工已经是最低级别了')
                return
            else:
                self.employee_info[uid].grade -= down_grade
        elif self.employee_info[uid].get_job() == 'T':
            if self.employee_info[uid].get_grade() - down_grade < 1:
                self.employee_info[uid].job = 'E'
                self.employee_info[uid].grade = 10
            else:
                self.employee_info[uid].grade -= down_grade
        elif self.employee_info[uid].get_job() == 'M':
            if self.employee_info[uid].get_grade() - down_grade < 1:
                self.employee_info[uid].job = 'T'
                self.employee_info[uid].grade = 6
            else:
                self.employee_info[uid].grade -= down_grade
        print(f'{self.employee_info[uid].get_name()}, 工号:{uid}, 降级后职位:{self.employee_info[uid].get_job()}{self.employee_info[uid].get_grade()},降级后薪资:{self.employee_info[uid].get_salary()}(-{old_salary - self.employee_info[uid].get_salary()})')
main = Main()
while True:
    choice = int(input('1、录入; 2、查询; 3、升级; 4、降级: 5、退出:'))
    if choice == 1:
        main.input_info()
    elif choice == 2:
        main.search_info()
    elif choice == 3:
        main.up_grade()
    elif choice == 4:
        main.down_grade()
    elif choice == 5:
        break
    else:
        print('输入错误')






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

使用道具 举报

发表于 2025-4-10 14:57:09 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-7 17:12:15 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-6 20:30:56 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-4 00:40:16 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
Python 的多态性主要通过 鸭子类型(Duck Typing) 体现。它不强制要求对象继承自某个特定类,而是关注对象的行为(即方法或属性的存在性)。
例如,只要一个对象实现了 __len__() 方法,它就可以被 len() 函数调用;只要实现了 __add__() 方法,就能使用 + 运算符。这种基于行为而非继承的多态性,使得代码更加灵活。
第 1 题的答案是:
代码复用性:同一接口可以处理多种类型的对象。

扩展性:新增类时无需修改现有代码,只需实现约定的接口。

解耦:调用方依赖抽象行为,而非具体实现,降低了模块间的耦合度。
第 2 题的答案是:
是的。这种现象是 运算符重载 的体现,而运算符重载本质上是一种多态。

1 + 1 调用 int 的 __add__,结果为 2。

'1' + '1' 调用 str 的 __add__,结果为 '11'。
Python 根据操作数的类型动态选择对应的方法,这正是多态的特性。
第 3 题的答案是:
鸭子类型的名字来源于谚语:

"If it walks like a duck and quacks like a duck, then it must be 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):
        if self.job == 'E':
            salary = 3000 + 500 * self.grade + 50 * self.year
        elif self.job == 'T':
            salary = 4000 + 800 * self.grade + 100 * self.year
        elif self.job == 'M':
            salary = 5000 + 1000 * self.grade + 1000 * self.year
        return salary
class Management:
    def __init__(self):
        self.members = {}
        self.uid = 10000
        
    def welcome(self):
        while True:
            choice = input("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
            if choice == '1':
                self.entry()
            elif choice == '2':
                self.query()
            elif choice == '3':
                self.upgrade()
            elif choice == '4':
                self.degrade()
            elif choice == '5':
                break
            
    def entry(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        year = int(input("工龄:"))
        grade = int(input("级别:"))
        if job == 'E':
            while True:
                if 1 <= grade <= 10:
                    break
                else:
                    grade = int(input("该职位最高级别为10,请重新录入级别:"))
        elif job == 'T':
            while True:
                if 1 <= grade <= 6:
                    break
                else:
                    grade = int(input("该职位最高级别为6,请重新录入级别:"))
        elif job == 'M':
            while True:
                if 1 <= grade <= 3:
                    break
                else:
                    grade = int(input("该职位最高级别为3,请重新录入级别:"))
        staff_member = Staff(name,job,grade,year,self.uid)
        self.members[self.uid] = staff_member
        print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{staff_member.salary()}")
        self.uid += 1

    def query(self):
        choice = input("1.员工查询;2.职位查询:")
        if choice == '1':
            uid = int(input("请输入工号:"))
            if uid in self.members:
                print(f"姓名:{self.members[uid].get_name()}")
                print(f"职位:{self.members[uid].get_job()}")
                print(f"级别:{self.members[uid].get_grade()}")
                print(f"工龄:{self.members[uid].get_year()}")
                print(f"薪资:{self.members[uid].salary()}")
            else:
                print("该工号不存在!")
        elif choice == '2':
            job = input(f"职位(E.普通员工;T.组长;M.经理):")
            if job == 'E':
                E_num = 0
                for each in self.members:
                    if self.members[each].get_job() == 'E':
                        E_num += 1
                if E_num == 0:
                    print("目前公司没有普通员工!")
                else:
                    print(f"目前普通员工共有 {E_num} 人:")
                    for each in self.members:
                        if self.members[each].get_job() == 'E':
                            print(f"{self.members[each].get_uid()} - {self.members[each].get_name()}")
            elif job == 'T':
                T_num = 0
                for each in self.members:
                    if self.members[each].get_job() == 'T':
                        T_num += 1
                if T_num == 0:
                    print("目前公司没有组长!")
                else:
                    print(f"目前组长共有 {T_num} 人:")
                    for each in self.members:
                        if self.members[each].get_job() == 'T':
                            print(f"{self.members[each].get_uid()} - {self.members[each].get_name()}")
            elif job == 'M':
                M_num = 0
                for each in self.members:
                    if self.members[each].get_job() == 'M':
                        M_num += 1
                if M_num == 0:
                    print("目前公司没有经理!")
                else:
                    print(f"目前经理共有 {M_num} 人:")
                    for each in self.members:
                        if self.members[each].get_job() == 'M':
                            print(f"{self.members[each].get_uid()} - {self.members[each].get_name()}")

    def upgrade(self):
        uid = int(input("请输入工号:"))
        if uid in self.members:
            print(f"{self.members[uid].get_name()},工号:{self.members[uid].get_uid()},当前职位:{self.members[uid].get_job()}{self.members[uid].get_grade()},当前薪资:{self.members[uid].salary()}")
        else:
            print("该工号不存在!")
            return
        variation = int(input("请输入需要增加的级数:"))
        salary = self.members[uid].salary()
        if self.members[uid].job == 'E':
            if variation + self.members[uid].grade > 10:
                self.members[uid].job = 'T'
                self.members[uid].grade = 1
            else:
                self.members[uid].grade += variation
        elif self.members[uid].job == 'T':
            if variation + self.members[uid].grade > 6:
                self.members[uid].job = 'M'
                self.members[uid].grade = 1
            else:
                self.members[uid].grade += variation
        elif self.members[uid].job == 'M':
            self.members[uid].grade += variation
        print("升级成功!")
        print(f"{self.members[uid].get_name()},工号:{self.members[uid].get_uid()},升级后职位:{self.members[uid].get_job()}{self.members[uid].get_grade()},升级后薪资:{self.members[uid].salary()}(+{self.members[uid].salary()-salary})")
      

    def degrade(self):
        uid = int(input("请输入工号:"))
        if uid in self.members:
            print(f"{self.members[uid].get_name()},工号:{self.members[uid].get_uid()},当前职位:{self.members[uid].get_job()}{self.members[uid].get_grade()},当前薪资:{self.members[uid].salary()}")
        else:
            print("该工号不存在!")
            return
        variation = int(input("请输入需要减少的级数:"))
        salary = self.members[uid].salary()
        if self.members[uid].job == 'E':
            self.members[uid].grade -= variation
        elif self.members[uid].job == 'T':
            if self.members[uid].grade - variation < 1:
                self.members[uid].job = 'E'
                self.members[uid].grade = 10
            else:
                self.members[uid].grade -= variation
        elif self.members[uid].job == 'M':
            if self.members[uid].grade - variation < 1:
                self.members[uid].job = 'T'
                self.members[uid].grade = 6
        print("降级成功!")
        print(f"{self.members[uid].get_name()},工号:{self.members[uid].get_uid()},降级后职位:{self.members[uid].get_job()}{self.members[uid].get_grade()},降级后薪资:{self.members[uid].salary()}(-{salary-self.members[uid].salary()})")
      
def main():
    m = Management()
    m.welcome()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-3 14:15:21 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-30 06:51:43 | 显示全部楼层
请回复您的答案^_^

-------- 问答题 --------

第 0 题的答案是:
通过继承,或者相同的方法名。

第 1 题的答案是:
简洁。

第 2 题的答案是:
可以。


第 3 题的答案是:
如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。


第 4 题的答案是:
增强了内聚。


第 5 题的答案是:
不是

-------- 动动手 --------

请将第 0 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-21 10:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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