鱼C论坛

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

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

  [复制链接]
发表于 2023-8-11 16:31:38 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
每日打卡
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-11 14:46:02 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-9 14:27:32 | 显示全部楼层
0.在不同场景有不同的作用
1.方便,可以对父类的函数的重写
2.可以,一个是数值的相加,一个是字符串的拼接
3.长得像就可以
4.降低了耦合
5.不是
动动手
0.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2023-8-3 23:59:57 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-3 18:15:37 | 显示全部楼层
  1. # 第0题
  2.   # 就是传入的对象不同,则执行的功能效果也不同

  3. # 第1题
  4.   # 灵活。针对不同对象有不同的功能效果

  5. # 第2题
  6.   # 可以

  7. # 第3题
  8.   # 不知道

  9. # 第4题
  10.   # 降低了耦合度

  11. # 第5题
  12.   # 不属于
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-30 16:48:28 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-29 13:50:38 | 显示全部楼层
11
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-29 11:31:49 | 显示全部楼层
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.这不是我们C艹的重载吗,下次记得说明来源
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 22:28:07 | 显示全部楼层
0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-26 15:30:45 | 显示全部楼层
本帖最后由 Qoolies 于 2023-7-26 15:44 编辑

# 简单的员工管理程序
# 具体要求见:https://fishc.com.cn/thread-214231-1-2.html


class Staff:
    def __init__(self, name, job, grade, year, uid):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid

    def get_uid(self):
        return self.uid

    def get_name(self):
        return self.name

    def get_job(self):
        return self.job

    def get_grade(self):
        return self.grade

    def get_year(self):
        return self.year


class Employee(Staff):
    def __init__(self, name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)

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


class TeamLeader(Staff):
    def __init__(self, name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)

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


class Manager(Staff):
    def __init__(self, name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)

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


