鱼C论坛

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

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

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

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

第 0 题的答案是:
变量不同,反馈也不同
第 1 题的答案是:
方便代码扩展
第 2 题的答案是:
可以
第 3 题的答案是:

第 4 题的答案是:
增强了内聚,降低耦合
第 5 题的答案是:

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

请将第 0 题的代码写在下方:
class Member:
    def __init__(self,name,grade,year,uid):
        self.name = name
        self.grade = grade
        self.year = year
        self.uid = uid
class Employee(Member):
    job = 'E'
class Teamleader(Member):
    job = 'T'
class Manager(Member):
    job = 'M'
class Main:
    message_d = {}
    uid = 10000
    message_d_job = {'E':[],'T':[],'M':[]}
    def choose(self):
        while True:
            function = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
            if function == '1':
                self.enlist()
            elif function == '2':
                self.get()
            elif function == '3':
                self.upgrate()
            elif function == '4':
                self.downgrate()
            else:
                print("已退出")
                break
    def enlist(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        while job not in ('E','T','M'):
            job = input("输入错误,请重试:")
        year = int(input("工龄:"))
        grade = int(input("级别:"))
        if job == 'E':
            self.message_d[self.uid] = Employee(name,grade,year,self.uid)
        elif job == 'T':
            self.message_d[self.uid] = Teamleader(name,grade,year,self.uid)
        else:
            self.message_d[self.uid] = Manager(name,grade,year,self.uid)
        self.message_d_job[job].append((self.uid,name))
        self.salary(self.uid)
        print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{self.message_d[self.uid].salary}")
        self.uid += 1
    def get(self):
        sub_function = input("1.员工查询;2.职位查询:")
        if sub_function == '1':
            uid = int(input("请输入工号:"))
            if uid in self.message_d:
                self.get_name(uid)
                self.get_job(uid)
                self.get_grade(uid)
                self.get_year(uid)
                salary = self.salary(uid)
                print(f'薪资:{salary}')
            else:
                print("该工号不存在!")
        else:
            job = input("职位(E.普通员工;T.组长;M.经理):")
            self.get_uid(job)
    def get_uid(self,job):
        element = self.message_d_job[job]
        length = len(element)
        if job == 'E':
            member = '普通员工'
        elif job == 'T':
            member = '组长'
        else:
            member = '经理'
        print(f"目前{member}共有{length}人:")
        for i in element:
            print(i[0],' - ',i[1])
    def get_name(self,uid):
        print('姓名:',self.message_d[uid].name)
    def get_job(self,uid):
        print("职位:",self.message_d[uid].job)
    def get_grade(self,uid):
        print("级别:",self.message_d[uid].grade)
    def get_year(self,uid):
        print("工龄:",self.message_d[uid].year)
    def salary(self,uid):
        job = self.message_d[uid].job
        year = self.message_d[uid].year
        grade = self.message_d[uid].grade
        if job == 'E':
            func = lambda x,y:3000 + 500 * y + 50 * x
        elif job == 'T':
            func = lambda x,y:4000 + 800 * y + 100 * x
        else:
            func = lambda x,y:5000 + 1000 * ( x + y )
        salary = func(year,grade)
        self.message_d[uid].salary = salary
        return salary
    def upgrate(self):
        uid = int(input("请输入工号:"))
        _ = self.message_d[uid]
        if uid in self.message_d:
            print(f"{_.name},工号:{_.uid},当前职位:{_.job}{_.grade},当前薪资:{_.salary}")
            up = int(input("请输入需要增加的级数:"))
            a = up + _.grade
            job = _.job
            if job == 'E' and a > 10:
                a = 1
                job = 'T'
            elif job == 'T' and a > 6:
                a = 1
                job = 'M'
            elif job == 'M' and a > 3:
                print("超过最高职位,无法执行")
            _.grade = a
            _.job = job
            _.salary = self.salary(uid)
            print("升级成功!")
            print(f"{_.name},工号:{_.uid},升级后职位:{_.job}{_.grade},升级后薪资:{_.salary}")
        else:
            print("该工号不存在")
    def downgrate(self):
        uid = int(input("请输入工号:"))
        _ = self.message_d[uid]
        if uid in self.message_d:
            print(f"{_.name},工号:{_.uid},当前职位:{_.job}{_.grade},当前薪资:{_.salary}")
            down = int(input("请输入需要减少的级数:"))
            a = _.grade - down
            job = _.job
            if job == 'E' and a <= 0:
                print("低于最低职位,无法执行!")
            elif job == 'T' and a <= 0:
                a = 10
                job = 'E'
            elif job == 'M' and a <= 0:
                a = 6
                job = 'T'
            _.grade = a
            _.job = job
            _.salary = self.salary(uid)
            print("升级成功!")
            print(f"{_.name},工号:{_.uid},降级后职位:{_.job}{_.grade},降级后薪资:{_.salary}")
        else:
            print("该工号不存在!")
def main():
    m = Main()
    m.choose()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-6-24 19:58:51 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2026-6-22 14:58:29 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:同一个符号、函数不同功能


第 1 题的答案是:灵活


第 2 题的答案是:可以


第 3 题的答案是:不知道


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


第 5 题的答案是:不属于,这就是一个功能加法


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

请将第 0 题的代码写在下方:
# 员工信息
class Yuangong:
    def __init__(self, uid, name, job, grade, year):
        self.uid = uid
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.salary = 0

    #薪资计算
    def salary(self):
        if job == "E":
            sa = 3000 + 500 * self.grade + 50 * self.year
        if job == "T":
            sa = 4000 + 800 * self.grade + 100 * self.year        
        if job == "M":
            sa = 5000 + 1000 * (self.grade + self.year)
        return sa

class Guanli(Yuangong):
    def __init__(self):
        self.yuangong_xinxi = {}
        self.uid = 10000

    #录入功能
    def luru(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        while job not in ("E", "T", "M"):
            job = input("请重新录入职位(E.普通员工;T.组长;M.经理):")

        grade = int(input("级别:") )
        while job == 'E' and not (grade > 0 and grade <= 10):
            grade = int(input("该职位最高级别为10,请重新录入级别:") )
        while job == 'T' and not (grade > 0 and grade <= 6):
            grade = int(input("该职位最高级别为6,请重新录入级别:") )
        while job == 'M' and not (grade > 0 and grade <= 3):
            grade = int(input("该职位最高级别为3,请重新录入级别:") )

        year = int(input("工龄:") )
        yuangong = Yuangong(self.uid, name, job, grade, year)
        sal = yuangong.salary()
        #yuangong.salary = sal
        self.yuangong_xinxi[self.uid] = yuangong
        print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{sal}")
        self.uid += 1

    #查询功能
    #def chaxun(self):




def main():
    guanli = Guanli()
    a = 0
    while a != '5':
        a = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
        if a == '1':
            guanli.luru()
        if a == '5':
            break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-6-16 23:13:54 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:方法重写

第 1 题的答案是:多态最核心的优势,用一句话概括就是:它消灭了“满屏的 if...elif...else”,让你写的代码“对扩展开放,对修改封闭”(开闭原则)。

第 2 题的答案是:可以

第 3 题的答案是:如果它走路像鸭子,叫声像鸭子,那它就是一只鸭子

第 4 题的答案是:鸭子类型同时做到了“降低耦合度”和“增强内聚度”

第 5 题的答案是:不属于

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

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

使用道具 举报

发表于 2026-6-16 17:56:17 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:
class 普通员工:
    最高级别 = 10

    def __init__(self, 工号, 姓名, 级别, 工龄):
        self.工号 = 工号
        self.姓名 = 姓名
        self.级别 = 级别
        self.工龄 = 工龄
        self.职位 = 'E'

    def 获取工号(self):  return self.工号
    def 获取姓名(self):  return self.姓名
    def 获取职位(self):  return self.职位
    def 获取级别(self):  return self.级别
    def 获取工龄(self):  return self.工龄

    def 工资(self):
        return 3000 + 500 * self.级别 + 50 * self.工龄


class 组长(普通员工):
    最高级别 = 6

    def __init__(self, 工号, 姓名, 级别, 工龄):
        super().__init__(工号, 姓名, 级别, 工龄)
        self.职位 = 'T'

    def 工资(self):
        return 4000 + 800 * self.级别 + 100 * self.工龄


class 经理(组长):
    最高级别 = 3

    def __init__(self, 工号, 姓名, 级别, 工龄):
        super().__init__(工号, 姓名, 级别, 工龄)
        self.职位 = 'M'

    def 工资(self):
        return 5000 + 1000 * (self.级别 + self.工龄)


class 员工管理系统:
    职位顺序 = ['E', 'T', 'M']
    职位名称 = {'E': '普通员工', 'T': '组长', 'M': '经理'}
    职位对应类 = {'E': 普通员工, 'T': 组长, 'M': 经理}

    def __init__(self):
        self.员工库 = {}
        self.下一个工号 = 10000

    def 确认工号存在(self):
        工号 = int(input("请输入工号: "))
        while 工号 not in self.员工库:
            工号 = int(input("该工号不存在!请重新输入: "))
        return 工号

    def 确认级别合法(self, 职位):
        最高 = self.职位对应类[职位].最高级别
        级别 = int(input(f"级别(最高{最高}级): "))
        while 级别 < 1 or 级别 > 最高:
            级别 = int(input(f"超出范围!请输入1-{最高}: "))
        return 级别

    def 升职(self, 员工):
        当前索引 = self.职位顺序.index(员工.职位)
        新职位 = self.职位顺序[当前索引 + 1]
        新类 = self.职位对应类[新职位]
        新员工 = 新类(员工.工号, 员工.姓名, 1, 员工.工龄)
        self.员工库[员工.工号] = 新员工
        print(f"  -> 恭喜升职为{self.职位名称[新职位]}!级别重置为1级")
        return 新员工

    def 降职(self, 员工):
        当前索引 = self.职位顺序.index(员工.职位)
        新职位 = self.职位顺序[当前索引 - 1]
        新类 = self.职位对应类[新职位]
        最高 = 新类.最高级别
        新员工 = 新类(员工.工号, 员工.姓名, 最高, 员工.工龄)
        self.员工库[员工.工号] = 新员工
        print(f"  -> 已降为{self.职位名称[新职位]},级别为{最高}级")
        return 新员工

    def 打印员工信息(self, 员工):
        print(f"  姓名: {员工.姓名}")
        print(f"  工号: {员工.工号}")
        print(f"  职位: {self.职位名称[员工.职位]}")
        print(f"  级别: {员工.级别}级")
        print(f"  工龄: {员工.工龄}年")
        print(f"  薪资: &#165;{员工.工资()}")


    def 录入(self):
        工号 = self.下一个工号
        姓名 = input("姓名: ")
        print("E.普通员工  T.组长  M.经理")
        职位 = input("职位: ").upper()
        while 职位 not in self.职位对应类:
            职位 = input("输入错误,请选E/T/M: ").upper()
        工龄 = int(input("工龄: "))
        级别 = self.确认级别合法(职位)

        新员工 = self.职位对应类[职位](工号, 姓名, 级别, 工龄)
        self.员工库[工号] = 新员工
        self.下一个工号 += 1
        print(f"\n--- 录入成功 ---")
        self.打印员工信息(新员工)
        print()

    def 查询(self):
        选择 = input("1.员工查询  2.职位查询: ")
        print()

        if 选择 == '1':
            工号 = self.确认工号存在()
            print()
            self.打印员工信息(self.员工库[工号])
            print()

        elif 选择 == '2':
            print("E.普通员工  T.组长  M.经理")
            职位 = input("查询职位: ").upper()
            while 职位 not in self.职位对应类:
                职位 = input("输入错误,请选E/T/M: ").upper()

            名单 = []
            for 工号, 员工 in self.员工库.items():
                if 员工.职位 == 职位:
                    名单.append(f"{工号}-{员工.姓名}")

            print(f"\n{self.职位名称[职位]}共{len(名单)}人:")
            for 行 in 名单:
                print(f"  {行}")
            print()

    def 升级(self):
        工号 = self.确认工号存在()
        员工 = self.员工库[工号]
        增加几级 = int(input(f"当前{员工.级别}级,要升几级: "))

        新级别 = 员工.级别 + 增加几级
        当前职位 = 员工.职位
        最高 = self.职位对应类[当前职位].最高级别

        print()

        while 新级别 > 最高 and 当前职位 != 'M':
            员工 = self.升职(员工)
            当前职位 = 员工.职位
            最高 = self.职位对应类[当前职位].最高级别
            新级别 = 1 + (新级别 - 1)   # 超出部分继续算

        if 新级别 > 最高:
            员工.级别 = 最高
            print(f"  (已是最高职位,级别封顶为{最高}级)")
        else:
            员工.级别 = 新级别
            print(f"  升级到{新级别}级")

        print()
        self.打印员工信息(员工)
        print()

    def 降级(self):
        工号 = self.确认工号存在()
        员工 = self.员工库[工号]
        减少几级 = int(input(f"当前{员工.级别}级,要降几级: "))

        新级别 = 员工.级别 - 减少几级
        当前职位 = 员工.职位

        print()

        while 新级别 < 1 and 当前职位 != 'E':
            员工 = self.降职(员工)
            当前职位 = 员工.职位
            最高 = self.职位对应类[当前职位].最高级别
            新级别 = 最高 - (1 - 新级别)   # 超出部分继续扣

        if 新级别 < 1:
            员工.级别 = 1
            print(f"  (已是最低职位,级别封底为1级)")
        else:
            员工.级别 = 新级别
            print(f"  降级到{新级别}级")

        print()
        self.打印员工信息(员工)
        print()



    def 界面(self):
        print("=" * 30)
        print("   已进入员工管理程序!")
        print("=" * 30)

        选项 = 0
        while 选项 != 5:
            选项 = input("\n1.录入  2.查询  3.升级  4.降级  5.退出\n请选择: ")
            print()

            if 选项 == '1':   self.录入()
            elif 选项 == '2': self.查询()
            elif 选项 == '3': self.升级()
            elif 选项 == '4': self.降级()
            elif 选项 == '5': print("退出程序,再见!")
            else:             print("输入有误,请选1-5")



if __name__ == '__main__':
    系统 = 员工管理系统()
    系统.界面()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-6-16 11:29:53 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2026-6-16 11:05:58 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:
Python通过方法重写和鸭子类型,使同一操作作用于不同对象时产生不同结果,从而体现多态特性。
Python 实现多态有两条路径:
依靠继承 + 方法重写:子类继承父类并重写同名方法,同一方法调用产生不同结果;
依靠鸭子类型:无需继承,只要对象拥有对应同名方法,同一操作就能适配不同对象,同样达成多态效果。

第 1 题的答案是:
多态使程序面向接口编程,而不是面向具体实现编程,从而降低代码耦合度,提高扩展性和维护性。

第 2 题的答案是:
可以称为多态。因为同一个运算符“+”作用于不同类型对象时表现出不同的行为,这属于运算符多态(运算符重载)的一种体现。


第 3 题的答案是:
当我们看到一只鸟,它走起路来像鸭子,游起泳来像鸭子,叫起来也像鸭子,那这只鸟就可以称之为鸭子。
对应编程含义
不关心对象真实属于哪个类、有没有继承关系,只看它具备的行为(方法);只要对象拥有函数需要调用的同名方法,就可以当作符合要求的对象使用,这就是鸭子类型的核心逻辑。


第 4 题的答案是:
鸭子类型通过只关注对象是否具备所需方法,而不关注对象的具体类型,降低了模块之间的依赖关系,因此主要体现为降低耦合度。



第 5 题的答案是:
不属于,函数接收参数是一样的int类型,并没有因传入不同的对象而产生差异化的行为。

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

请将第 0 题的代码写在下方:
class Employee:
&#160; &#160; max_grade = 10
&#160; &#160; job_name = "E"

&#160; &#160; def __init__(self, name, grade, year, uid):
&#160; &#160; &#160; &#160; self.name = name
&#160; &#160; &#160; &#160; self.job = self.job_name
&#160; &#160; &#160; &#160; self.grade = grade
&#160; &#160; &#160; &#160; self.year = year
&#160; &#160; &#160; &#160; self.uid = uid

&#160; &#160; def get_uid(self):
&#160; &#160; &#160; &#160; return self.uid

&#160; &#160; def get_name(self):
&#160; &#160; &#160; &#160; return self.name

&#160; &#160; def get_job(self):
&#160; &#160; &#160; &#160; return self.job

&#160; &#160; def get_grade(self):
&#160; &#160; &#160; &#160; return self.grade

&#160; &#160; def get_year(self):
&#160; &#160; &#160; &#160; return self.year

&#160; &#160; def salary(self):
&#160; &#160; &#160; &#160; return 3000 + 500 * self.grade + 50 * self.year

class Teamleader(Employee):
&#160; &#160; max_grade = 6
&#160; &#160; job_name = "T"

&#160; &#160; def salary(self):
&#160; &#160; &#160; &#160; return 4000 + 800 * self.grade + 100 * self.year

class Manager(Employee):
&#160; &#160; max_grade = 3
&#160; &#160; job_name = "M"

&#160; &#160; def salary(self):
&#160; &#160; &#160; &#160; return 5000 + 1000 * (self.grade + self.year)

employees = []
next_uid = 10000

def create_employee(name, job, grade, year, uid):
&#160; &#160; if job == "E":
&#160; &#160; &#160; &#160; return Employee(name, grade, year, uid)
&#160; &#160; elif job == "T":
&#160; &#160; &#160; &#160; return Teamleader(name, grade, year, uid)
&#160; &#160; elif job == "M":
&#160; &#160; &#160; &#160; return Manager(name, grade, year, uid)
&#160; &#160; else:
&#160; &#160; &#160; &#160; return None

def get_max_grade(job):
&#160; &#160; if job == "E":
&#160; &#160; &#160; &#160; return Employee.max_grade
&#160; &#160; elif job == "T":
&#160; &#160; &#160; &#160; return Teamleader.max_grade
&#160; &#160; elif job == "M":
&#160; &#160; &#160; &#160; return Manager.max_grade



def input_job():
&#160; &#160; while True:
&#160; &#160; &#160; &#160; job = input("职位(E.普通员工;T.组长;M.经理):").strip().upper()
&#160; &#160; &#160; &#160; if job in ["E", "T", "M"]:
&#160; &#160; &#160; &#160; &#160; &#160; return job
&#160; &#160; &#160; &#160; print("职位输入错误,请重新输入!")


def input_grade(job):
&#160; &#160; max_grade = get_max_grade(job)
&#160; &#160; while True:
&#160; &#160; &#160; &#160; try:
&#160; &#160; &#160; &#160; &#160; &#160; grade = int(input("级别:"))
&#160; &#160; &#160; &#160; &#160; &#160; if 1 <= grade <= max_grade:
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; return grade
&#160; &#160; &#160; &#160; &#160; &#160; print(f"该职位最高级别为{max_grade},请重新录入级别:", end="")
&#160; &#160; &#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; &#160; &#160; print("级别必须输入数字,请重新输入!")

def add_employee():
&#160; &#160; global next_uid
&#160; &#160; name = input("姓名:")
&#160; &#160; job = input_job()
&#160; &#160; # 工龄容错
&#160; &#160; while True:
&#160; &#160; &#160; &#160; try:
&#160; &#160; &#160; &#160; &#160; &#160; year = int(input("工龄:"))
&#160; &#160; &#160; &#160; &#160; &#160; if year >= 0:
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; break
&#160; &#160; &#160; &#160; &#160; &#160; print("工龄不能为负数!")
&#160; &#160; &#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; &#160; &#160; print("工龄必须输入数字!")
&#160; &#160; grade = input_grade(job)
&#160; &#160; emp = create_employee(name, job, grade, year, next_uid)
&#160; &#160; employees.append(emp)
&#160; &#160; print(f"录入成功!姓名:{emp.name},工号:{emp.uid},薪资:{emp.salary()}")
&#160; &#160; next_uid += 1

def find_by_uid(uid):
&#160; &#160; for emp in employees:
&#160; &#160; &#160; &#160; if emp.uid == uid:
&#160; &#160; &#160; &#160; &#160; &#160; return emp
&#160; &#160; return None

def search_employee():
&#160; &#160; try:
&#160; &#160; &#160; &#160; uid = int(input("请输入工号:"))
&#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; print("工号必须是数字!")
&#160; &#160; &#160; &#160; return
&#160; &#160; emp = find_by_uid(uid)
&#160; &#160; if emp is None:
&#160; &#160; &#160; &#160; print("该工号不存在!")
&#160; &#160; else:
&#160; &#160; &#160; &#160; print(f"姓名:{emp.name}")
&#160; &#160; &#160; &#160; print(f"职位:{emp.job}")
&#160; &#160; &#160; &#160; print(f"级别:{emp.grade}")
&#160; &#160; &#160; &#160; print(f"工龄:{emp.year}")
&#160; &#160; &#160; &#160; print(f"薪资:{emp.salary()}")

def search_job():
&#160; &#160; job = input_job()
&#160; &#160; result = [emp for emp in employees if emp.job == job]
&#160; &#160; job_text = {"E": "普通员工", "T": "组长", "M": "经理"}
&#160; &#160; if len(result) == 0:
&#160; &#160; &#160; &#160; print(f"目前公司没有{job_text[job]}!")
&#160; &#160; else:
&#160; &#160; &#160; &#160; print(f"目前{job_text[job]}共有 {len(result)} 人:")
&#160; &#160; &#160; &#160; for emp in result:
&#160; &#160; &#160; &#160; &#160; &#160; print(f"{emp.uid} - {emp.name}")

def search():
&#160; &#160; choice = input("1.员工查询;2.职位查询:").strip()
&#160; &#160; if choice == "1":
&#160; &#160; &#160; &#160; search_employee()
&#160; &#160; elif choice == "2":
&#160; &#160; &#160; &#160; search_job()
&#160; &#160; else:
&#160; &#160; &#160; &#160; print("输入错误!")

def promote(emp):
&#160; &#160; if emp.job == "E":
&#160; &#160; &#160; &#160; return Teamleader(emp.name, 1, emp.year, emp.uid)
&#160; &#160; elif emp.job == "T":
&#160; &#160; &#160; &#160; return Manager(emp.name, 1, emp.year, emp.uid)
&#160; &#160; else:
&#160; &#160; &#160; &#160; # 经理无法再升职,返回自身
&#160; &#160; &#160; &#160; print("当前已是最高职位经理,无法继续升职!")
&#160; &#160; &#160; &#160; return emp



def demote(emp):
&#160; &#160; if emp.job == "M":
&#160; &#160; &#160; &#160; return Teamleader(emp.name, Teamleader.max_grade, emp.year, emp.uid)
&#160; &#160; elif emp.job == "T":
&#160; &#160; &#160; &#160; return Employee(emp.name, Employee.max_grade, emp.year, emp.uid)
&#160; &#160; else:
&#160; &#160; &#160; &#160; # 普通员工无法再降职
&#160; &#160; &#160; &#160; print("当前已是最低职位普通员工,无法继续降职!")
&#160; &#160; &#160; &#160; return emp

def upgrade():
&#160; &#160; try:
&#160; &#160; &#160; &#160; uid = int(input("请输入工号:"))
&#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; print("工号必须是数字!")
&#160; &#160; &#160; &#160; return
&#160; &#160; emp = find_by_uid(uid)
&#160; &#160; if emp is None:
&#160; &#160; &#160; &#160; print("该工号不存在!")
&#160; &#160; &#160; &#160; return
&#160; &#160; old_salary = emp.salary()
&#160; &#160; print(f"{emp.name},工号:{emp.uid},当前职位:{emp.job}{emp.grade},当前薪资:{old_salary}")
&#160; &#160; # 输入增加级数容错
&#160; &#160; try:
&#160; &#160; &#160; &#160; num = int(input("请输入需要增加的级数:"))
&#160; &#160; &#160; &#160; if num <= 0:
&#160; &#160; &#160; &#160; &#160; &#160; print("增加级数必须大于0!")
&#160; &#160; &#160; &#160; &#160; &#160; return
&#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; print("级数必须输入数字!")
&#160; &#160; &#160; &#160; return
&#160; &#160; # 先计算升级后理论等级,不直接修改原对象
&#160; &#160; target_grade = emp.grade + num
&#160; &#160; idx = employees.index(emp)
&#160; &#160; if target_grade > emp.max_grade:
&#160; &#160; &#160; &#160; # 溢出,升职
&#160; &#160; &#160; &#160; new_emp = promote(emp)
&#160; &#160; &#160; &#160; employees[idx] = new_emp
&#160; &#160; &#160; &#160; emp = new_emp
&#160; &#160; else:
&#160; &#160; &#160; &#160; # 未溢出,仅修改等级
&#160; &#160; &#160; &#160; emp.grade = target_grade
&#160; &#160; new_salary = emp.salary()
&#160; &#160; diff = new_salary - old_salary
&#160; &#160; print("升级成功!")
&#160; &#160; print(f"{emp.name},工号:{emp.uid},升级后职位:{emp.job}{emp.grade},升级后薪资:{new_salary}(+{diff})")

def downgrade():
&#160; &#160; try:
&#160; &#160; &#160; &#160; uid = int(input("请输入工号:"))
&#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; print("工号必须是数字!")
&#160; &#160; &#160; &#160; return
&#160; &#160; emp = find_by_uid(uid)
&#160; &#160; if emp is None:
&#160; &#160; &#160; &#160; print("该工号不存在!")
&#160; &#160; &#160; &#160; return
&#160; &#160; old_salary = emp.salary()
&#160; &#160; print(f"{emp.name},工号:{emp.uid},当前职位:{emp.job}{emp.grade},当前薪资:{old_salary}")
&#160; &#160; try:
&#160; &#160; &#160; &#160; num = int(input("请输入需要减少的级数:"))
&#160; &#160; &#160; &#160; if num <= 0:
&#160; &#160; &#160; &#160; &#160; &#160; print("减少级数必须大于0!")
&#160; &#160; &#160; &#160; &#160; &#160; return
&#160; &#160; except ValueError:
&#160; &#160; &#160; &#160; print("级数必须输入数字!")
&#160; &#160; &#160; &#160; return
&#160; &#160; target_grade = emp.grade - num
&#160; &#160; idx = employees.index(emp)
&#160; &#160; if target_grade < 1:
&#160; &#160; &#160; &#160; # 低于1级,降职
&#160; &#160; &#160; &#160; new_emp = demote(emp)
&#160; &#160; &#160; &#160; employees[idx] = new_emp
&#160; &#160; &#160; &#160; emp = new_emp
&#160; &#160; else:
&#160; &#160; &#160; &#160; emp.grade = target_grade
&#160; &#160; new_salary = emp.salary()
&#160; &#160; diff = new_salary - old_salary
&#160; &#160; # 匹配截图格式,负数带括号
&#160; &#160; if diff >= 0:
&#160; &#160; &#160; &#160; diff_str = f"(+{diff})"
&#160; &#160; else:
&#160; &#160; &#160; &#160; diff_str = f"({diff})"
&#160; &#160; print("降级成功!")
&#160; &#160; print(f"{emp.name},工号:{emp.uid},降级后职位:{emp.job}{emp.grade},降级后薪资:{new_salary}{diff_str}")



def main():
&#160; &#160; while True:
&#160; &#160; &#160; &#160; print("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
&#160; &#160; &#160; &#160; choice = input("请选择功能:").strip()
&#160; &#160; &#160; &#160; if choice == "1":
&#160; &#160; &#160; &#160; &#160; &#160; add_employee()
&#160; &#160; &#160; &#160; elif choice == "2":
&#160; &#160; &#160; &#160; &#160; &#160; search()
&#160; &#160; &#160; &#160; elif choice == "3":
&#160; &#160; &#160; &#160; &#160; &#160; upgrade()
&#160; &#160; &#160; &#160; elif choice == "4":
&#160; &#160; &#160; &#160; &#160; &#160; downgrade()
&#160; &#160; &#160; &#160; elif choice == "5":
&#160; &#160; &#160; &#160; &#160; &#160; print("程序退出!")
&#160; &#160; &#160; &#160; &#160; &#160; break
&#160; &#160; &#160; &#160; else:
&#160; &#160; &#160; &#160; &#160; &#160; print("输入错误,请重新输入!")

if __name__ == "__main__":
&#160; &#160; main()

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

使用道具 举报

发表于 2026-6-15 15:15:37 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:1

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2026-6-13 10:24:53 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:同一方法,不同对象表现不同

第 1 题的答案是:让代码更灵活

第 2 题的答案是:可以

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

第 4 题的答案是:降低耦合度。因为它不要求对象必须属于某个特定类型

第 5 题的答案是:不是,要用默认函数

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

请将第 0 题的代码写在下方:
class Person:
    def __init__(self,uid,name,job,grade,year,salary):
        self.uid=uid
        self.name=name
        self.job=job
        self.grade=grade
        self.year=year
        self.salary=salary
class Menu:
    def __init__(self):
        self.info={}
        self.next_id=10000
   
    def register(self,name,job,age,grade):
        salary=0
        realgrade=grade
        while(job=="M" and realgrade>3):
            realgrade=int(input("该职位最高为3级,请重新输入级别:"))
        while(job=="T" and realgrade>6):
            realgrade=int(input("该职位最高为6级,请重新输入级别:"))
        if(job=="E"):
            salary=3000+500*realgrade+50*age
        elif job=="T":
            salary=4000+800*realgrade+100*age
        else:
            salary=5000+1000*(realgrade+age)
        self.info[self.next_id]=Person(self.next_id,name,job,realgrade,age,salary)
        print(f"录入成功!姓名:{self.info[self.next_id].name},工号:{self.next_id},薪资:{self.info[self.next_id].salary}")
        self.next_id+=1
    def search1(self,uid):
        if uid in self.info:
            print(f"姓名:{self.info[uid].name}")
            print(f"职位:{self.info[uid].job}")
            print(f"级别:{self.info[uid].grade}")
            print(f"工龄:{self.info[uid].year}")
            print(f"薪资:{self.info[uid].salary}")
        else:
            print("该工号不存在!")
            return
    def search2(self,job):
        tmp=[]
        tmp2=[]
        for i in self.info:
            if(self.info[i].job==job):
                tmp.append(self.info[i].uid)
                tmp2.append(self.info[i].name)
        print(f"目前{job}共有{len(tmp)}人:")
        for i in range(len(tmp)):
            print(f"{tmp[i]}--{tmp2[i]}")
    def upgrade(self,uid):
        if(uid not in self.info):
            print("该工号不存在!")
            return
        else:
            print(f"{self.info[uid].name},工号:{self.info[uid].uid},当前职位:{self.info[uid].job+str(self.info[uid].grade)},当前薪资:{self.info[uid].salary}")
            level=int(input("请输入需要增加的级别:"))
            self.info[uid].grade+=level
            if(self.info[uid].job=="E" and self.info[uid].grade>10):
                self.info[uid].job="T"
                self.info[uid].grade=1
            elif(self.info[uid].job=="T" and self.info[uid].grade>6):
                self.info[uid].job="M"
                self.info[uid].grade=1
            if(self.info[uid].job=="E"):
                newsalary=3000+500*self.info[uid].grade+50*self.info[uid].year
            if(self.info[uid].job=="T"):
                newsalary=4000+800*self.info[uid].grade+100*self.info[uid].year
            if(self.info[uid].job=="M"):
                newsalary=5000+1000*(self.info[uid].grade+self.info[uid].year)
            print(f"{self.info[uid].name},工号:{self.info[uid].uid},当前职位:{self.info[uid].job+str(self.info[uid].grade)},当前薪资:{newsalary}(+{newsalary-self.info[uid].salary})")
            self.info[uid].salary=newsalary
    def downgrade(self,uid):
        if(uid not in self.info):
            print("该工号不存在!")
            return
        else:
            print(f"{self.info[uid].name},工号:{self.info[uid].uid},当前职位:{self.info[uid].job+str(self.info[uid].grade)},当前薪资:{self.info[uid].salary}")
            level=int(input("请输入需要减少的级别:"))
            self.info[uid].grade-=level
            if(self.info[uid].job=="E" and self.info[uid].grade<1):
                self.info[uid].job="E"
                self.info[uid].grade=1
            elif(self.info[uid].job=="T" and self.info[uid].grade<1):
                self.info[uid].job="E"
                self.info[uid].grade=10
            elif(self.info[uid].job=="M" and self.info[uid].grade<1):
                self.info[uid].job="T"
                self.info[uid].grade=6
            if(self.info[uid].job=="E"):
                newsalary=3000+500*self.info[uid].grade+50*self.info[uid].year
            if(self.info[uid].job=="T"):
                newsalary=4000+800*self.info[uid].grade+100*self.info[uid].year
            if(self.info[uid].job=="M"):
                newsalary=5000+1000*(self.info[uid].grade+self.info[uid].year)
            print(f"{self.info[uid].name},工号:{self.info[uid].uid},当前职位:{self.info[uid].job+str(self.info[uid].grade)},当前薪资:{newsalary}({newsalary-self.info[uid].salary})")
            self.info[uid].salary=newsalary

menu=Menu()
query=0

while(query!=5):
    query=int(input("1.录入 2.查询 3.升级 4.降级 5.退出:"))
    if(query==5):
        break
    if(query==1):
        name=input("姓名:")
        job=input("职位(E.普通员工;T.组长;M.经理):")
        year=int(input("工龄:"))
        grade=int(input("级别:"))
        menu.register(name,job,year,grade)
    if(query==2):
        query2=int(input("1.员工查询 2.职位查询"))
        if(query2==1):
            uid=int(input("请输入工号:"))
            menu.search1(uid)
        if(query2==2):
            job=input("请输入职位(E.普通员工 T.组长 M.经理)")
            menu.search2(job)
    if(query==3):
        uid=int(input("请输入工号"))
        menu.upgrade(uid)
    if(query==4):
        uid=int(input("请输入工号"))
        menu.downgrade(uid)
    print()
    print("------------------------------")
    print()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-6-10 20:44:11 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:用同一接口执行不同操作

第 2 题的答案是:可以

第 3 题的答案是:

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

第 5 题的答案是:算

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

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

使用道具 举报

发表于 2026-6-7 10:29:17 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:
基于“类继承与方法重写”
第 1 题的答案是:
可扩展性,解耦性,可读性,可替代性
第 2 题的答案是:
可以,定义是:同一接口,多种实现;相同形式,不同行为
第 3 题的答案是:
如果它走起来像鸭子,叫起来也像鸭子,那么它就是鸭子。
第 4 题的答案是:
显著降低了模块之间的耦合度(Coupling);同时,它对内聚度(Cohesion)没有直接的破坏,甚至在一定程度上促进了高内聚。
第 5 题的答案是:
不属于
-------- 动动手 --------

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

使用道具 举报

发表于 2026-6-7 00:40:32 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2026-6-4 14:00:58 | 显示全部楼层
1请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2026-6-2 15:55:13 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2026-6-1 09:13:03 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:
对于同一个运算符、函数或对象在不同的场景下,具有不同的作用效果。
第 1 题的答案是:
减少重复的定义函数。
第 2 题的答案是:
可以。
第 3 题的答案是:
不知道。
第 4 题的答案是:
降低了耦合度。
第 5 题的答案是:
不属于。
-------- 动动手 --------

请将第 0 题的代码写在下方:
class Employee:
    def __init__(self,name,job,grade,year,uid,salary):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid
        self.salary = salary
class Salary_calculate:
    def calculate(self,job,grade,year):
        if job == 'M':
            salary = 5000 + 1000 * (int(grade) + int(year))
        elif job == 'T':
            salary = 4000 + 800 * int(grade) + 100 * int(year)
        elif job == 'E':
            salary = 3000 + 500 * int(grade) + 50 * int(year)
        else:
            raise ValueError("输入的数据无效。")
        return salary

class Management(Salary_calculate):
    def __init__(self):
        self.date = {}
        self.uid = 10000

    def welcome(self):
        ins = 0
        while ins != '5':
            ins = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
            if ins == '1':
                self.createmployee()
            elif ins == '2':
                result = self.find()
                if result == 1:
                    print("该工号不存在!")
            elif ins == '3':
                self.upgrade()
            elif ins == '4':
                self.downgrade()
            elif ins == '5':
                print()

    def createmployee(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        year = input("工龄:")
        grade = input("级别:")
        if job == 'E' and int(grade) > 10:
            grade = input("该职位最高级别为10,请重新录入级别:")
        elif job == 'T' and int(grade) > 6:
            grade = input("该职位最高级别为6,请重新录入级别:")
        elif job == 'M' and int(grade) > 3:
            grade = input("该职位最高级别为3,请重新录入级别:")
        salary = self.calculate(job,grade,year)
        employee = Employee(name, job, grade, year, self.uid,salary)
        self.date[self.uid] = employee
        print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{salary}")
        self.uid += 1

    def find(self):
        s = input("1.员工查询;2.职位查询:")
        if s == '1':
            uid = int(input("请输入工号:"))
            if uid not in self.date.keys():
                return 1
            print(f"姓名:{self.date[uid].name}")
            print(f"职位:{self.date[uid].job}")
            print(f"级别:{self.date[uid].grade}")
            print(f"工龄:{self.date[uid].year}")
            print(f"薪资:{self.date[uid].salary}")
        if s == '2':
            count1 = 0
            date1 = {}
            job = input("职位(E.普通员工;T.组长;M.经理):")
            if job == 'E':
                for i in self.date.values():
                    if i.job == 'E':
                        date1[i.uid] = i.name
                        count1 += 1
                if count1 != 0:
                    print(f"目前普通员工共有{count1}人:")
                    for x,y in date1.items():
                        print(f"{x} - {y}")
                else:
                    print("目前公司没有普通员工!")

            if job == 'T':
                for i in self.date.values():
                    if i.job == 'T':
                        date1[i.uid] = i.name
                        count1 += 1
                if count1 != 0:
                    print(f"目前组长共有{count1}人:")
                    for x, y in date1.items():
                        print(f"{x} - {y}")
                else:
                    print("目前公司没有组长!")
            if job == 'M':
                for i in self.date.values():
                    if i.job == 'M':
                        date1[i.uid] = i.name
                        count1 += 1
                if count1 != 0:
                    print(f"目前经理共有{count1}人:")
                    for x, y in date1.items():
                        print(f"{x} - {y}")
                else:
                    print("目前公司没有经理!")


    def upgrade(self):
        uid = int(input("请输入工号:"))
        print(f"{self.date[uid].name},工号:{uid},当前职位:{self.date[uid].job}{self.date[uid].grade},当前薪资:{self.date[uid].salary}")
        salary1 = self.date[uid].salary
        grade1 = int(input("请输入需要增加的级数:"))
        t1 = str(int(self.date[uid].grade) + int(grade1))
        if self.date[uid].job == 'E':
            if int(self.date[uid].grade) + int(grade1) <= 10:
                self.date[uid].grade = t1
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            else:
                self.date[uid].grade = '1'
                self.date[uid].job = 'T'
                self.date[uid].salary = self.calculate(self.date[uid].job,self.date[uid].grade,self.date[uid].year)
            print(f"升级成功!\n{self.date[uid].name},工号:{uid},升级后的职位:{self.date[uid].job}{self.date[uid].grade},升级后薪资:{self.date[uid].salary}({self.date[uid].salary - salary1})")
            return  None
        if self.date[uid].job == 'T':
            if int(self.date[uid].grade) + int(grade1) <= 6:
                self.date[uid].grade = t1
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            else:
                self.date[uid].grade = '1'
                self.date[uid].job = 'M'
                self.date[uid].salary = self.calculate(self.date[uid].job,self.date[uid].grade,self.date[uid].year)
            print(f"升级成功!\n{self.date[uid].name},工号:{uid},升级后的职位:{self.date[uid].job}{self.date[uid].grade},升级后薪资:{self.date[uid].salary}(+{self.date[uid].salary - salary1})")
            return None
        if self.date[uid].job == 'M':
            if int(self.date[uid].grade) + int(grade1) <= 3:
                self.date[uid].grade = t1
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            else:
                self.date[uid].grade = '3'
                self.date[uid].salary = self.calculate(self.date[uid].job,self.date[uid].grade,self.date[uid].year)
            print(f"升级成功!\n{self.date[uid].name},工号:{uid},升级后的职位:{self.date[uid].job}{self.date[uid].grade},升级后薪资:{self.date[uid].salary}({self.date[uid].salary - salary1})")
            return None

    def downgrade(self):
        uid = int(input("请输入工号:"))
        print(f"{self.date[uid].name},工号:{uid},当前职位:{self.date[uid].job}{self.date[uid].grade},当前薪资:{self.date[uid].salary}")
        salary1 = self.date[uid].salary
        grade1 = int(input("请输入需要减少的级数:"))
        t2 = str(int(self.date[uid].grade) - int(grade1))
        if self.date[uid].job == 'E':
            if int(self.date[uid].grade) - int(grade1) > 1:
                self.date[uid].grade = t2
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            else:
                self.date[uid].grade = '1'
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            print(f"降级成功!\n{self.date[uid].name},工号:{uid},降级后的职位:{self.date[uid].job}{self.date[uid].grade},降级后薪资:{self.date[uid].salary}({self.date[uid].salary - salary1})")
            return None
        if self.date[uid].job == 'T':
            if int(self.date[uid].grade) - int(grade1) > 1:
                self.date[uid].grade = t2
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            else:
                self.date[uid].grade = '10'
                self.date[uid].job = 'E'
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            print(f"降级成功!\n{self.date[uid].name},工号:{uid},降级后的职位:{self.date[uid].job}{self.date[uid].grade},降级后薪资:{self.date[uid].salary}({self.date[uid].salary - salary1})")
            return None
        if self.date[uid].job == 'M':
            if int(self.date[uid].grade) - int(grade1) > 1:
                self.date[uid].grade = t2
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            else:
                self.date[uid].grade = '6'
                self.date[uid].job = 'T'
                self.date[uid].salary = self.calculate(self.date[uid].job, self.date[uid].grade, self.date[uid].year)
            print(f"降级成功!\n{self.date[uid].name},工号:{uid},降级后的职位:{self.date[uid].job}{self.date[uid].grade},降级后薪资:{self.date[uid].salary}({self.date[uid].salary - salary1})")
            return None

def main():
    m = Management()
    m.welcome()

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

使用道具 举报

发表于 2026-5-28 15:48:42 | 显示全部楼层
请回复您的答案^_^

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

第 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 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-27 14:12:25 | 显示全部楼层
请回复您的答案^_^

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

第 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 题的代码写在下方:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 23:31:16 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-5-20 13:34:49 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:
不同的类可以使用相同的方法,得到不同的结果

第 1 题的答案是:
灵活

第 2 题的答案是:
是的
第 3 题的答案是:

第 4 题的答案是:
增强了
第 5 题的答案是:
不属于
-------- 动动手 --------

请将第 0 题的代码写在下方:
class user:
    def __init__(self,job):
        self.job=job

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

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

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

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

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

    def salary(self,jc,gw,gl):
        self.mony=jc+gw*int(self.grade)+gl*int(self.year)

        
        

"""
        if self.job == 'E':
            self.mony=3000 + 500*int(self.grade)+50*int(self.year)
        elif self.job== 'T':
            self.mony=4000 + 800*int(self.grade)+100*int(self.year)
        else:
            self.mony=5000 + 1000*(int(self.grade)+int(self.year))
"""


class Employee(user):
    def __init__(self,name,grade,year,uid):
        self.name=name
        self.year=year
        self.uid=uid
        super().__init__("E")
        while grade > 10:
            grade = input("该职位最高级别为10,请重新录入级别:")
        self.grade=grade

    def salary(self):
        super().salary(3000,500,50)


class Teamleader(user):
    def __init__(self,name,grade,year,uid):
        self.name=name
        self.year=year
        self.uid=uid
        super().__init__("T")
        while grade > 6:
            grade = int(input("该职位最高级别为10,请重新录入级别:"))
        self.grade=grade

    def salary(self):
        super().salary(4000,800,100)

class Manager(user):
    def __init__(self,name,grade,year,uid):
        self.name=name
        self.year=year
        self.uid=uid
        super().__init__("M")
        while grade > 3:
            grade = input("该职位最高级别为10,请重新录入级别:")
        self.grade=grade

    def salary(self):
        super().salary(5000,1000,1000)


##定义功能函数
def create(count):
    name=input("姓名:")
    job=input("职位(E.普通员工;T.组长;M.经理):")
    year=int(input("工龄:"))
    grade=int(input("级别:"))
    if job == 'E':
        return Employee(name,grade,year,count)
    elif job == 'T':
        return Teamleader(name,grade,year,count)
    else:
        return Manager(name,grade,year,count)

def search(uid):
    s=input("1.员工查询;2.职位查询:")
    if s=='1':
        s2=int(input("请输入工号:"))
        if s2 not in uid:
            print("该工号不存在!")
        else:
            uid[s2].get_name()
            uid[s2].get_job()
            uid[s2].get_grade()
            uid[s2].get_year()
            uid[s2].salary()
            print(f"当前薪资: {self.mony}")
    else:
        s2=input("职位(E.普通员工;T.组长;M.经理):")
        num = 0
        name=[]
        for i in uid:
            if uid[i].job == s2:
               num +=1
               name.append([uid[i].uid,uid[i].name])
        if s2=='E':
            print(f"目前普通员工共有{num}人:")
        elif s2=="T":
            print(f"目前组长共有{num}人:")
        else:
            print(f"目前经理共有{num}人:")
        for i in name:
            print(f"{i[0]} - {i[1]}")

def up(uid):
    s=int(input("请输入工号:"))
    if s not in uid:
        print("该工号不存在")
    else:
        a=uid[s]
        print(f"{a.name},工号:{a.uid},当前职位:{a.job}{a.grade}",end=',')
        a.salary()
        s2=int(input("请输入需增加的级数:"))
        moy=a.mony
        if uid[s].job == 'E':
            if (uid[s].grade+s2) > 10:
                uid[s]=Teamleader(a.name,0,a.year,a.uid)
            else:
                a.grade += s2
        elif uid[s].job == 'T':
            if (uid[s].grade+s2) > 6:
                uid[s]=Manager(a.name,0,a.year,a.uid)
            else:
                a.grade += s2
        else:
            if (uid[s].grade+s2) > 3:
                uid[s].grade = 3
            else:
                a.grade += s2
        uid[s].salary()
        print(f"升级成功")
        print(f"{uid[s].name},工号:{uid[s].uid},升级后职位:{uid[s].job}{uid[s].grade},升级后薪资:{uid[s].mony}(+{uid[s].mony-moy})")

def down(uid):
    s=int(input("请输入工号:"))
    if s not in uid:
        print("该工号不存在")
    else:
        a=uid[s]
        print(f"{a.name},工号:{a.uid},当前职位:{a.job}{a.grade}",end=',')
        a.salary()
        s2=int(input("请输入需减少的级数:"))
        moy=a.mony
        if uid[s].job == 'E':
            if (uid[s].grade-s2) < 0:
                uid[s].grade = 0
            else:
                a.grade -= s2
        elif uid[s].job == 'T':
            if (uid[s].grade-s2) < 0:
                uid[s]=Employee(a.name,10,a.year,a.uid)
            else:
                a.grade -= s2
        else:
            if (uid[s].grade-s2) < 0:
                uid[s]=Teamleader(a.name,6,a.year,a.uid)
            else:
                a.grade -= s2
        uid[s].salary()
        print(f"升级成功")
        print(f"{uid[s].name},工号:{uid[s].uid},升级后职位:{uid[s].job}{uid[s].grade},升级后薪资:{uid[s].mony}({uid[s].mony-moy})")


def main():
    count=10000
    uid=dict()
    while True:
        s=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
        if s=='1':
            uid[count]=create(count)
            uid[count].salary()
            print(f"录入成功! 姓名:{uid[count].name},工号:{uid[count].uid},薪资:{uid[count].mony} ")
            count +=1
        if s=='2':
            search(uid)
        if s=='3':
            up(uid)
        if s=='4':
            down(uid)
        if s=='5':
            break
        
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-17 18:15:07 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:
千人千面
第 1 题的答案是:
灵活,影响小
第 2 题的答案是:
可以
第 3 题的答案是:

第 4 题的答案是:
高内聚
第 5 题的答案是:

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

请将第 0 题的代码写在下方:
member_list = []
class GetMixin:
    def get_uid(self):
        uid = input("请输入工号:")
        self.uid = uid
        
    def get_name(self):
        name = input("姓名;")
        self.name = name

    def get_job(self):
        job = input("职位(E.普通员工;T.组长;M.经理):")
        self.job = job

    def get_grade(self):
        grade = int(input("级别:"))
        self.grade = grade

    def get_year(self):
        year = int(input("工龄:"))
        self.year = year

    def finding(self,uid,member_list):
        for i in member_list:
            if i.uid == uid:
                return i
        print("该工号不存在!")
        return None

   
class Salary(GetMixin):
    def __init__(self):
        pass
    def sala(self,e):
        pass
    def upper(self,e):
        pass

class Employee(Salary):
    def __init__(self):
        super().__init__()
        
    def sala(self,e):
        return 3000 + 500*e.grade + 50*e.year
   
    def upper(self,e):
        if e.grade >= 10:
            e.job = "T"
            e.grade = 1
        elif e.grade <= 0:
            e.job = "E"
            e.grade = 1

class Teamleader(Salary):
    def __init__(self):
        super().__init__()
        
    def sala(self,e):
       return 4000 + 800*e.grade + 100*e.year
   
    def upper(self,e):
        if e.grade >= 6:
            e.job = "M"
            e.grade = 1
        elif e.grade <= 0:
            e.job = "E"
            e.grade = 10

class Manager(Salary):
    def __init__(self):
        super().__init__()
        
    def sala(self,e):
        return 5000 + 1000*(e.grade + e.year)
   
    def upper(self,e):
        if e.grade >= 3:
            e.job = "M"
            e.grade = 3
        elif e.grade <= 0:
            e.job = "T"
            e.grade = 6

JOB_MAP = {"E":Employee(),"T":Teamleader(),"M":Manager()}
        
class Member(GetMixin):
    uid = 10000
    def __init__(self):
        self.uid = str(Member.uid)
        Member.uid += 1
        self.name = ''
        self.job = ''
        self.grade = 1
        self.year = 0
        self.role = None


class Manage(GetMixin):
    def welcome(self):
        i = 0
        while i != '5':
            i = input("\n1.录入;2.查询;3.升级;4.降级;5.退出程序:")
            if i == '1':
                self.enter()
            elif i == '2':
                self.find()
            elif i == '3':
                self.up()
            elif i == '4':
                self.low()
            elif i == '5':
                break
   
    def enter(self):
        e = Member()
        e.get_name()
        e.get_job()
        e.get_grade()
        e.get_year()
        e.role = JOB_MAP[e.job]
        member_list.append(e)
        sal = e.role.sala(e)
        print(f"录入成功!姓名:{e.name},工号:{e.uid},薪资:{sal}")

    def find(self):
        o_find = input("1.员工查询;2.职位查询:")
        if o_find == '1':
            uid = input("请输入工号:")
            f = self.finding(uid,member_list)
            if f:
                new_sal = f.role.sala(f)
                print(f"姓名:{f.name}\n职位:{f.job}\n级别:{f.grade}\n工龄:{f.year}")
        else:
            j = input("职位(E.普通员工;T.组长;M.经理):")
            p = 0
            for n in member_list:
                if n.job == j:
                    p += 1
                    print(f"目前共有{p}人:\n{n.uid} - {n.name}")

    def up(self):
        uid = input("请输入工号:")
        f = self.finding(uid,member_list)
        g = int(input("请输入需要增加的级数:"))
        f.grade += g
        f.role.upper(f)
        f.role = JOB_MAP[f.job]
        new_sal = f.role.sala(f)
        print("升级成功!")
        print(f"{f.name},工号:{f.uid},升级后职位:{f.job}{f.grade},升级后薪资:{new_sal}")

    def low(self):
        uid = input("请输入工号:")
        f = self.finding(uid,member_list)
        l = int(input("请输入需要减少的级数:"))
        f.grade -= l
        f.role.upper(f)
        f.role = JOB_MAP[f.job]
        new_sal = f.role.sala(f)
        print("降级成功!")
        print(f"{f.name},工号:{f.uid},降级后职位:{f.job}{f.grade},降级后薪资:{new_sal}")
        
   
def main():
    m = Manage()
    m.welcome()
   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-19 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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