鱼C论坛

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

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

  [复制链接]
发表于 2023-3-23 09:58:45 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
6
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-22 00:50:13 | 显示全部楼层
好难啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-21 16:29:32 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-20 21:29:52 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2023-3-20 18:32:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-20 18:03:49 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-20 16:28:45 | 显示全部楼层
查看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-19 20:02:42 | 显示全部楼层
问答题:
0.接收不同的对象作为参数,并在不检查参数类型的情况下执行他的方法
1.可以适应不同的使用情况
2.可以
3.按图索骥
4.低耦合
5.属于



class Worker:
    def __init__(self, name, job, garde, year, uid):
        self.name = name
        self.job = job
        self.garde = garde
        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_garde(self):
        return self.garde

    def get_year(self):
        return self.year

    def salary(self):
        pass


class Employee(Worker):
    def salary(self):
        return 3000 + 500 * self.garde + 50 * self.year


class Teamleader(Worker):
    def salary(self):
        return 4000 + 800 * self.garde + 100 * self.year


class Manager(Worker):
    def salary(self):
        return 5000 + 1000 * (self.garde + self.year)


class Manage:
    def __init__(self):
        self.num = 10000
        self.member = []

    # 录入
    def key_in(self):
        name = input('姓名:')
        while 1:
            job = input('职位(E.普通员工;T.组长;M.经理):')
            if job not in ('E', 'T', 'M'):
                print('输入错误,请重新输入')
            else:
                break
        while 1:
            grade = int(input('等级:'))
            if job == 'E' and grade > 10:
                print('该职位最高级别为10级别,请重新录入')
            elif job == 'T' and grade > 6:
                print('该职位最高级别为6级别,请重新录入')
            elif job == 'M' and grade > 3:
                print('该职位最高级别为3级别,请重新录入')
            else:
                break
        year = int(input('工龄:'))
        number = self.num
        self.num += 1
        if job == 'E':
            n = Employee(name, job, grade, year, number)
        elif job == 'T':
            n = Teamleader(name, job, grade, year, number)
        elif job == 'M':
            n = Manager(name, job, grade, year, number)
        self.member.append([name, job, grade, year, number, n.salary()])
        print(f'录入成功!姓名:{name},工号:{number},薪资:{n.salary()}')

    def find(self):
        while 1:
            order = input('1.员工查询  2.职位查询')
            if order not in ('1', '2'):
                print('输入错误,请重新输入')
            else:
                break
        if order == '1':
            num = input('请输入工号:')
            for i in self.member:
                if str(i[4]) == num:
                    print(f'姓名:{i[0]}')
                    print(f'职位:{i[1]}')
                    print(f'级别:{i[2]}')
                    print(f'工龄:{i[3]}')
                    print(f'薪资:{i[5]}')
                    break
            else:
                print('该工号不存在')
        elif order == '2':
            while 1:
                garde = input('职位(E.普通员工;T.组长;M.经理)')
                if garde not in ('E', 'T', 'M'):
                    print('输入错误,请重新输入')
                else:
                    break
            ss = [i for i in self.member if i[1] == garde]
            q = {'E': '普通员工', 'T': '组长', 'M': '经理'}
            if ss:
                print(f'目前{q[garde]}共有{len(ss)}人')
                for i in ss:
                    print(f'{i[4]} - {i[0]}')
            else:
                print(f'目前公司没有{q[garde]}')

    def change_up(self):
        aa = 0
        num = input('请输入工号:')
        for i in self.member:
            if str(i[4]) == num:
                print(f'{i[0]},工号:{i[4]},当前职位:{i[1]+str(i[2])},当前薪资:{i[-1]}')
                up = int(input('请输入需要增加的级数'))
                i[2] += up
                qq = i[-1]
                if i[1] == 'E':
                    if 1 <= i[2] <= 10:
                        self.member[self.member.index(i)][2] = i[2]
                        self.member[self.member.index(i)][-1] = 3000 + 500 * i[2] + 50 * i[3]
                    elif 11 <= i[2] <= 16:
                        self.member[self.member.index(i)][2] = 1
                        self.member[self.member.index(i)][1] = 'T'
                        self.member[self.member.index(i)][-1] = 4000 + 800 + 100 * i[3]
                    elif 19 >= i[2] >= 17:
                        self.member[self.member.index(i)][2] = 1
                        self.member[self.member.index(i)][1] = 'M'
                        self.member[self.member.index(i)][-1] = 5000 + 1000 * (1 + i[3])
                    else:
                        aa = '输入错误'
                elif i[1] == 'T':
                    if 1 <= i[2] <= 6:
                        self.member[self.member.index(i)][2] = i[2]
                        self.member[self.member.index(i)][-1] = 4000 + 800 * i[2] + 100 * i[3]
                    elif 7 <= i[2] <= 9:
                        self.member[self.member.index(i)][2] = 1
                        self.member[self.member.index(i)][1] = 'M'
                        self.member[self.member.index(i)][-1] = 5000 + 1000 * (1 + i[3])
                    else:
                        aa = '输入错误'
                elif i[1] == 'M':
                    if 1 <= i[2] <= 3:
                        self.member[self.member.index(i)][2] = i[2]
                        self.member[self.member.index(i)][-1] = 5000 + 1000 * (i[2] + i[3])
                    else:
                        aa = '输入错误'
                if aa == '输入错误':
                    print(aa)
                    break
                else:
                    print('升级成功!')
                    print(
                        f'姓名:{i[0]},工号:{i[-2]},升级后职位:{self.member[self.member.index(i)][1]+str(self.member[self.member.index(i)][2])},薪资:{self.member[self.member.index(i)][-1]}(+{self.member[self.member.index(i)][-1] - qq})')
                break
        else:
            print('该工号不存在')

    def change_down(self):
        bb = 0
        num = input('请输入工号:')
        for i in self.member:
            if str(i[4]) == num:
                print(f'{i[0]},工号:{i[4]},当前职位:{i[1]+str(i[2])},当前薪资:{i[-1]}')
                down = int(input('请输入需要减少的级数'))
                i[2] -= down
                qq = i[-1]
                if i[1] == 'E':
                    if 0 < i[2] <= 10:
                        self.member[self.member.index(i)][2] = i[2]
                        self.member[self.member.index(i)][-1] = 3000 + 500 * i[2] + 50 * i[3]
                    else:
                        bb = '输入错误'
                elif i[1] == 'T':
                    if 0 < i[2] <= 6:
                        self.member[self.member.index(i)][2] = i[2]
                        self.member[self.member.index(i)][-1] = 4000 + 800 * i[2] + 100 * i[3]
                    elif -10 <= i[2] <= -1:
                        self.member[self.member.index(i)][2] = 10
                        self.member[self.member.index(i)][1] = 'E'
                        self.member[self.member.index(i)][-1] = 3000 + 500 * 10 + 50 * i[3]
                    else:
                        bb = '输入错误'
                elif i[1] == 'M':
                    if 0 < i[2] <= 3:
                        self.member[self.member.index(i)][2] = i[2]
                        self.member[self.member.index(i)][-1] = 5000 + 1000 * (i[2] + i[3])
                    elif -3 <= i[2] <= -1:
                        self.member[self.member.index(i)][2] = 6
                        self.member[self.member.index(i)][1] = 'T'
                        self.member[self.member.index(i)][-1] = 4000 + 800 * 6 + 100 * i[3]
                    elif -13 <= i[2] <= -4:
                        self.member[self.member.index(i)][2] = 10
                        self.member[self.member.index(i)][1] = 'E'
                        self.member[self.member.index(i)][-1] = 3000 + 500 * 10 + 50 * i[3]
                    else:
                        bb = '输入错误'
                if bb == '输入错误':
                    print(bb)
                    break
                else:
                    print('降级成功!')
                    print(
                        f'姓名:{i[0]},工号:{i[-2]},升级后职位:{self.member[self.member.index(i)][1] + str(self.member[self.member.index(i)][2])},薪资:{self.member[self.member.index(i)][-1]}({self.member[self.member.index(i)][-1] - qq})')
                break
        else:
            print('该工号不存在')

    def welcome(self):
        print('欢迎使用老白企业员工管理系统')
        while 1:
            order = input('请输入指令:1.录入  2.查询  3.升级  4.降级  5.退出')
            if order not in ('1', '2', '3', '4', '5'):
                print('输入错误,请重新输入')
            elif order == '1':
                self.key_in()
            elif order == '2':
                self.find()
            elif order == '3':
                self.change_up()
            elif order == '4':
                self.change_down()
            elif order == '5':
                print('感谢您使用老白企业员工管理系统')
                break