class Manage:
    def __init__(self):
        self.member = dict()
        self.uid = 10000

    def intro(self):
        opt = None
        while opt != "5":
            opt = input("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
            if opt == "1":
                self.record()
            elif opt == "2":
                self.query()
            elif opt == "3":
                self.up_grade()
            elif opt == "4":
                self.down_grade()
            elif opt == "5":
                print("程序退出!")

    def job_check(self):
        job = input("职位(E.普通员工;T.组长;M.经理):")
        while job not in ("E", "T", "M"):
            job = input("请输入正确职位代码!")
        return job

    def grade_check(self, job):
        grade = int(input("级别:"))
        while True:
            if job == "E" and grade > 10:
                grade = int(input("该职位最高级别为10,请重新录入级别:"))
            elif job == "T" and grade > 6:
                grade = int(input("该职位最高级别为6,请重新录入级别:"))
            elif job == "M" and grade > 3:
                grade = int(input("该职位最高级别为3,请重新录入级别:"))
            else:
                break
        return grade

    def record(self):
        name = input("姓名:")
        job = self.job_check()
        year = int(input("工龄:"))
        grade = self.grade_check(job)
        if job == "E":
            self.member[self.uid] = Employee(name, job, grade, year, self.uid)
        elif job == "T":
            self.member[self.uid] = TeamLeader(name, job, grade, year, self.uid)
        elif job == "M":
            self.member[self.uid] = Manager(name, job, grade, year, self.uid)
        print(f"录入成功!姓名:{name}, 工号:{self.uid}, 薪资:{self.member[self.uid].salary()}")
        self.uid += 1

    def query(self):
        opt = None
        while opt not in ("1", "2"):
            opt = input("1.员工查询;2职位查询:")
        if opt == "1":
            uid = int(input("请输入工号:"))
            if uid in self.member:
                print(f"姓名:{self.member[uid].name}")
                print(f"职位:{self.member[uid].job}")
                print(f"级别:{self.member[uid].grade}")
                print(f"工龄:{self.member[uid].year}")
                print(f"薪资:{self.member[uid].salary()} ")
            else:
                print("该工号不存在!")

        elif opt == "2":
            count = 0
            job_info = list()
            job = self.job_check()
            if job == "E":
                job_name = "普通员工"
            elif job == "T":
                job_name = "组长"
            elif job == "M":
                job_name = "经理"
            for each in self.member.values():
                if each.job == job:
                    count += 1
                    job_info.append(f"{each.uid} - {each.name}")
            if count == 0:
                print(f"目前公司没有{job_name}。")
            else:
                print(f"目前{job_name}共有 {count} 人:")
                for each in job_info:
                    print(each)

    def up_grade(self):
        uid = int(input("请输入工号:"))
        if uid in self.member:
            c_salary = self.member[uid].salary()
            print(
                f"{self.member[uid].name}, 工号:{uid}, 当前职位:{self.member[uid].job}{self.member[uid].grade}, 当前薪资:{c_salary}")
            self.member[uid].grade += int(input("请输入需要增加的级数:"))
            succeed = False
            if self.member[uid].job == "E" and self.member[uid].grade > 10:
                self.member[uid].job = "T"
                self.member[uid] = TeamLeader(self.member[uid].name, self.member[uid].job, 1, self.member[uid].year,
                                              uid)
                succeed = True
            elif self.member[uid].job == "T" and self.member[uid].grade > 6:
                self.member[uid].job = "M"
                self.member[uid] = Manager(self.member[uid].name, self.member[uid].job, 1, self.member[uid].year, uid)
                succeed = True
            elif self.member[uid].job == "M" and self.member[uid].grade > 3:
                print("超过规定级别!")

            if succeed:
                print("升级成功!")
                n_salary = self.member[uid].salary() - c_salary
                print(
                    f"{self.member[uid].name}, 工号:{uid}, 当前职位:{self.member[uid].job}{self.member[uid].grade}, 当前薪资:{self.member[uid].salary()}({n_salary:+})")
        else:
            print("工号不存在")

    def down_grade(self):
        uid = int(input("请输入工号:"))
        if uid in self.member:
            c_salary = self.member[uid].salary()
            print(f"{self.member[uid].name}, 工号:{uid}, 当前职位:{self.member[uid].job}{self.member[uid].grade}, 当前薪资:{c_salary}")
            self.member[uid].grade -= int(input("请输入需要减少的级数:"))
            succeed = False
            if self.member[uid].job == "E" and self.member[uid].grade < 1:
                print("超过最低级别!")
            elif self.member[uid].job == "T" and self.member[uid].grade < 1:
                self.member[uid].job = "E"
                self.member[uid] = Employee(self.member[uid].name, self.member[uid].job, 10, self.member[uid].year, uid)
                succeed = True
            elif self.member[uid].job == "M" and self.member[uid].grade < 1:
                self.member[uid].job = "T"
                self.member[uid] = TeamLeader(self.member[uid].name, self.member[uid].job, 6, self.member[uid].year, uid)
                succeed = True

            if succeed:
                print("降级成功!")
                n_salary = self.member[uid].salary() - c_salary
                print(
                    f"{self.member[uid].name}, 工号:{uid}, 当前职位:{self.member[uid].job}{self.member[uid].grade}, 当前薪资:{self.member[uid].salary()}({n_salary:+})")
        else:
            print("工号不存在")


def main():
    m = Manage()
    m.intro()


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

使用道具 举报

发表于 2023-7-25 15:06:58 | 显示全部楼层
+1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-25 14:29:21 | 显示全部楼层
0.面对不同对象体现不同的作用
1.一个方法可以应用于各种对象
2.可以
3.春江水暖鸭先知
4.高内聚
5.是
0.
class Employee_cl:
    def Employee_job(self,job):
        state=['E.普通员工','T.组长','M.经理']
        while True:
            if job=='E':
                job=state[0]
                break
            elif job=='T':
                job=state[1]
                break
            elif job=='M':
                job=state[2]
                break
            else:
                job=input('该职位简写不存在,请重新填写您的职位:')
        return job
   
    def Employee_grade(self,grade):
        if self.job[0]=='E':
            while grade>10:
                grade=int(input('该职位最高级别为10,请重新录入级别:'))
        elif self.job[0]=='T':
            while grade>6:
                grade=int(input('该职位最高级别为6,请重新录入级别:'))
        elif self.job[0]=='M':
            while grade>3:
                grade=int(input('该职位最高级别为3,请重新录入级别:'))
        return grade
   
    def Employee_money(self,job,grade,year):
        if job[0]=='E':
            money=3000+500*grade+50*year
        elif job[0]=='T':
            money=4000+800*grade+100*year
        elif job[0]=='M':
            money=5000+1000*(grade+year)
        return money
   
    def Confirm_uid(self,uid):
        if not self.record.get(uid):
            print('该工号不存在!')
        else:
            employee=self.record[uid]
            print(f'姓名:{employee[0]}',f'职位:{employee[1][0]}',f'级别:{employee[3]}',f'工龄:{employee[2]}',f'薪资:{employee[4]}',sep='\n')

    def Confirm_job(self,job):
        count=0
        infor=[]
        state=['E.普通员工','T.组长','M.经理']
        if job=='E' or job=='T' or job=='M':
            if job=='E':
                zc=state[0]
            elif job=='T':
                zc=state[1]
            else:
                zc=state[2]
            for k in self.record:
                if self.record[k][1][0]==job:
                    count+=1
                    infor.append([k,self.record[k][0]])
            if count>0:
                print(f'目前{zc[2:]}共有{count}人')
                for i in infor:
                    print(f'{i[0]} - {i[1]}')
            else:
                print(f'目前公司没有{zc[2:]}!')
        else:
            print('该职位不存在。')

    def increase(self,uid):
        if not self.record.get(uid):
            print('该工号不存在!')
        else:
            employee=self.record[uid]
            print(f'{employee[0]},',f'工号:{uid},',f'当前职位:{employee[1][0]+str(employee[3])},',f'当前薪资:{employee[4]}')
            t=employee[4]
            state=['E.普通员工','T.组长','M.经理']
            on=int(input('请输入需要增加的级数:'))
            employee[3]=on+employee[3]
            if employee[1][0]=='E':
                if employee[3]>10:
                    employee[3]=1
                    employee[1]=state[1]
            elif employee[1][0]=='T':
                if employee[3]>6:
                    employee[3]=1
                    employee[1]=state[2]
            elif employee[1][0]=='M':
                if employee[3]>3:
                    employee[3]=3
            print('升级成功!')
            employee[4]=self.Employee_money(employee[1],employee[3],employee[2])
            if employee[4]-t>0:
                print(f'{employee[0]},',f'工号:{uid},',f'升级后职位:{employee[1][0]+str(employee[3])},',f'升级后薪资:{employee[4]}(+{employee[4]-t})')
            else:
                print(f'{employee[0]},',f'工号:{uid},',f'升级后职位:{employee[1][0]+str(employee[3])},',f'升级后薪资:{employee[4]}({employee[4]-t})')
    def decrease(self,uid):
        if not self.record.get(uid):
            print('该工号不存在!')
        else:
            employee=self.record[uid]
            print(f'{employee[0]},',f'工号:{uid},',f'当前职位:{employee[1][0]+str(employee[3])},',f'当前薪资:{employee[4]}')
            t=employee[4]
            state=['E.普通员工','T.组长','M.经理']
            on=int(input('请输入需要减少的级数:'))
            employee[3]=employee[3]-on
            if employee[1][0]=='E':
                if employee[3]<1:
                    employee[3]=1
            elif employee[1][0]=='T':
                if employee[3]<1:
                    employee[3]=10
                    employee[1]=state[0]
            elif employee[1][0]=='M':
                if employee[3]<1:
                    employee[3]=6
                    employee[1]=state[1]
            print('降级成功!')
            employee[4]=self.Employee_money(employee[1],employee[3],employee[2])
            if employee[4]-t>0:
                print(f'{employee[0]},',f'工号:{uid},',f'降级后职位:{employee[1][0]+str(employee[3])},',f'降级后薪资:{employee[4]}(+{employee[4]-t})')
            else:
                print(f'{employee[0]},',f'工号:{uid},',f'降级后职位:{employee[1][0]+str(employee[3])},',f'降级后薪资:{employee[4]}({employee[4]-t})')

        
    def get_uid(self):
        self.uid=self.js
        return self.uid
   
    def get_name(self):
        self.name=input('姓名:')
        return self.name
   
    def get_job(self):
        job=input('职位(E.普通员工;T.组长;M.经理):')
        self.job=self.Employee_job(job)
        return self.job
   
    def get_grade(self):
        grade=int(input('级别:'))
        self.grade=self.Employee_grade(grade)
        return self.grade
   
    def get_year(self):
        self.year=int(input('工龄:'))
        return self.year
   
    def salary(self):
        self.money=self.Employee_money(self.job,self.grade,self.year)
        return self.money
   
class Welcome(Employee_cl):
    def __init__(self):
        print()
        self.record={}
        self.js=10000
    def cl(self):
        ope=input('1.录入;2.查询;3.升级;4.降级;5.退出:')
        while ope!='5':
            if ope=='1':
                data=[self.get_name(),self.get_job(),self.get_year(),self.get_grade(),self.salary()]
                self.record[self.get_uid()]=data
                self.js+=1
                print(f'录入成功!姓名:{self.name},工号:{self.uid},薪资:{self.money}')
                print(self.record)
            elif ope=='2':
                choice=input('1.员工查询;2.职位查询:')
                if choice=='1':
                    uid=int(input('请输入工号:'))
                    self.Confirm_uid(uid)
                elif choice=='2':
                    job=input('职位(E.普通员工;T.组长;M.经理):')
                    self.Confirm_job(job)
            elif ope=='3':
                uid=int(input('请输入工号:'))
                self.increase(uid)
            elif ope=='4':
                uid=int(input('请输入工号:'))
                self.decrease(uid)
               
               
            print()   
            ope=input('1.录入;2.查询;3.升级;4.降级;5.退出:')

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

使用道具 举报

发表于 2023-7-24 07:30:35 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-22 16:05:42 | 显示全部楼层
10
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-22 15:37:02 | 显示全部楼层
问答题:
0:在子类中重新定义一个同名的方法进行覆盖,这种做法我们称为重写
1:接口是不变的,但它却可以根据不同的对象执行不同的操作。
2:可以
3:When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
4:降低了耦合度
5:不属于,对象是一致的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-21 07:18:13 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 18:00:16 | 显示全部楼层
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
回复 支持 反对

使用道具 举报

发表于 2023-7-18 21:07:26 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-17 15:34:22 | 显示全部楼层
class Worker:
    def __init__(self, uid, name, job, grade, year):
        self.uid = uid
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year

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

class Manage():
    def __init__(self):
        self._uid = {}
        self.counts = 10000
        n = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
        while n != "5":
            if n == "1":
                self.new_worker()
            if n == "2":
                self.lookup()
            if n == "3":
                self.upgrade()
            if n == "4":
                self.downgrade()
            print()
            n = input("1.录入;2.查询;3.升级;4.降级;5.退出:")

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

    def lookup(self):
        n = input("1.员工查询;2.职位查询:")
        if n == "1":
            uid = int(input("请输入工号:"))
            if not self._uid.get(uid):
                print("该工号不存在!")
            else:
                print(f"姓名:{self._uid[uid].name}")
                print(f"职位:{self._uid[uid].job}")
                print(f"级别:{self._uid[uid].grade}")
                print(f"工龄:{self._uid[uid].year}")
                print(f"薪资:{self._uid[uid].sal()}")
                print()
        if n == "2":
            j = input("职位(E.普通员工;T.组长;M.经理):")
            c = 0
            l = []
            for each in self._uid:
                if self._uid[each].job == j:
                    l.append(f"{self._uid[each].uid} - {self._uid[each].name}")
                    c += 1
            if j == "E":
                if c == 0:
                    print("目前公司没有普通员工!")
                else:
                    print(f"目前普通员工共有{len(l)}人:")
                    for x in l:
                        print(x)
            if j == "T":
                if c == 0:
                    print("目前公司没有组长!")
                else:
                    print(f"目前组长共有{len(l)}人:")
                    for x in l:
                        print(x)
            if j == "M":
                if c == 0:
                    print("目前公司没有经理!")
                else:
                    print(f"目前经理共有{len(l)}人:")
                    for x in l:
                        print(x)
                        
    def upgrade(self):
        uid = int(input("请输入工号:"))
        sal1 = self._uid[uid].sal()
        print(f"{self._uid[uid].name},工号:{uid},当前职位:{self._uid[uid].job}{self._uid[uid].grade},当前薪资:{sal1}")
        lup = int(input("请输入需要增加的级数:"))
        if self._uid[uid].job == "E":
            if self._uid[uid].grade + lup > 10:
                self._uid[uid].job = "T"
                self._uid[uid].grade = 1
            else:
                self._uid[uid].grade = self._uid[uid].grade + lup            
        if self._uid[uid].job == "T":
            if self._uid[uid].grade + lup > 6:
                self._uid[uid].job = "M"
                self._uid[uid].grade = 1
            else:
                self._uid[uid].grade = self._uid[uid].grade + lup            
        if self._uid[uid].job == "M":
            self._uid[uid].grade = self._uid[uid].grade + lup
        sal2 = self._uid[uid].sal()
        print("升级成功!")
        print(f"{self._uid[uid].name},工号:{uid},升级后职位:{self._uid[uid].job}{self._uid[uid].grade},升级后薪资:{sal2}({sal2 - sal1})")
        
    def downgrade(self):
        uid = int(input("请输入工号:"))
        sal1 = self._uid[uid].sal()
        print(f"{self._uid[uid].name},工号:{uid},当前职位:{self._uid[uid].job}{self._uid[uid].grade},当前薪资:{sal1}")
        ldown = int(input("请输入需要减少的级数:"))
        if self._uid[uid].job == "E":
            self._uid[uid].grade = self._uid[uid].grade - ldown            
        if self._uid[uid].job == "T":
            if self._uid[uid].grade - ldown < 1:
                self._uid[uid].job = "E"
                self._uid[uid].grade = 10
            else:
                self._uid[uid].grade = self._uid[uid].grade - ldown            
        if self._uid[uid].job == "M":
            if self._uid[uid].grade - ldown < 1:
                self._uid[uid].job = "T"
                self._uid[uid].grade = 6
            else:
                self._uid[uid].grade = self._uid[uid].grade - ldown
        sal2 = self._uid[uid].sal()
        print("降级成功!")
        print(f"{self._uid[uid].name},工号:{uid},降级后职位:{self._uid[uid].job}{self._uid[uid].grade},降级后薪资:{sal2}({sal2 - sal1})")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-21 21:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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