忧郁的小鱿鱼 发表于 2026-7-8 20:22:47

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:
灵活
第 3 题的答案是:
可以
第 4 题的答案是:

第 5 题的答案是:
不属于
-------- 动动手 --------

请将第 0 题的代码写在下方:

王子川 发表于 2026-7-8 10:18:35

请回复您的答案^_^

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

第 0 题的答案是:
同一函数名,不同对象给出不同结果
第 1 题的答案是:
灵活多变,功能扩展性强
第 2 题的答案是:
可以
第 3 题的答案是:
宁可请求原谅,不要事后许可
第 4 题的答案是:
鸭子类型降低了耦合度
第 5 题的答案是:
不算
-------- 动动手 --------

请将第 0 题的代码写在下方:

sixsixsix70 发表于 2026-7-5 22:35:13

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

Jun_e 发表于 2026-7-4 22:23:56

请回复您的答案^_^

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

第 0 题的答案是:在Python中,多态性(Polymorphism)是一种允许我们使用统一的接口来执行多种类型的操作的能力。多态性主要体现在继承和函数重载(在某些情况下)上。

第 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 题的代码写在下方:

3222 发表于 2026-7-3 08:50:45

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

player_1291 发表于 2026-6-30 11:50:53

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

2165175001 发表于 2026-6-29 23:25:57

请回复您的答案^_^

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

第 0 题的答案是:

不同对象队同一条信息做出不同的响应

第 1 题的答案是:

一个对象多种用法

第 2 题的答案是:

可以

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

不属于
-------- 动动手 --------

请将第 0 题的代码写在下方:

tangk240 发表于 2026-6-27 16:46:00

请回复您的答案^_^

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

第 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 = Employee(name,grade,year,self.uid)
      elif job == 'T':
            self.message_d = Teamleader(name,grade,year,self.uid)
      else:
            self.message_d = Manager(name,grade,year,self.uid)
      self.message_d_job.append((self.uid,name))
      self.salary(self.uid)
      print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{self.message_d.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
      length = len(element)
      if job == 'E':
            member = '普通员工'
      elif job == 'T':
            member = '组长'
      else:
            member = '经理'
      print(f"目前{member}共有{length}人:")
      for i in element:
            print(i,' - ',i)
    def get_name(self,uid):
      print('姓名:',self.message_d.name)
    def get_job(self,uid):
      print("职位:",self.message_d.job)
    def get_grade(self,uid):
      print("级别:",self.message_d.grade)
    def get_year(self,uid):
      print("工龄:",self.message_d.year)
    def salary(self,uid):
      job = self.message_d.job
      year = self.message_d.year
      grade = self.message_d.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.salary = salary
      return salary
    def upgrate(self):
      uid = int(input("请输入工号:"))
      _ = self.message_d
      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
      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()

yifei11 发表于 2026-6-24 19:58:51

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

wuzhijin 发表于 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 = 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

洛洛ly 发表于 2026-6-16 23:13:54

请回复您的答案^_^

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

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

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

第 2 题的答案是:可以

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

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

第 5 题的答案是:不属于

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

请将第 0 题的代码写在下方:

dx198886 发表于 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"薪资: ¥{员工.工资()}")


    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__':
    系统 = 员工管理系统()
    系统.界面()

kn940363413 发表于 2026-6-16 11:29:53

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

sophialll 发表于 2026-6-16 11:05:58

请回复您的答案^_^

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

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

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

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


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


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



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

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

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

    def __init__(self, name, grade, year, uid):
        self.name = name
        self.job = self.job_name
        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):
        return 3000 + 500 * self.grade + 50 * self.year

class Teamleader(Employee):
    max_grade = 6
    job_name = "T"

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

class Manager(Employee):
    max_grade = 3
    job_name = "M"

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

employees = []
next_uid = 10000

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

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



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


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

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

def find_by_uid(uid):
    for emp in employees:
        if emp.uid == uid:
            return emp
    return None

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

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

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

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



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

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

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



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