def main():
    ff = Manage()
    ff.welcome()


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

使用道具 举报

发表于 2023-3-19 17:10:15 | 显示全部楼层
一道代码题耗费了整个下午时间,呜呜
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 16:59:48 | 显示全部楼层
class Employee():  
    def __init__(self, name, job, grade, year, uid):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid

    def get_uid(self):
        return self.uid

    def get_name(self):
        return self.name

    def get_job(self):
        return self.job

    def get_grade(self):
        return self.grade

    def get_year(self):
        return self.year

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

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

class Manager(Employee):
    def salary(self):
        salary = 5000 + 1000 * (self.grade + self.year)
        return salary


#正文
def main():
    uid = 10000
    employee_list = {}
    jobs = {'E':[],'T':[],'M':[]}

    e_max_grade = 10
    t_max_grade = 6
    m_max_grade = 3

    while True:
        select = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
        if select == '1':
            name = input("姓名:")
            job = input("职位(E.普通员工;T.组长;M.经理):")
            year = int(input("工龄:"))
            grade = int(input("级别:"))

            if job == 'E':
                if grade > e_max_grade:
                    grade = int(input(("该职位最高级别职位为%d,请重新录入级别:" % e_max_grade)))
                    
                e = Employee(name, job, grade, year, uid)
                employee_list[uid] = e
                jobs['E'].append(e.get_uid())
                print("录入成功!姓名:%s,工号:%d,薪资:%d" % (e.get_name(), e.get_uid(), e.salary()) )
                uid = uid + 1

            if job == 'T':
                if grade > t_max_grade:
                    grade = int(input(("该职位最高级别职位为%d,请重新录入级别:" % t_max_grade)))
                    
                t = Teamleader(name, job, grade, year, uid)
                employee_list[uid] = t
                jobs['T'].append(t.get_uid())
                print("录入成功!姓名:%s,工号:%d,薪资:%d" % (t.get_name(), t.get_uid(), t.salary()) )
                uid = uid + 1
     
            if job == 'M':
                if grade > m_max_grade:
                    grade = int(input(("该职位最高级别职位为%d,请重新录入级别:" % m_max_grade)))
                    
                m = Manager(name, job, grade, year, uid)
                employee_list[uid] = m
                jobs['M'].append(m.get_uid())
                print("录入成功!姓名:%s,工号:%d,薪资:%d" % (m.get_name(), m.get_uid(), m.salary()) )
                uid = uid + 1

        if select == '2':
            stype = int(input("1.员工查询;2.职位查询:"))
            if stype == 1:
                suid = int(input("请输入工号:"))
               
                try:
                    result = employee_list[suid]
                except KeyError:
                    print("该工号不存在!")
                    continue
                    
                print("姓名:%s" % result.get_name())
                print("职位:%s" % result.get_job())
                print("级别:%d" % result.get_grade())
                print("工龄:%d" % result.get_year())
                print("薪资:%d" % result.salary())

            if stype == 2:
                sjob = input("职位(E.普通员工;T.组长;M.经理):")
                scnt = len(jobs[sjob])
               
                if sjob == 'E':
                    print("目前普通员工共有%d人:" % scnt)
                if sjob == 'T':
                    print("目前组长共有%d人:" % scnt)
                if sjob == 'M':
                    print("目前经理共有%d人:" % scnt)

                for iuid in jobs[sjob]:
                    #print(iuid)
                    #print(jobs)
                    ie = employee_list[iuid]
                    print("%d - %s" % (ie.get_uid(), ie.get_name()))
                    
        if select == '3':
            suid = int(input("请输入工号:"))
            e = employee_list[suid]
            print("%s ,工号:%d ,当前职位:%s,当前薪资:%d" % (e.get_name(), e.get_uid(),e.get_job() + str(e.get_grade()), e.salary() ))
            sgrade = int(input("请输入需要增加的级数:"))
            n_salsry = e.salary()  #目前的薪资
            
            if e.get_job() == 'E':
                if e.get_grade() + sgrade > e_max_grade :                  
                    e.grade = 1
                    e.job = 'T'

                    #更新数据库
                    #移出E类别,加入T类别
                    jobs['E'].remove(suid)
                    jobs['T'].append(suid)
                    #原来存的是Emloyee类,升级后变成Teamleader类
                    ne =  Teamleader(e.name, e.job, e.grade, e.year, e.uid)
                    employee_list[suid] = ne
               
                else:
                    e.grade = e.get_grade() + sgrade
                    
            if e.get_job() == 'T':
                if e.get_grade() + sgrade > t_max_grade :
                    e.grade = 1
                    e.job = 'M'

                    #更新数据库
                    #移出T类别,加入M类别
                    jobs['T'].remove(suid)
                    jobs['M'].append(suid)
                    #原来存的是Teamleader类,升级后变成Manager类
                    ne =  Manager(e.name, e.job, e.grade, e.year, e.uid)
                    employee_list[suid] = ne
                    
                else:
                    e.grade = e.get_grade() + sgrade

            if e.get_job() == 'M':
                if e.get_grade() + sgrade > m_max_grade :
                    print("已超经理最高级别,按最高级处理%d级" % m_max_grade)
                    e.grade = m_max_grade
                else:
                    e.grade = e.get_grade() + sgrade

            s_salary = ne.salary() #升级后的薪资
            gap_salary = s_salary - n_salsry

            #更新数据库(字典表)
            #上面直接修改了实例对象的属性值,不用在更新字典表了

            print("升级成功!")
            print("%s ,工号:%d ,当前职位:%s,升级后薪资:%d (+ %d )" % (ne.get_name(), ne.get_uid(),ne.get_job() + str(ne.get_grade()), ne.salary(), gap_salary))
      

                    
        if select == '4':
            suid = int(input("请输入工号:"))
            e = employee_list[suid]
            print("%s ,工号:%d ,当前职位:%s,当前薪资:%d" % (e.get_name(), e.get_uid(),e.get_job() + str(e.get_grade()), e.salary() ))
            sgrade = int(input("请输入需要减少的级数:"))
            n_salsry = e.salary()  #目前的薪资
            
            if e.get_job() == 'E':
                if e.get_grade() - sgrade<=0:
                    print("已超普通员工最低级别,按最低级处理1级")
                    e.grade = 1
               
                else:
                    e.grade = e.get_grade() - sgrade
                    
            if e.get_job() == 'T':
                if e.get_grade()  - sgrade<=0:
                    e.grade = e_max_grade
                    e.job = 'E'

                    #更新数据库
                    #移出T类别,加入E类别
                    jobs['T'].remove(suid)
                    jobs['E'].append(suid)
                    #原来存的是Teamleader类,降级后变成Employee类
                    ne =  Employee(e.name, e.job, e.grade, e.year, e.uid)
                    employee_list[suid] = ne
                    
                else:
                    e.grade = e.get_grade() - sgrade

            if e.get_job() == 'M':
                if e.get_grade()  - sgrade<=0:
                    e.grade = t_max_grade
                    e.job = 'T'

                    #更新数据库
                    #移出M类别,加入T类别
                    jobs['M'].remove(suid)
                    jobs['T'].append(suid)
                    #原来存的是Manager类,降级后变成Teamleader类
                    ne =  Teamleader(e.name, e.job, e.grade, e.year, e.uid)
                    employee_list[suid] = ne
                else:
                    e.grade = e.get_grade() - sgrade

            s_salary = ne.salary() #升级后的薪资
            gap_salary = n_salsry -s_salary

            #更新数据库(字典表)
            #上面直接修改了实例对象的属性值,不用在更新字典表了

            print("升级成功!")
            print("%s ,工号:%d ,当前职位:%s,升级后薪资:%d (- %d )" % (ne.get_name(), ne.get_uid(),ne.get_job() + str(ne.get_grade()), ne.salary(), gap_salary))

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

