zhangyh0622 发表于 2023-3-18 15:43:17

1

boyi-y 发表于 2023-3-18 10:06:27

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()         
            

donglincao 发表于 2023-3-17 10:47:33

1

oslen 发表于 2023-3-15 09:35:58

{:5_106:}

Artemis_ 发表于 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 =
      self.Teamleader =
      self.Manager =

# 员工信息类
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 + base*self.grade + base*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 = emp
      print(self.employees)
      print(self.employees.sala)
      print(f'录入成功!姓名:{self.employees.name},工号:{self.uid},薪资:{self.employees.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.name}')
            print(f'职位:{self.employees.job}')
            print(f'级别:{self.employees.grade}')
            print(f'工龄:{self.employees.year}')
            print(f'薪资:{self.employees.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.job == jobtem:
                  count += 1
                  personlist.append(' - '.join(.uid),self.employees.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.name},工号:{userid},当前职位:{self.employees.job}+{self.employees.grade},当前薪资:{self.employees.salary()}')
      up = int(input('请输入需要增加的级数:'))
      mark = 1
      oldsala = self.employees.salary()
      self.employees.grade += up
      res = self.promotecheck(mark, self.employees.job, self.employees.grade)
      self.employees.job = res
      self.employees.grade = res
      print('升级成功!')
      print(f'{self.employees.get_name()},工号:{userid},升级后职位:{self.employees.get_job()}+{self.employees.get_grade()},升级后薪资:{self.employees.salary()}(+{self.employees.salary() - oldsala})')

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

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

main()

battery 发表于 2023-3-13 22:13:40

已思考

陈年老咸鱼 发表于 2023-3-13 21:31:02

{:10_269:}

yangmiao07 发表于 2023-3-12 18:14:17

1

语冰 发表于 2023-3-12 15:52:51

1

nmdorceo 发表于 2023-3-12 12:19:11

0.不同场景下采取不同的作用
1.方便理解和运算,一切都是那么的理所应当
2.可以称为多态
3.龙生龙,凤生凤,老鼠生的会打洞
4.降低了耦合度
5.不属于
动动手:
0.
class Attribute:
    def __init__(self, name, job, grade, year, salary):
      self.name = name
      self.job = job
      self.grade = grade
      self.year = year
      self.salary = salary

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

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

class RegradeMixin:
    def up_job_grade(self, job, grade):
      self.level = int(input("请输入需要增加的级数:"))
      #self.totallevel = 0
      
      if job == "E":
            self.totallevel = int(grade) + self.level
      elif job == "T":
            self.totallevel = int(grade) + self.level + 10
      elif job == "M":
            self.totallevel = int(grade) + self.level + 16
            #print(self.totallevel, "--1")
      while self.totallevel > 19:
            self.level = int(input("增加级数超出范围,请重新输入需要增加的级数:"))
            if job == "E":
                self.totallevel = int(grade) + self.level
            elif job == "T":
                self.totallevel = int(grade) + self.level + 10
            elif job == "M":
                self.totallevel = int(grade) + self.level + 16
      else:
            
            if job == "E" and self.totallevel <= 10:
                self.grade = self.totallevel
            elif job == "E" and 10 < self.totallevel <= 16:
                self.job = "T"
                self.grade = 1
            elif job == "E" and 16 < self.totallevel <= 19:
                self.job = "M"
                self.grade = 1
            elif job == "T" and 10 < self.totallevel <= 16:
                self.grade = self.totallevel - 10
            elif job == "T" and 16 < self.totallevel <= 19:
                self.job = "M"
                self.grade = 1
            elif job == "M" and 16 < self.totallevel <= 19:
                self.grade = self.totallevel - 10 - 6
      return self.job, self.grade
   
    def down_job_grade(self, job, grade):
      
      self.level =-int(input("请输入需要减少的级数:"))
      if job == "E":
            self.totallevel = int(grade) + self.level
      elif job == "T":
            self.totallevel = int(grade) + self.level + 10
      elif job == "M":
            self.totallevel = int(grade) + self.level + 16
      while self.totallevel < 1:
            self.level =-int(input("增加级数超出范围,请重新输入需要减少的级数:"))
            if job == "E":
                self.totallevel = int(grade) + self.level
            elif job == "T":
                self.totallevel = int(grade) + self.level + 10
            elif job == "M":
                self.totallevel = int(grade) + self.level + 16
      else:
            if job == "E" and self.totallevel <= 10:
                self.grade = self.totallevel
            elif job == "T" and 10 < self.totallevel <= 16:
                self.grade = self.totallevel - 10
            elif job == "T" and self.totallevel <= 10:
                self.job = "E"
                self.grade = 10
            elif job == "M" and self.totallevel <= 10:
                self.job = "E"
                self.grade = 10
            elif job == "M" and 10 < self.totallevel <= 16:
                self.job = "T"
                self.grade = 6
            elif job == "M" and 16 < self.totallevel <= 19:
                self.grade = self.totallevel - 10 - 6
      return self.job, self.grade

class Manager(gradecheckMixin, salaryMixin, RegradeMixin):
    Managerdict = {"E":{}, "T":{}, "M":{}}
    uid = 10000
    def get_name(self):
      self.name = input("姓名:")
      return self.name
   
    def get_job(self):
      self.job = input("职位(E.普通员工;T.组长;M.经理):")
      return self.job
   
    def get_year(self):
      self.year = input("工龄:")
      return self.year
   
    def get_grade(self):
      self.grade = input("级别:")
      super().gradecheck(self.job, self.grade)
      return self.grade
   
    def get_salary(self):
      super().salarycompute(self.job, self.grade, self.year)
      return self.salary
   
    def record(self):
      self.Managerdict = Attribute(self.name, self.job, self.grade, self.year, self.salary)
      print(f"录入成功!姓名:{self.name}, 工号:{self.uid}, 薪资:{self.salary}", "\n")
      self.uid += 1

    def inquire_uid(self):
      self.__uid = int(input("请输入工号:"))
      for i in self.Managerdict.values():            
            if i.get(self.__uid) == None:
                continue
            else:
                print("姓名:", i.get(self.__uid).name)
                print("职位:", i.get(self.__uid).job)
                print("级别:", i.get(self.__uid).grade)
                print("工龄:", i.get(self.__uid).year)
                print("薪资:", i.get(self.__uid).salary, "\n")
               
      if self.Managerdict["E"].get(self.__uid) == self.Managerdict["T"].get(self.__uid) == self.Managerdict["M"].get(self.__uid) == None:
            print("该工号不存在!", "\n")
            
    def inquire_job(self):
      self.__job = input("职位(E.普通员工;T.组长;M.经理):")
      if len(self.Managerdict) != 0:
            print(f"目前普通员工共有{len(self.Managerdict)}人:")
            for i in self.Managerdict:
                print(f"{i} - {self.Managerdict.name}", "\n")
      else:
            self.__dict = {"E":"普通员工", "T":"组长", "M":"经理"}
            print(f"目前公司没有{self.__dict}!", "\n")
            
    def upgrade(self):
      self.__uid = int(input("请输入工号:"))
      for i in self.Managerdict.values():
            if i.get(self.__uid):
                print(f"{i.get(self.__uid).name},工号:{self.__uid}, 当前职位:{i.get(self.__uid).job + str(i.get(self.__uid).grade)},当前薪资:{i.get(self.__uid).salary}")
                self.fron_salary = i.get(self.__uid).salary
                super().up_job_grade(i.get(self.__uid).job, i.get(self.__uid).grade)
                i.job = self.job
                i.grade = self.grade
                super().salarycompute(i.get(self.__uid).job, i.get(self.__uid).grade, i.get(self.__uid).year)
                i.salary = self.salary
                self.now_salary = i.get(self.__uid).salary
                self.__updatedict = i.pop(self.__uid)
                self.Managerdict = Attribute(self.__updatedict.name, self.__updatedict.job, self.__updatedict.grade, self.__updatedict.year, self.__updatedict.salary)
                print("升级成功!")
                for j in self.Managerdict.values():   
                  if j.get(self.__uid):
                        print(f"{j.get(self.__uid).name},工号:{self.__uid}, 升级后职位:{j.get(self.__uid).job + str(j.get(self.__uid).grade)},升级后薪资:{j.get(self.__uid).salary}({(self.now_salary-self.fron_salary):+})", "\n")
                break

    def downgrade(self):
      self.__uid = int(input("请输入工号:"))
      for i in self.Managerdict.values():
            if i.get(self.__uid) :
                print(f"{i.get(self.__uid).name},工号:{self.__uid}, 当前职位:{i.get(self.__uid).job + str(i.get(self.__uid).grade)},当前薪资:{i.get(self.__uid).salary}")
                self.fron_salary = i.get(self.__uid).salary
                super().down_job_grade(i.get(self.__uid).job, i.get(self.__uid).grade)
                i.job = self.job
                i.grade = self.grade
                super().salarycompute(i.get(self.__uid).job, i.get(self.__uid).grade, i.get(self.__uid).year)
                i.salary = self.salary
                self.now_salary = i.get(self.__uid).salary
                self.__updatedict = i.pop(self.__uid)
                self.Managerdict = Attribute(self.__updatedict.name, self.__updatedict.job, self.__updatedict.grade, self.__updatedict.year, self.__updatedict.salary)
                print("降级成功!")
                for j in self.Managerdict.values():   
                  if j.get(self.__uid):
                        print(f"{j.get(self.__uid).name},工号:{self.__uid}, 降级后职位:{j.get(self.__uid).job + str(j.get(self.__uid).grade)},降级后薪资:{j.get(self.__uid).salary}({(self.now_salary-self.fron_salary):+})", "\n")
                break
                  

               
      

   
def main():
    m = Manager()
    while True:
      command = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
      if command == "1":
            m.get_name()
            m.get_job()
            m.get_year()
            m.get_grade()
            m.get_salary()
            m.record()
      elif command == "2":
            comand_ = input("1.员工查询;2.职位查询:")
            if comand_ == "1":
                m.inquire_uid()
            else:
                m.inquire_job()
      elif command == "3":
            m.upgrade()
      elif command == "4":
            m.downgrade()
      elif command == "5":
            break
      
main()

wtc 发表于 2023-3-11 16:37:24

来了

CoupleHunnid 发表于 2023-3-11 15:21:44

{:10_279:}

人间无事人 发表于 2023-3-11 15:09:39

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.不算吧,只是做了默认参数的功能

么11 发表于 2023-3-10 14:53:57

8

hfhgjgjk 发表于 2023-3-9 23:10:53

川响 发表于 2023-3-9 17:53:01

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.

荧荧怪 发表于 2023-3-8 20:52:02

0. 同一种函数,使用不同的类时,实现不同的功能
1. 封装,容易阅读,
2. 可以
3. 没有一只鸭子能活着走出南京
4. 降低耦合度
5. 不属于
0. class Men:
    uid = 10000
    def __init__(self, name = None, job = None, grade = 0, year = 0):
      self.name = name
      self.job = job
      self.grade = grade
      self.year = year

    def get_name(self):
      self.name = input("姓名:")
      return self.name
      
    def get_job(self):
      self.job = input("职位(E.普通员工;T.组长;M.经理):")
      return self.job
      
    def get_grade(self):
      self.grade = int(input("级别:"))
      return self.grade
      
    def get_year(self):
      self.year = int(input("工龄:"))
      return self.year
      
    def get_uid(self):
      return self.uid

    def p(self):
      print(self.gather.__dict__)
#-----------------------------------------------------------------------------------------------      
class Employee(Men):
    gather = {}
    def salary(self, grade, year):
      return (3000 + 500 * grade + 50 * year)
   
class Teamleader(Men):
    gather = {}
    def salary(self, grade, year):
      return (4000 + 800 * grade + 100 * year)

class Manager(Men):
    gather = {}
    def salary(self, grade, year):
      return (5000 + 1000 * (grade + year))
#-----------------------------------------------------------------------------------------------   
def get_salary(job, grade, year):
    if job == "E":
      s = Employee()
      while grade > 10 or grade <= 0:
            grade = int(input("该职位最高级别为10,请重新输入:"))
    if job == "T":
      s = Teamleader()
      while grade > 6 or grade <= 0:
            grade = int(input("该职位最高级别为6,请重新输入:"))
    if job == "M":
      s = Manager()
      while grade > 3 or grade <= 0:
            grade = int(input("该职位最高级别为3,请重新输入:"))
    return (s.salary(grade, year), grade)

def get_group(job,men):
    if job == "E":
      s = Employee()
      s.gather = men
    if job == "T":
      s = Teamleader()
      s.gather = men
    if job == "M":
      s = Manager()
      s.gather = men
#-----------------------------------------------------------------------------------------------
class Mange(Men):
    gather = {}
    def lu_ru(self):
      name = self.get_name()
      job = self.get_job()
      year = self.get_year()
      grade = self.get_grade()
      sal, grade = get_salary(job, grade, year)
      men = Men(name, job, grade, year)
      men.salary = sal
      self.gather = men
      get_group(job,men)
      print(self.gather.__dict__)
      Men.uid += 1
      
    def cha_xu_01(self):
      gong_hao = int(input("请输入工号:"))
      print(self.gather)
      if not self.gather.get(gong_hao):
            print("工号不存在!")
      else:
            print("姓名:", self.gather.name)
            print("职位:", self.gather.job)
            print("级别:", self.gather.grade)
            print("工龄:", self.gather.year)
            print("薪资:", self.gather.salary)
    def cha_xu_02(self):
      zhi_wei = input("职位(E.普通员工;T.组长;M.经理):")
      if zhi_wei == "E":
            s = Employee()
            print(f"目前普通员工有{ len(s.gather)}人")
            for i in s.gather:
                print("工号:", i, "姓名:", s.gather.name)
      elif zhi_wei == "T":
            s = Teamleader()
            print(f"目前组长有{ len(s.gather)}人")
      elif jzhi_weiob == "M":
            s = Manager()
            print(f"目前经理有{ len(s.gather)}人")
      else:
            print("职位不存在!")
    def cha_xu(self):
      one_or_two = int(input("1.员工查询;2.职位查询:"))
      if one_or_two == 1:
            self.cha_xu_01()
      elif one_or_two == 2:
            self.cha_xu_02()
            
    def sheng_zhi(self):
      num = int(input("请输入工号:"))
      if self.gather.get(num):
            print(f"{self.gather.name}, 工号:{num}, 当前职位{self.gather.job}{self.gather.grade}, 当前薪资:{self.gather.salary}")
      else:
            print("工号不存在!")
      up_num = int(input("请输入需要增加的级数:"))
      if self.gather.job == "E":
            base = self.gather.grade + up_num
            if base > 10:
                self.gather.job = "T"
                self.gather.grade = 1
                sal, grade = get_salary(self.gather.job, self.gather.grade, self.gather.year)
                self.gather.salary = sal
                print("升职成功!")
                print(f"{self.gather.name}, 工号:{num}, 升职后职位{self.gather.job}{self.gather.grade}, 升职后薪资:{self.gather.salary}")
                return
            else:
                self.gather.grade = base
                sal, grade = get_salary(self.gather.job, self.gather.grade, self.gather.year)
                self.gather.salary = sal
                print("升职成功!")
                print(f"{self.gather.name}, 工号:{num}, 升职后职位:{self.gather.job}{self.gather.grade}, 升职后薪资:{self.gather.salary}")
                return
      if self.gather.job == "T":
            base = self.gather.grade + up_num
            if base > 6:
                self.gather.job = "M"
                self.gather.grade = 1
                sal, grade = get_salary(self.gather.job, self.gather.grade, self.gather.year)
                self.gather.salary = sal
                print("升职成功!")
                print(f"{self.gather.name},工号:{num},升职后职位:{self.gather.job}{self.gather.grade}, 升职后薪资:{self.gather.salary}")
                return
            else:
                self.gather.grade = base
                sal, grade = get_salary(self.gather.job, self.gather.grade, self.gather.year)
                self.gather.salary = sal
                print("升职成功!")
                print(f"{self.gather.name}, 工号:{num}, 升职后职位:{self.gather.job}{self.gather.grade}, 升职后薪资:{self.gather.salary}")
                return
      if self.gather.job == "M":
            base = self.gather.grade + up_num
            if base > 3:
                self.gather.grade = 3
                sal, grade = get_salary(self.gather.job, self.gather.grade, self.gather.year)
                self.gather.salary = sal
                print("升职成功!已是最高职位了")
                print(f"{self.gather.name}, 工号:{num}, 升职后职位{self.gather.job}{self.gather.grade}, 升职后薪资:{self.gather.salary}")
                return
            else:
                self.gather.grade = base
                sal, grade = get_salary(self.gather.job, self.gather.grade, self.gather.year)
                self.gather.salary = sal
                print("升职成功!")
                print(f"{self.gather.name},工号:{num},升职后职位{self.gather.job}{self.gather.grade}, 升职后薪资:{self.gather.salary}")
                return
#-----------------------------------------------------------------------------------------------
def main():
    m = Mange()
    while True:
      order = input("1.录入;2.查询;3.升职;4.降职;5.退出:")
      if order == '5':
            print("已退出。")
            break
      elif order == '1':
            m.lu_ru()
      elif order == '2':
            m.cha_xu()
      elif order == '3':
            m.sheng_zhi()

main()

小小孛 发表于 2023-3-8 18:07:29

0

lbh8399 发表于 2023-3-8 17:58:44

0.一个方法可以用在不同类型的数据上
1.可以让方法使用更加简洁
2.可以的
3.
4.降低耦合
5.不是

阿伟同学 发表于 2023-3-7 14:37:20

本帖最后由 阿伟同学 于 2023-3-8 09:32 编辑

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):
      job = self.job
      if job.upper() == 'E':
            return 3000 + 500 * self.grade + 50 * self.year
      elif job.upper() == 'T':
            return 4000 + 800 * self.grade + 100 * self.year
      elif job.upper() == 'M':
            return 5000 + 1000 * (self.grade + self.year)

