鱼C论坛

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

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

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2025-8-18 17:48:30 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2025-8-17 22:00:32 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2025-8-16 14:49:11 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:
通过继承与1调整不同的参数可以使实例化对象拥有不同的功能
第 1 题的答案是:
能让函数灵活发挥不同的效果
第 2 题的答案是:
可以
第 3 题的答案是:

第 4 题的答案是:

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

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

使用道具 举报

发表于 2025-8-13 23:33:56 | 显示全部楼层
1请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:不同类的对象对同一方法可以有不同的响应

第 1 题的答案是:大大提高程序的可复用性,可以提高可扩充性和可维护性

第 2 题的答案是:不行

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

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

第 5 题的答案是:属于

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

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

使用道具 举报

发表于 2025-8-12 13:35:03 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:不关心变量的类型

第 1 题的答案是:使用的范围广

第 2 题的答案是:可以

第 3 题的答案是:

第 4 题的答案是:低耦合

第 5 题的答案是:不属于

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

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

使用道具 举报

发表于 2025-8-10 21:32:11 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:不在乎对象的具体类型,直接执行对象中存在的同名方法

第 1 题的答案是:能够保持接口不变的情况下,针对不同的入参执行不同的方法输出类似的结果

第 2 题的答案是:可以,这是运算符多态的一种形式

第 3 题的答案是:When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.

第 4 题的答案是:同时实现了高内聚和低耦合

第 5 题的答案是:不属于

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

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

    def __init__(self, name, grade, year, uid):
        self.name = name
        self.grade = grade
        self.year = year
        self.uid = uid
        self.job = "普通员工"

    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

    def promote(self, levels):
        new_grade = self.grade + levels
        if new_grade > self.MAX_GRADE:
            return Teamleader(self.name, 1, self.year, self.uid)
        self.grade = new_grade
        return self

    def demote(self, levels):
        new_grade = self.grade - levels
        # 不能降级到0级以下
        if new_grade < 1:
            return None
        self.grade = new_grade
        return self

class Teamleader(Employee):
    MAX_GRADE = 6
    JOB_CODE = "T"

    def __init__(self, name, grade, year, uid):
        super().__init__(name, grade, year, uid)
        self.job = "组长"

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

    def promote(self, levels):
        new_grade = self.grade + levels
        if new_grade > self.MAX_GRADE:
            return Manager(self.name, 1, self.year, self.uid)
        self.grade = new_grade
        return self

    def demote(self, levels):
        new_grade = self.grade - levels
        if new_grade < 1:
            return Employee(self.name, Employee.MAX_GRADE, self.year, self.uid)
        self.grade = new_grade
        return self

class Manager(Employee):
    MAX_GRADE = 3
    JOB_CODE = "M"

    def __init__(self, name, grade, year, uid):
        super().__init__(name, grade, year, uid)
        self.job = "经理"

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

    def promote(self, levels):
        new_grade = self.grade + levels
        # 已经是最高职位
        if new_grade > self.MAX_GRADE:
            return self
        self.grade = new_grade
        return self

    def demote(self, levels):
        new_grade = self.grade - levels
        if new_grade < 1:
            return Teamleader(self.name, Teamleader.MAX_GRADE, self.year, self.uid)
        self.grade = new_grade
        return self