使用道具 举报

发表于 2023-3-19 11:43:14 | 显示全部楼层
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-3-19 10:44:20 | 显示全部楼层
0.通过类的继承,在子类中重写父类的方法,不同的子类的实例化对象调用同名的方法时就会呈现不一样的作用效果。
1.可以很好的应对各种不同的输入对象,扩展了运算符、函数和对象的功能丰富性
2可以,这里体现的就是运算符的多样性
3.你看起来像鸭子,那么你就是鸭子
4.降低了耦合度
5.不是,两次运算都是对数据类型求和,没有体现不同场景这个条件

0.
class Staff:
    def __init__(self,name,job,grade,year,uid):
        self.name=name
        self.job=job
        self.grade=grade
        self.year=year
        self.uid=uid
   
    #获取员工工号
    def get_uid(self):
        return self.uid
   
    #获取员工名字
    def get_name(self):
        return self.name
   
    #获取员工职位
    def get_job(self):
        return self.job
   
    #获取员工等级
    def get_grade(self):
        return self.grade
   
    #获取员工工龄
    def get_year(self):
        return self.year
   
    def salary(self):
        pass
   
class Employee(Staff):  
    def salary(self):
        grade=self.get_grade()
        age=self.get_year()
        return 3000+500*grade+50*age
   