class Mixin:
    defis_uid_exist(self):
      uid = int(input("请输入工号:").strip())
      if uid not in self.staffs:
            return None
      return uid
   
    def is_grade_match_job(self, job, grade):
      min_grade, max_grade = self.job_state, self.job_state

      while grade > max_grade or grade < min_grade:
            grade = int(input(f"该职位的最该级别为{max_grade},请重新录入级别:").strip())
      return grade

    def is_job_exist(self, job):
      while job not in :
            job = input("请输入正确的职位缩写(E/T/M):").strip()
      return job

    def jin_wei_qi(self, _min, _max, pre, c):
      if pre + c < _min:
            return -1
      elif pre + c > _max:
            return 1
      else:
            return 0

    def chage_grade(self, staff, job, grade, c):
      min_grade, max_grade = self.job_state, self.job_state      
      r = self.jin_wei_qi(min_grade, max_grade, grade, c)
      l = list(self.jobs.keys())
      if r == -1:
            if job != l:
                self.jobs.remove(staff)
                index = l.index(job) - 1
                self.jobs].append(staff)
                return l + str(self.job_state])
            else:
                return l + self.job_state]
      elif r == 1:
            if job != l[-1]:
                self.jobs.remove(staff)
                index = l.index(job) + 1
                self.jobs].append(staff)
                return l + str(self.job_state])
            else:
                return l[-1] + self.job_state]
      else:
            return job + str(grade + c)
   