class EmployeeSystem:
    def __init__(self):
        self.employees = {}
        self.next_uid = 10000

    def add_employee(self):
        name = input("姓名:")
        while True:
            job = input("职位(E.普通员工;T.组长;M.经理):").upper()
            if job in ['E', 'T', 'M']:
                break
            print("无效职位,请重新输入!")

        while True:
            try:
                year = int(input("工龄:"))
                break
            except:
                print("错误:请输入正常年龄数字")

        if job == 'E':
            max_grade = Employee.MAX_GRADE
        elif job == 'T':
            max_grade = Teamleader.MAX_GRADE
        else:
            max_grade = Manager.MAX_GRADE
        
        while True:
            try:
                grade = int(input("级别:"))
            except:
                print("错误:请输入正常级别数字")
                continue
            if 1 <= grade <= max_grade:
                break
            print(f"该职位最高级别为 {max_grade} ,请重新录入级别!")
        
        uid = self.next_uid
        self.next_uid += 1

        if job == 'E':
            employee = Employee(name, grade, year, uid)
        elif job == 'T':
            employee = Teamleader(name, grade, year, uid)
        else:
            employee = Manager(name, grade, year, uid)

        self.employees[uid] = employee
        print(f"录入成功!姓名:{name},工号:{uid},薪资:{employee.salary()}")

    def query_employee(self):
        while True:
            try:
                uid = int(input("请输入工号:"))
                break
            except:
                print("错误:请输入正常工号数字")
        
        if uid in self.employees:
            e = self.employees[uid]
            print(f"姓名:{e.get_name()}")
            print(f"职位:{e.get_job()}")
            print(f"级别:{e.get_grade()}")
            print(f"工龄:{e.get_year()}")
            print(f"薪资:{e.salary()}")
        else:
            print("该工号不存在!")

    def query_job(self):
        while True:
            job = input("职位(E.普通员工;T.组长;M.经理):").upper()
            if job in ['E', 'T', 'M']:
                break
            print("无效职位,请重新输入!")
        
        job_name = {'E': '普通员工', 'T': '组长', 'M': '经理'}[job]
        employees = [e for e in self.employees.values() if e.JOB_CODE == job]
        
        print(f"目前{job_name}共有{len(employees)}人:")
        for e in employees:
            print(f"{e.get_uid()} - {e.get_name()}")

    def promote_employee(self):
        while True:
            try:
                uid = int(input("请输入工号:"))
                break
            except:
                print("错误:请输入正常工号数字")
        
        if uid not in self.employees:
            print("该工号不存在!")
            return

        employee = self.employees[uid]
        print(f"{employee.get_name()},工号:{employee.get_uid()},当前职位:{employee.JOB_CODE}{employee.get_grade()},当前薪资:{employee.salary()}")

        while True:
            try:
                levels = int(input("请输入需要增加的级数:"))
                break
            except:
                print("错误:请输入正常等级数字")
                continue
        old_salary = employee.salary()
        new_employee = employee.promote(levels)

        if new_employee != employee:
            self.employees[uid] = new_employee
            print(f"升职成功!")
        else:
            print(f"升级成功!")

        print(f"{new_employee.get_name()},工号:{new_employee.get_uid()},升级后职位:{new_employee.JOB_CODE}{new_employee.get_grade()},升级后薪资:{new_employee.salary()}(+{new_employee.salary() - old_salary})")

    def demote_employee(self):
        while True:
            try:
                uid = int(input("请输入工号:"))
                break
            except:
                print("错误:请输入正常工号数字")

        if uid not in self.employees:
            print("该工号不存在!")
            return

        employee = self.employees[uid]
        print(f"{employee.get_name()},工号:{employee.get_uid()},当前职位:{employee.JOB_CODE}{employee.get_grade()},当前薪资:{employee.salary()}")

        while True:
            try:
                levels = int(input("请输入需要减少的级数:"))
                break
            except:
                print("错误:请输入正常等级数字")
                continue
        old_salary = employee.salary()
        new_employee = employee.demote(levels)

        if new_employee is None:
            print("不能降级到0级以下!")
            return

        if new_employee != employee:
            self.employees[uid] = new_employee
            print(f"降职成功!")
        else:
            print(f"降级成功!")

        print(f"{new_employee.get_name()},工号:{new_employee.get_uid()},降级后职位:{new_employee.JOB_CODE}{new_employee.get_grade()},降级后薪资:{new_employee.salary()}(-{old_salary - new_employee.salary()})")

    def run(self):
        while True:
            print("\n1.录入;2.查询;3.升级;4.降级;5.退出:", end="")
            choice = input().strip()
            
            if choice == '1':
                self.add_employee()
            elif choice == '2':
                print("1.员工查询;2.职位查询:", end="")
                sub_choice = input().strip()
                if sub_choice == '1':
                    self.query_employee()
                elif sub_choice == '2':
                    self.query_job()
                else:
                    print("无效选择!")
            elif choice == '3':
                self.promote_employee()
            elif choice == '4':
                self.demote_employee()
            elif choice == '5':
                print("感谢使用员工管理系统!")
                break
            else:
                print("无效选择,请重新输入!")

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

使用道具 举报

发表于 2025-8-7 23:35:08 | 显示全部楼层
请回复您的答案^_^

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

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

第 1 题的答案是:通过统一的接口处理不同类型的对象

第 2 题的答案是:是的

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:是

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

发表于 2025-8-5 14:55:56 | 显示全部楼层
请回复您的答案^_^

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:对于不同情况作出不同行为

第 1 题的答案是:处理不同情况

第 2 题的答案是:可以

第 3 题的答案是:

第 4 题的答案是:弱内聚,低耦合

第 5 题的答案是:是的

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

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

使用道具 举报

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

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

第 0 题的答案是:

第 1 题的答案是:

第 2 题的答案是:

第 3 题的答案是:

第 4 题的答案是:

第 5 题的答案是:

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

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

使用道具 举报

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

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

第 0 题的答案是:
针对不同的对象有不同的作用
第 1 题的答案是:
针对不同的对象有不同的作用
第 2 题的答案是:
可以
第 3 题的答案是:
When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
第 4 题的答案是:
降低耦合度
第 5 题的答案是:
不是
-------- 动动手 --------

请将第 0 题的代码写在下方:
class Person:
    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 f"工号:{self.uid}"

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

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

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

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

    def salary(self):
        if self.job == "E":
            money = 3000 + 500 * self.grade + 50 * self.year
        elif self.job == "T":
            money = 4000 + 800 * self.grade + 100 * self.year
        elif self.job == "M":
            money = 5000 + 1000 * (self.grade + self.year)
        return money

class Main:
    data = []
    j = {"E":[10,"普通员工"],"T":[6,"组长"],"M":[3,"经理"]}
    def save(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        year = int(input("工龄:"))
        grade = int(input("级别:"))
        if job == "E":
            while grade > 10:
                grade = int(input("该职位最高级别为10,请重新录入级别:"))
        elif job == "T":
            while grade > 6:
                grade = int(input("该职位最高级别为6,请重新录入级别:"))
        elif job == "M":
            while grade > 3:
                grade = int(input("该职位最高级别为3,请重新录入级别:"))
        uid = 10000 + len(self.data)
        self.data.append(Person(name,job,grade,year,uid))
        _ = Person(name,job,grade,year,uid).salary()
        print(f"录入成功!姓名:{name},工号:{uid},薪资:{_}")

    def find(self):
        _ins = input("1.员工查询;2.职位查询:")
        if _ins == "1":
            a = int(input("请输入工号:"))
            for each in self.data:
                if each.uid == a:
                    print(each.get_name())
                    print(each.get_job())
                    print(each.get_grade())
                    print(each.get_year())
                    print(f"薪资:{each.salary()}")
                    break
            else:
                print("该工号不存在!")
        elif _ins == "2":
            count = 0
            x = []
            job = input("职位(E.普通员工;T.组长;M.经理):")
            for each in self.data:
                if each.job == job:
                    x.append(f"{each.uid}-{each.name}")
                    count += 1
            else:
                if count == 0:
                    print(f"目前公司没有{self.j[job][1]}!")
                else:
                    print(f"目前{self.j[job][1]}共有{count}人")
                    for each in x:
                        print(each)
                    
    def up(self):
        a = int(input("请输入工号:"))
        for each in self.data:
            if each.uid == a:
                x = each.salary()
                print(f"{each.name},{each.get_uid()},当前职位:{each.job + str(each.grade)},当前薪资:{x}")
                level = int(input("请输入需要增加的级数:"))
                if each.grade + level > self.j[each.job][0]:
                    each.job = list(self.j.keys())[list(self.j.keys()).index(each.job)+1]
                    each.grade = 1
                else:
                    each.grade += level
                _ = each.job + str(each.grade)
                y = each.salary()
                print(f"升级成功!\n{each.name},{each.get_uid()},升级后职位:{_},升级后薪资:{y}(+{y-x})")
                break
        else:
            print("工号错误")
        
            
    def down(self):
        a = int(input("请输入工号:"))
        for each in self.data:
            if each.uid == a:
                x = each.salary()
                print(f"{each.name},{each.get_uid()},当前职位:{each.job + str(each.grade)},当前薪资:{x}")
                level = int(input("请输入需要减少的级数:"))
                if each.grade - level < 1:
                    each.job = list(self.j.keys())[list(self.j.keys()).index(each.job)-1]
                    each.grade = self.j[each.job][0]
                else:
                    each.grade -= level
                _ = each.job + str(each.grade)
                y = each.salary()
                print(f"降级成功!\n{each.name},{each.get_uid()},降级后职位:{_},降级后薪资:{y}(-{x-y})")
                break
        else:
            print("工号错误")

main = Main()
while True:        
    ins = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
    if ins == "1":
        main.save()
    elif ins == "2":
        main.find()
    elif ins == "3":
        main.up()
    elif ins == "4":
        main.down()
    elif ins == "5":
        break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-21 23:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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