class Teamleader(Staff):
    def salary(self):
        grade=self.get_grade()
        age=self.get_year()
        return 4000+800*grade+100*age
   
class Manager(Staff):
    def salary(self):
        grade=self.get_grade()
        age=self.get_year()
        return 5000+1000*(grade+age)
   
class Main:
    message={}
    uid=10000
   
    #录入功能
    def entering(self):
        name=input("请输入员工姓名:")
        job=input("请输入职位(E:普通员工;T:组长;M:经理):")
        while True:
            try:
                year=int(input("请输入工龄:"))
                break
            except ValueError:
                print("必须输入整数!")
               
        while True:
            try:
                grade=int(input("请输入级别:"))
                if job=='E' and grade>10:
                    raise TypeError("该职位最高级别为10\n请重新输入!")
                if job=='T' and grade>6:
                    raise TypeError("该职位最高级别为6\n请重新输入!")
                if job=='M' and grade>3:
                    raise TypeError("该职位最高级别为3\n请重新输入!")
                    
                break
            except ValueError:
                print("必须输入整数!")
            
            except TypeError as e:
                print(e)
        
        if job=='E':
            staff=Employee(name,job,grade,year,self.uid)
            
        elif job=='T':
            staff=Teamleader(name,job,grade,year,self.uid)
        
        elif job=='M':
            staff=Manager(name,job,grade,year,self.uid)
            
        self.message[self.uid]=staff
        salary=staff.salary()
        self.uid+=1
        print("录入成功!")
        print(f"姓名:{staff.get_name()} 工号:{staff.get_uid()} 薪资{salary}")
           
    #验证输入工号是否存在
    def uid_verify(self,uid):
        if not self.message.get(uid):
            print("工号不存在!")
        else:
            return uid
        
    #统计员工人数(与查询功能的find()方法结合使用)
    def people_num(self,ty):
        count=0
        ls=[]
        for each in self.message.values():
            if each.job==ty:
                ls.append(each)
                count+=1
        if ty=='E':
            job="普通员工"
        elif ty=='T':
            job="组长"
        elif ty=='M':
            job="经理"
        
        return job,count,ls
   
    #查询功能         
    def find(self):
        way=input("1.员工查询;2.职位查询:")
        
        if way=='1':
            uid=int(input("请输入工号:"))
            uid=self.uid_verify(uid)
            if uid:
                staff=self.message[uid]
                salary=staff.salary()
                print(f"姓名:{staff.get_name()}\n职位:{staff.get_job()}")
                print(f"级别:{staff.get_grade()}\n薪资:{salary}")
        if way=='2':
            job=input("职位(E:普通员工;T:组长;M:经理:)")
            re=self.people_num(job)
            if re[1]==0:
                print(f"目前公司没有{re[0]}位置")
            else:
                print(f"目前{re[0]}共有{re[1]}人")
                for each in re[2]:
                    print(f"{each.uid}-{each.name}")
               
            
    #升级功能
    def up_grade(self):
        uid=int(input("请输入工号:"))
        uid=self.uid_verify(uid)
        if uid:
            staff=self.message[uid]
            salary1=staff.salary()
            print(f"姓名:{staff.get_name()} 工号:{uid} 职位:{staff.get_job()}\
                  当前薪资:{salary1}")
            
            add_grade=int(input("请输入要增加的级数:"))
            
            job=staff.job
            grade=staff.grade
            if job=='E' and grade+add_grade>10:
                self.message[uid]=Teamleader(staff.name,'T',1,staff.year,uid)
              
            else:
                staff.grade+=add_grade
               
            if job=='T' and grade+add_grade>6:
                self.message[uid]=Manager(staff.name,'M',1,staff.year,uid)
            
            else:
                staff.grade+=add_grade
               
            if job=='M' and grade+add_grade>3:
                staff.grade==3
            
            else:
                staff.grade+=add_grade
            
            new_staff=self.message[uid]
            salary2=new_staff.salary()
            print("升级成功!")
            print(f"姓名:{new_staff.get_name()}\n工号:{uid}\n职位:{new_staff.get_job()}")
            print(f"升级后薪资:{salary2}+({salary2-salary1})")
   
    #降级功能
    def down_grade(self):
        uid=int(input("请输入工号:"))
        uid=self.uid_verify(uid)
        if uid:
            staff=self.message[uid]
            salary1=staff.salary()
            print(f"姓名:{staff.get_name()} 工号:{uid} 职位:{staff.get_job()}\
                  当前薪资:{salary1}")
            
            add_grade=int(input("请输入要减少的级数:"))
            
            job=staff.job
            grade=staff.grade
            if job=='E' and grade-add_grade<=0:
                staff.grade==1
            
            else:
                staff.grade-=add_grade
               
            if job=='T' and grade-add_grade<=0:
                self.message[uid]=Teamleader(staff.name,'E',10,staff.year,uid)
            
            else:
                staff.grade-=add_grade
               
            if job=='M' and grade-add_grade<=0:
                self.message[uid]=Teamleader(staff.name,'T',6,staff.year,uid)
            
            else:
                staff.grade-=add_grade
               
            new_staff=self.message[uid]
            salary2=new_staff.salary()
            print("降级成功!")
            print(f"姓名:{new_staff.get_name()}\n工号:{uid}\n职位:{new_staff.get_job()}")
            print(f"降级后薪资:{salary2}-({salary1-salary2})")
   
    #程序功能接口
    def main(self):
        while True:
            order=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
            
            if order=='1':
                self.entering()
            
            elif order=='2':
                self.find()
            
            elif order=='3':
                self.up_grade()
            
            elif order=='4':
                self.down_grade()
               
            elif order=='5':
                break
            
            else:
                print("输入命令有误!")
               