if __name__ == "__main__":
    main()

a2070007025 发表于 2026-6-15 15:15:37

请回复您的答案^_^

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

第 0 题的答案是:1

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

milkbarrel 发表于 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=Person(self.next_id,name,job,realgrade,age,salary)
      print(f"录入成功!姓名:{self.info.name},工号:{self.next_id},薪资:{self.info.salary}")
      self.next_id+=1
    def search1(self,uid):
      if uid in self.info:
            print(f"姓名:{self.info.name}")
            print(f"职位:{self.info.job}")
            print(f"级别:{self.info.grade}")
            print(f"工龄:{self.info.year}")
            print(f"薪资:{self.info.salary}")
      else:
            print("该工号不存在!")
            return
    def search2(self,job):
      tmp=[]
      tmp2=[]
      for i in self.info:
            if(self.info.job==job):
                tmp.append(self.info.uid)
                tmp2.append(self.info.name)
      print(f"目前{job}共有{len(tmp)}人:")
      for i in range(len(tmp)):
            print(f"{tmp}--{tmp2}")
    def upgrade(self,uid):
      if(uid not in self.info):
            print("该工号不存在!")
            return
      else:
            print(f"{self.info.name},工号:{self.info.uid},当前职位:{self.info.job+str(self.info.grade)},当前薪资:{self.info.salary}")
            level=int(input("请输入需要增加的级别:"))
            self.info.grade+=level
            if(self.info.job=="E" and self.info.grade>10):
                self.info.job="T"
                self.info.grade=1
            elif(self.info.job=="T" and self.info.grade>6):
                self.info.job="M"
                self.info.grade=1
            if(self.info.job=="E"):
                newsalary=3000+500*self.info.grade+50*self.info.year
            if(self.info.job=="T"):
                newsalary=4000+800*self.info.grade+100*self.info.year
            if(self.info.job=="M"):
                newsalary=5000+1000*(self.info.grade+self.info.year)
            print(f"{self.info.name},工号:{self.info.uid},当前职位:{self.info.job+str(self.info.grade)},当前薪资:{newsalary}(+{newsalary-self.info.salary})")
            self.info.salary=newsalary
    def downgrade(self,uid):
      if(uid not in self.info):
            print("该工号不存在!")
            return
      else:
            print(f"{self.info.name},工号:{self.info.uid},当前职位:{self.info.job+str(self.info.grade)},当前薪资:{self.info.salary}")
            level=int(input("请输入需要减少的级别:"))
            self.info.grade-=level
            if(self.info.job=="E" and self.info.grade<1):
                self.info.job="E"
                self.info.grade=1
            elif(self.info.job=="T" and self.info.grade<1):
                self.info.job="E"
                self.info.grade=10
            elif(self.info.job=="M" and self.info.grade<1):
                self.info.job="T"
                self.info.grade=6
            if(self.info.job=="E"):
                newsalary=3000+500*self.info.grade+50*self.info.year
            if(self.info.job=="T"):
                newsalary=4000+800*self.info.grade+100*self.info.year
            if(self.info.job=="M"):
                newsalary=5000+1000*(self.info.grade+self.info.year)
            print(f"{self.info.name},工号:{self.info.uid},当前职位:{self.info.job+str(self.info.grade)},当前薪资:{newsalary}({newsalary-self.info.salary})")
            self.info.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()

sayumi 发表于 2026-6-10 20:44:11

请回复您的答案^_^

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

第 0 题的答案是:

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

第 2 题的答案是:可以

第 3 题的答案是:

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

第 5 题的答案是:算

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

请将第 0 题的代码写在下方:

Yuanxdhao6 发表于 2026-6-7 10:29:17

请回复您的答案^_^

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

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

请将第 0 题的代码写在下方:

AkaMi_re 发表于 2026-6-7 00:40:32

请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:

洛克王国 发表于 2026-6-4 14:00:58

1请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

请将第 0 题的代码写在下方:
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: 第063讲:类和对象(VI)| 课后测试题及答案