class Manage(Mixin):
    staffs = {}
    uid = 10000
    jobs = dict(zip('ETM', [[], [], []]))
    job_state = dict([('E', ("普通员工", 1, 10)), ('T', ("组长", 1, 6)), ('M', ("经理", 1, 3))])

    def manage(self):
      while True:
            ins = input("\n1.录入;2.查询;3.升级;4.降级;5.退出:").strip()
            if ins == '5':
                break
            elif ins == '1':
                self.register()
            elif ins == '2':
                self.find()
            elif ins == '3':
                self.upgrade()
            elif ins == '4':
                self.degrade()
            else:
                print("请输入正确的指令")

    def register(self):
      name = input("姓名:").strip()
      job = input("职位(E.普通员工;T.组长;M.经理):").strip()
      job = self.is_job_exist(job)
      year = int(input("工龄:").strip())
      grade = int(input("级别:").strip())
      grade = self.is_grade_match_job(job, grade)
      staff = Staff(name, job, grade, year, self.uid)
      self.staffs = staff
      self.jobs.append(staff)
      print(f"录入成功!姓名:{staff.name},工号:{staff.uid},薪资:{staff.salary()}")
      self.uid += 1

    def find(self):
      ins = input("1.员工查询;2.职位查询:").strip()
      if ins == '1':
            uid = self.is_uid_exist()
            if not uid:
                print("该工号不存在!")
            else:
                staff = self.staffs
                print(f"姓名:{staff.name}\n职位:{staff.job}\n级别:{staff.grade}\n工龄:{staff.year}\n薪资:{staff.salary()}")
      elif ins == '2':
            job = input("职位(E.普通员工;T.组长;M.经理):").strip()
            job = self.is_job_exist(job)
            if not self.jobs:
                print(f"目前公司没有{self.job_state}!")
            else:
                print(f"目前{self.job_state}共有 {len(self.jobs)} 人:")
                for each in self.jobs:
                  print(f"{each.uid} - {each.name}")

    def upgrade(self):
      uid = self.is_uid_exist()
      if not uid:
            print("该工号不存在!")
      else:
            staff = self.staffs
            salary = staff.salary()
            job = staff.job
            print(f"{staff.name}, 工号:{staff.uid}, 当前职位:{staff.job + str(staff.grade)},当前薪资:{staff.salary()}")
            n = int(input("请输入需要增加的级数:").strip())
            job = self.chage_grade(staff, job, staff.grade, n)
            staff.job = job
            staff.grade = int(job)
            print("升级成功!")
            print(f"{staff.name}, 工号:{staff.uid}, 升职后职位:{staff.job + str(staff.grade)},当前薪资:{staff.salary()}({staff.salary() - salary:+})")

    def degrade(self):
      uid = self.is_uid_exist()
      if not uid:
            print("该工号不存在!")
      else:
            staff = self.staffs
            salary = staff.salary()
            job = staff.job
            print(f"{staff.name}, 工号:{staff.uid}, 当前职位:{staff.job + str(staff.grade)},当前薪资:{staff.salary()}")
            n = int(input("请输入需要减少的级数:").strip())
            job = self.chage_grade(staff, job, staff.grade, -n)
            staff.job = job
            staff.grade = int(job)
            print("降级成功!")
            print(f"{staff.name}, 工号:{staff.uid}, 升职后职位:{staff.job + str(staff.grade)},当前薪资:{staff.salary()}({staff.salary() - salary:+})")            

def main():
    m = Manage()
    m.manage()
页: 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43
查看完整版本: 第063讲:类和对象(VI)| 课后测试题及答案