m=Main()
m.main()
               
               
            
            
               
            
            
               
            
        
        
        
        
        
        
        
               
        
            

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

使用道具 举报

发表于 2023-3-18 23:39:35 | 显示全部楼层
打卡
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-18 15:43:17 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-18 10:06:27 From FishC Mobile | 显示全部楼层
0.
面向对象的多态是通过继承的重写和不同对象调用同名方法实现的。
1.
一类代码可以实现多种功能,让代码更简洁。
2.
可以,这就是多态
多态是指运算符,函数,对象在不同的状态下具有不同的作用。
3.
美国印第安纳州的诗人詹姆斯·惠特科姆·莱利(James Whitcomb Riley, 1849 ~ 1916)的诗句
“如果有个东西看起来像鸭子,游的像鸭子,叫的像鸭子,把它应该就是个鸭子。”
4.
提高了内聚,因为只要实质一样,形式不一样也可以实现某这功能,提高了内聚。
5.
不是多态
多态是指不同的场景下产生不同的作用。这里是将z参数提前赋值,场景本身没有变化,所以不算多态。

动动手
0.

class Employee:
    def __init__(self,name,job,grade,year,uid):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid
    def get_uid(self):
        return self.uid
    def get_name(self):
        return self.name
    def get_job(self):
        return self.job
    def get_grade(self):
        return self.grade
    def get_year(self):
        return self.year
    def salary(self,job):
        if job == 'E':
            mon = 3000 + 500 * self.grade + 50 * self.year
        elif job == 'T':
            mon = 4000 + 800 * self.grade + 100 * self.year
        elif job == 'M':
            mon = 5000 + 1000 * (self.grade + self.year)
        return mon


