• 面向对象super 练习


    1. 看代码写结果【如果有错误,则标注错误即可,并且假设程序报错可以继续执行】

      class Foo(object):
          a1 = 1
          
          def __init__(self,num):
              self.num = num
          def show_data(self):
              print(self.num+self.a1)
          
      obj1 = Foo(666)
      obj2 = Foo(999)
      print(obj1.num)
      print(obj1.a1)
      
      obj1.num = 18
      obj1.a1 = 99
      
      print(obj1.num)
      print(obj1.a1)
      
      print(obj2.a1)
      print(obj2.num)
      print(obj2.num)
      print(Foo.a1)
      print(obj1.a1)
      
      结果:
      666
      1
      18
      99
      1
      999
      999
      1
      99
      
    2. 看代码写结果,注意返回值。

      class Foo(object):
          
          def f1(self):
              return 999
          
          def f2(self):
              v = self.f1()
              print('f2')
              return v
          
          def f3(self):
              print('f3')
              return self.f2()
          
          def run(self):
              result = self.f3()
              print(result)
      
      obj = Foo()
      v1 = obj.run()
      print(v1)
      
      
      结果
      f3
      f2
      999
      None
      
      
    3. 看代码写结果

      class Foo(object):
          def __init__(self, num):
              self.num = num
              
      v1 = [Foo for i in range(10)]
      v2 = [Foo(5) for i in range(10)]
      v3 = [Foo(i) for i in range(10)]
      
      print(v1)
      print(v2)
      print(v3)
      
      结果
      [<class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>]
      [<__main__.Foo object at 0x000002A1D906D908>, <__main__.Foo object at 0x000002A1D906D898>, <__main__.Foo object at 0x000002A1D906D860>, <__main__.Foo object at 0x000002A1D906D828>, <__main__.Foo object at 0x000002A1D906D7B8>, <__main__.Foo object at 0x000002A1D906DDD8>, <__main__.Foo object at 0x000002A1D906DE10>, <__main__.Foo object at 0x000002A1D906DE48>, <__main__.Foo object at 0x000002A1D906DE80>, <__main__.Foo object at 0x000002A1D906DEB8>]
      [<__main__.Foo object at 0x000002A1D906DEF0>, <__main__.Foo object at 0x000002A1D906DF28>, <__main__.Foo object at 0x000002A1D906DF60>, <__main__.Foo object at 0x000002A1D906DF98>, <__main__.Foo object at 0x000002A1D906DFD0>, <__main__.Foo object at 0x000002A1D9073048>, <__main__.Foo object at 0x000002A1D9073080>, <__main__.Foo object at 0x000002A1D90730B8>, <__main__.Foo object at 0x000002A1D90730F0>, <__main__.Foo object at 0x000002A1D9073128>]
      
      
    4. 看代码写结果

      class StarkConfig(object):
      
          def __init__(self, num):
              self.num = num
      
          def changelist(self, request):
              print(self.num, request)
      
      
      config_obj_list = [StarkConfig(1), StarkConfig(2), StarkConfig(3)]
      for item in config_obj_list:
          print(item.num)
      
      结果
      1
      2
      3
      
      
    5. 看代码写结果:

      class StarkConfig(object):
      
          def __init__(self, num):
              self.num = num
      
          def changelist(self, request):
              print(self.num, request)
      
      
      config_obj_list = [StarkConfig(1), StarkConfig(2), StarkConfig(3)]
      for item in config_obj_list:
          item.changelist(666)
          
          
      1 666
      2 666
      3 666
      
    6. 看代码写结果:

      class Department(object):
          def __init__(self,title):
              self.title = title
      
      class Person(object):
          def __init__(self,name,age,depart):
              self.name = name
              self.age = age 
              self.depart = depart
              
              
      d1 = Department('人事部')
      d2 = Department('销售部')
      
      p1 = Person('武沛齐',18,d1)
      p2 = Person('alex',18,d1)
      p3 = Person('安安',19,d2)
      
      print(p1.name)
      print(p2.age)
      print(p3.depart)
      print(p3.depart.title)
      
      结果:
      武沛齐
      18
      <__main__.Department object at 0x000001EA92C7DD68>
      销售部
      
    7. 看代码写结果:

      class Department(object):
          def __init__(self,title):
              self.title = title
      
      class Person(object):
          def __init__(self,name,age,depart):
              self.name = name
              self.age = age 
              self.depart = depart
      	
          def message(self):
              msg = "我是%s,年龄%s,属于%s" %(self.name,self.age,self.depart.title)
              print(msg)
          
          
      d1 = Department('人事部')
      d2 = Department('销售部')
      
      p1 = Person('武沛齐',18,d1)
      p2 = Person('alex',18,d1)
      p1.message()
      p2.message()
      
      结果:
      我是武沛齐,年龄18,属于人事部
      我是alex,年龄18,属于人事部
      
    8. 看代码写结果:

      class A:
          def f1(self):
              print('in A f1')
      
      class B(A):
          def f1(self):
              print('in B f1')
      
      class C(A):
          def f1(self):
              print('in C f1')
      
      class D(B, C):
          def f1(self):
              super(B, self).f1()
              print('in D f1')
      
      obj = D()
      obj.f1()
      
      结果:
      in C f1
      in D f1
      
    9. 看代码写结果:

      class A:
          def f1(self):
              print('in A f1')
      
      class B(A):
          def f1(self):
              super().f1()
              print('in B f1')
      
      class C(A):
          def f1(self):
              print('in C f1')
      
      class D(B, C):
          def f1(self):
              super().f1()
              print('in D f1')
      
      obj = D()
      obj.f1()
      
      结果:
      in C f1
      in B f1
      in D f1
      
    10. 程序设计题:

      运用类完成一个扑克牌类(无大小王)的小游戏:
      用户需要输入用户名,以下为用户可选选项:
          1. 洗牌
          2. 随机抽取一张
          3. 指定抽取一张
          4. 从小到大排序
          5. 退出
      
      1. 洗牌:每次执行的结果顺序随机。
      2. 随机抽取一张:显示结果为:太白金星您随机抽取的牌为:黑桃K
      3. 指定抽取一张:
          用户输入序号(1~52)
          比如输入5,显示结果为:太白金星您抽取的第5张牌为:黑桃A
      4. 将此牌从小到大显示出来。A -> 2 -> 3 .......-> K
      
      提供思路:
          52张牌可以放置一个容器中。
          用户名,以及盛放牌的容器可以封装到对象属性中。
          
      
      
      import random
      class Poker:
          lst = ["A"]+[str(i) for i in range(2,11)]+["J","Q","K"]
      
          def __init__(self,name,poker_list):
              self.name = name
              self.poker_list = poker_list
              self.scrap_card = []
      
          def shuffle_cards(self):
              """
              洗牌
              :return:
              """
              self.poker_list += self.scrap_card
              random.shuffle(self.poker_list)
              print(self.poker_list)
      
          def random_extraction(self):
              """
              随机抽取一张牌
              :return:
              """
              x = random.choice(self.poker_list)
              print(f"{self.name}您随机抽取的牌为:{x}")
              self.scrap_card.append(x)
              self.poker_list.remove(x)
      
          def  appoint(self,num):
              """
              指定一张牌
              :param num:第几张牌
              :return:
              """
              x = self.poker_list[num - 1]
              print(f"{self.name}您抽取的第{num}张牌为:{x}")
              self.scrap_card.append(x)
              self.poker_list.remove(x)
          def Sort(self):
              self.poker_list.sort(key=lambda x:self.lst.index(x[2:]))
              print(self.poker_list)
      
      
      lst1 = ["黑桃","红桃","方片","梅花"]
      lst2 = [ str(i) for i in range(2,11)]+["A","J","Q","K"]
      
      poker_list = [ i +j for i in lst1 for j in lst2]
      
      name = input("请输入姓名")
      masge = """
          1. 洗牌
          2. 随机抽取一张
          3. 指定抽取一张
          4. 从小到大排序
          5. 退出
      """
      poker = Poker(name,poker_list)
      dic = {"1":poker.shuffle_cards,"2" :poker.random_extraction,"3":poker.appoint,"4":poker.Sort,"5":exit}
      while True:
          ch = input(masge + "\n>>>")
          if ch in dic and ch !="3":
              dic[ch]()
          elif ch == "3":
              num = input(f"请输入一序号1~{len(poker.poker_list)}")
              if num.isdecimal() and 0 < int(num) < len(poker.poker_list):
                  dic[ch](int(num))
              else:
                  print("输入的序号有误!")
          else:
              print("请输入正确的选项!")
      
  • 相关阅读:
    Java 学习笔记之 线程interrupted方法
    Java 学习笔记之 线程interrupt方法
    定义函数
    调用函数
    pass语句
    循环
    条件语句
    别样赋值
    import语句
    字典方法
  • 原文地址:https://www.cnblogs.com/ciquankun/p/11317215.html
Copyright © 2020-2023  润新知