def main():
    worker = []
    uid = 10000
    while True:
        print(uid)
        s = input('1.录入;2.查询;3.升级;4.降级;5.退出:')
        if s == '1':
            name = input('姓名:')
            job = input('职位(E.普通员工;T.组长;M.经理):')
            while job not in ('E','T','M'):
                job = input('只能输入E.T.M,请重新输入:')
            year = int(input('工龄:'))
            grade = int(input('级别:'))
            if job == 'E' :
                while grade <= 0 or grade > 10:
                    grade = int(input('该职位最高级别为10z最小为1,请重新输入:'))
            elif job == 'T':
                while grade <= 0 or grade > 6:
                    grade = int(input('该职位最高级别为6最小为1,请重新输入:'))
            else:
                while grade <= 0 or grade > 3:
                    grade = int(input('该职位最高级别为3最小为1,请重新输入:'))
            worker.append(Employee(name,job,grade,year,uid))
            print(f'录入成功,姓名:{name},工号:{uid},薪资:{worker[-1].salary(job)}')
            uid += 1
        elif s == '2':
            print(uid)
            find = input('1.员工查询;2.职位查询:')
            if find == '1':
                yuid = int(input('请输入工号:'))
                for i in worker:
                    if i.uid == yuid:
                        print(f'姓名:{i.name}',f'职位:{i.job}',f'级别:{i.grade}',f'工龄:{i.year}',f'薪资:{i.salary(i.job)}',sep = '\n')
                        break
                else:
                    print('该工号不存在')
            elif find == '2':
                w = []
                job = input('职位(E.普通员工;T.组长;M.经理):')
                while job != 'E' and job != 'T' and job != 'M':
                    job = input('输入错误,请重新输入:')
                for j in worker:
                    if j.job == job:
                        w.append(str(j.uid)+'-'+j.name)
                if len(w) == 0:
                    if job == 'E':
                        print('目前公司么有普通员工!')
                    elif job == 'T':
                        print('目前公司没有组长!')
                    elif job == 'M':
                        print('目前公司没有经理!')
                else:
                    if job == 'E':
                        a = '普通员工'
                    elif job == 'T':
                        a = '组长'
                    elif job == 'M':
                        a = '经理'
                print(f'目前{a}共有{len(w)}人:')
                for k in w:
                    print(k)
                w.clear()
        elif s == '3':
            yuid = int(input('请输入工号:'))
            worker.append(' ')
            for l in worker:
                if l.uid == yuid:
                    print(f'{l.name},工号:{l.uid},当前职位:{l.job + str(l.grade)},当前薪资:{l.salary(l.job)}')
                    break
            else:
                print('该工号不存在')
            gra = int(input('请输入需要增加的级数:'))
            if gra < 0:
                print('只能输入正整数或0')
            l.grade += gra           
            if l.job == "E" and l.grade > 10:
                l.job = "T"
                l.grade = 1
            elif l.job == "T" and l.grade > 6:
                l.job = "M"
                l.grade = 1
            elif l.job == "M" and l.grade > 3:
                l.job = "M"
                l.grade = 3
            print('升级成功')
            print(f'{l.name} 工号:{l.uid},升级后的职位{l.job + str(l.grade)},升级后的薪资:{l.salary(l.job)}')
            worker.pop()
        elif s == '4':
            yuid = int(input('请输入工号:'))
            worker.append(' ')
            for l in worker:
                if l.uid == yuid:
                    print(f'{l.name},工号:{l.uid},当前职位:{l.job + str(l.grade)},当前薪资:{l.salary(l.job)}')
                    break
            else:
                print('该工号不存在')
            gra = int(input('请输入需要减少的级数:'))
            if gra < 0:
                print('只能输入正整数或0')
            l.grade -= gra           
            if l.job == "M" and l.grade < 1:
                l.job = "T"
                l.grade = 6
            elif l.job == "T" and l.grade < 1:
                l.job = "E"
                l.grade = 10
            elif l.job == "E" and l.grade < 1:
                l.job = "E"
                l.grade = 1
            print('降级成功')
            print(f'{l.name} 工号:{l.uid},升级后的职位{l.job + str(l.grade)},升级后的薪资:{l.salary(l.job)}')         
            worker.pop()
            
        elif s == "5":
            break

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

使用道具 举报

发表于 2023-3-17 10:47:33 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-15 09:35:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-14 23:47:05 | 显示全部楼层
0
同样的

动手
class PromoteCheckMixin:
    def promotecheck(self, cate, jo, gra):
        if cate:
            if (gra >= 3 and jo == 'M'):
                print('已是最高级,无法升级。')
                return jo, 3
            elif gra >= 6 and jo == 'T':
                jo = 'M'
                return jo, 1
            elif gra >= 10 and jo == 'E':
                jo = 'T'
                return jo, 1
            else:
                return jo, gra
        else:
            if gra <= 0 and jo == 'E':
                print('已是最低级,无法降级。')
                return jo, 1
            elif gra <= 0 and jo == 'M':
                jo = 'T'
                gra = 6
            elif gra <= 0 and jo == 'T':
                jo = 'E'
                gra = 10
            return jo, gra

# 员工分类
class Emp_category:
    def __init__(self):
        self.Employee = [3000, 500, 50]
        self.Teamleader = [4000, 800, 100]
        self.Manager = [5000, 1000, 1000]

# 员工信息类
class Employee(Emp_category):
    def __init__(self, name, job, grade, year, uid):
        super().__init__()
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid
        self.sala = self.salary()

    #员工方法
    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):
        base = self.Employee if self.job == 'E' else self.Teamleader if self.job == 'T' else self.Manager
        return base[0] + base[1]*self.grade + base[2]*self.year


# 功能管理类
class Manage(PromoteCheckMixin):
    def __init__(self):
        self.employees = {}
        self.uid = 10000

    # 登录初始化
    def welcome(self):
        ins = input('1.录入 2.查询 3.升级 4.降级 5.退出')
        while ins:
            if ins == '1':
                self.typein()
            if ins == '2':
                self.search()
            if ins == '3':
                self.upgrade()
            if ins == '4':
                self.downgrade()
            if ins == '5':
                print('退出系统。')
                break
            print()
            ins = input('1.录入 2.查询 3.升级 4.降级 5.退出  ')

    # 录入
    def typein(self):
        name = input('姓名:')
        job = input('职位(E.普通员工 T.组长 M.经理):')
        year = int(input('工龄:'))
        grade = int(input('级别:'))
        while 1:
            if job == 'E' and grade > 10:
                grade = int(input('该职位最高级别为10,请重新录入级别:'))
            if job == 'T' and grade > 6:
                grade = int(input('该职位最高级别为6,请重新输入级别:'))
            if job == 'M' and grade > 3:
                grade = int(input('该职位最高级别为3,请重新输入级别:'))
            break

        emp = Employee(name, job, grade, year, self.uid)
        self.employees[self.uid] = emp
        print(self.employees)
        print(self.employees[self.uid].sala)
        print(f'录入成功!姓名:{self.employees[self.uid].name},工号:{self.uid},薪资:{self.employees[self.uid].sala}')
        self.uid += 1

    # 查询
    def search(self):
        comm = input('1.工号查询 2.职位查询:')
        if comm == '1':
            userid = int(input('请输入工号:'))
            while userid not in self.employees.keys():
                userid = int(input('工号不存在,请重新输入:'))
            print(f'姓名:{self.employees[userid].name}')
            print(f'职位:{self.employees[userid].job}')
            print(f'级别:{self.employees[userid].grade}')
            print(f'工龄:{self.employees[userid].year}')
            print(f'薪资:{self.employees[userid].salary()}')
        else:
            jobtem = input('职位(E.普通员工 T.组长 M.经理):')
            jobtitle = '普通员工' if jobtem=='E' else '组长' if jobtem=='T' else '经理'
            count = 0
            personlist = []
            for each in self.employees:
                if self.employees[each].job == jobtem:
                    count += 1
                    personlist.append(' - '.join([str(self.employees[each].uid),self.employees[each].name]))
            print(f'目前{jobtitle}共有 {count} 人')
            for i in personlist:
                print(i)

    # 升级
    def upgrade(self):
        userid = int(input('请输入工号:'))
        while userid not in self.employees.keys():
            userid = int(input('工号不存在,请重新输入:'))
        print(f'{self.employees[userid].name},工号:{userid},当前职位:{self.employees[userid].job}+{self.employees[userid].grade},当前薪资:{self.employees[userid].salary()}')
        up = int(input('请输入需要增加的级数:'))
        mark = 1
        oldsala = self.employees[userid].salary()
        self.employees[userid].grade += up
        res = self.promotecheck(mark, self.employees[userid].job, self.employees[userid].grade)
        self.employees[userid].job = res[0]
        self.employees[userid].grade = res[1]
        print('升级成功!')
        print(f'{self.employees[userid].get_name()},工号:{userid},升级后职位:{self.employees[userid].get_job()}+{self.employees[userid].get_grade()},升级后薪资:{self.employees[userid].salary()}(+{self.employees[userid].salary() - oldsala})')

    # 降级
    def downgrade(self):
        userid = int(input('请输入工号:'))
        while not userid in self.employees.keys():
            userid = input('工号不存在,请重新输入:')
        print(f'{self.employees[userid].name},工号:{userid},当前职位:{self.employees[userid].job}+{self.employees[userid].grade},当前薪资:{self.employees[userid].salary()}')
        down = int(input('请输入需要减少的级数:'))
        mark = 0
        oldsala = self.employees[userid].salary()
        self.employees[userid].grade -= down
        res = self.promotecheck(mark, self.employees[userid].job, self.employees[userid].grade)
        self.employees[userid].job = res[0]
        self.employees[userid].grade = res[1]
        print('降级成功!')
        print(f'{self.employees[userid].get_name()},工号:{userid},降级后职位:{self.employees[userid].get_job()}+{self.employees[userid].get_grade()},降级后薪资:{self.employees[userid].salary()}({self.employees[userid].salary() - oldsala})')

def main():
    e = Manage()
    e.welcome()

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

使用道具 举报

发表于 2023-3-13 22:13:40 | 显示全部楼层
已思考
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-19 07:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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