zoukankan      html  css  js  c++  java
  • python学习笔记--进阶

    # """
    # 找出序列中出现次数最多的元素
    # """
    # from collections import Counter
    #
    # words = [
    #     'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
    #     'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around',
    #     'the', 'eyes', "don't", 'look', 'around', 'the', 'eyes',
    #     'look', 'into', 'my', 'eyes', "you're", 'under'
    # ]
    # counter = Counter(words)
    # print(counter.most_common(3))
    
    # # heapq模块,堆排,优先队列
    # import heapq
    #
    # list1 = [34, 25, 12, 99, 87, 63, 58, 78, 88, 92]
    # list2 = [
    #     {'name': 'IBM', 'shares': 100, 'price': 91.1},
    #     {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    #     {'name': 'FB', 'shares': 200, 'price': 21.09},
    #     {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    #     {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    #     {'name': 'ACME', 'shares': 75, 'price': 115.65}
    # ]
    # print(heapq.nlargest(3, list1))
    # print(heapq.nsmallest(3, list1))
    # print(heapq.nlargest(2, list2, key=lambda x: x['price']))
    # print(heapq.nlargest(2, list2, key=lambda x: x['shares']))
    
    # """
    # 贪婪法:在对问题求解时,总是做出在当前看来是最好的选择,不追求最优解,快速找到满意解。
    # 输入:
    # 20 6
    # 电脑 200 20
    # 收音机 20 4
    # 钟 175 10
    # 花瓶 50 2
    # 书 10 1
    # 油画 90 9
    # """
    # class Thing(object):
    #     """物品"""
    #
    #     def __init__(self, name, price, weight):
    #         self.name = name
    #         self.price = price
    #         self.weight = weight
    #
    #     @property
    #     def value(self):
    #         """价格重量比"""
    #         return self.price / self.weight
    #
    #
    # def input_thing():
    #     """输入物品信息"""
    #     name_str, price_str, weight_str = input().split()
    #     return name_str, int(price_str), int(weight_str)
    #
    #
    # def main():
    #     """主函数"""
    #     # map() 会根据提供的函数对指定序列做映射。
    #     # 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
    #     max_weight, num_of_things = map(int, input().split())
    #     all_things = []
    #     for _ in range(num_of_things):
    #         all_things.append(Thing(*input_thing()))
    #     all_things.sort(key=lambda x: x.value, reverse=True)
    #     total_weight = 0
    #     total_price = 0
    #     for thing in all_things:
    #         if total_weight + thing.weight <= max_weight:
    #             print(f'小偷拿走了{thing.name}')
    #             total_weight += thing.weight
    #             total_price += thing.price
    #     print(f'总价值: {total_price}美元')
    #
    #
    # if __name__ == '__main__':
    #     main()
    
    # # 说明:子列表指的是列表中索引(下标)连续的元素构成的列表;列表中的元素是int类型,可能包含正整数、0、负整数;程序输入列表中的元素,输出子列表元素求和的最大值,例如:
    # #
    # # 输入:1 -2 3 5 -3 2
    # #
    # # 输出:8
    # #
    # # 输入:0 -2 3 5 -1 2
    # #
    # # 输出:9
    # #
    # # 输入:-9 -2 -3 -5 -3
    # #
    # # 输出:-2
    # def get_max_sub_list():
    #     list1 = list(map(int, input().split()))
    #     max1 = now = list1[0]
    #     for i in range(1, len(list1)):
    #         now = max(list1[i], now + list1[i])
    #         if now > max1:
    #             max1 = now
    #
    #     return max1
    # if __name__ =="__main__":
    #     print(get_max_sub_list())
    
    # # 函数使用
    # # 将函数视为“一等公民”
    # #
    # # - 函数可以赋值给变量
    # # - 函数可以作为函数的参数
    # # - 函数可以作为函数的返回值
    #
    # # 高阶函数使用
    # # filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
    # #
    # # 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
    # item1 = list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10))))
    # print(item1)
    # items2 = [x ** 2 for x in range(1, 10) if x % 2]
    # print(items2)
    
    # """
    # 月薪结算系统 - 部门经理每月15000 程序员每小时200 销售员1800底薪加销售额5%提成
    #
    # 继承:is-a
    # """
    # from abc import ABCMeta, abstractmethod
    #
    #
    # class Employee(metaclass=ABCMeta):
    #     """员工(抽象类)"""
    #
    #     def __init__(self, name):
    #         self.name = name
    #
    #     @abstractmethod
    #     def get_salary(self):
    #         """结算月薪(抽象方法)"""
    #         pass
    #
    #
    # class Manager(Employee):
    #     """部门经理"""
    #
    #     def get_salary(self):
    #         return 15000.0
    #
    #
    # class Programmer(Employee):
    #     """程序员"""
    #
    #     def __init__(self, name, working_hour=0):
    #         self.working_hour = working_hour
    #         super().__init__(name)
    #
    #     def get_salary(self):
    #         return 200.0 * self.working_hour
    #
    #
    # class Salesman(Employee):
    #     """销售员"""
    #
    #     def __init__(self, name, sales=0.0):
    #         self.sales = sales
    #         super().__init__(name)
    #
    #     def get_salary(self):
    #         return 1800.0 + self.sales * 0.05
    #
    #
    # class EmployeeFactory:
    #     """创建员工的工厂(工厂模式 - 通过工厂实现对象使用者和对象之间的解耦合)"""
    #
    #     @staticmethod
    #     def create(emp_type, *args, **kwargs):
    #         """创建员工"""
    #         all_emp_types = {'M': Manager, 'P': Programmer, 'S': Salesman}
    #         cls = all_emp_types[emp_type.upper()]
    #         return cls(*args, **kwargs) if cls else None
    #
    #
    # def main():
    #     """主函数"""
    #     emps = [
    #         EmployeeFactory.create('M', '曹操'),
    #         EmployeeFactory.create('P', '荀彧', 120),
    #         EmployeeFactory.create('P', '郭嘉', 85),
    #         EmployeeFactory.create('S', '典韦', 123000),
    #     ]
    #     for emp in emps:
    #         print(f'{emp.name}: {emp.get_salary():.2f}元')
    #
    #
    # if __name__ == '__main__':
    #     main()
    
    #  枚举
    """
    经验:符号常量总是优于字面常量,枚举类型是定义符号常量的最佳选择
    """
    from enum import Enum, unique
    
    import random
    
    # @unique保证每个属性值唯一
    @unique
    class Suite(Enum):
        """花色"""
    
        SPADE, HEART, CLUB, DIAMOND = range(4)
    
        def __lt__(self, other):
            return self.value < other.value
    
    
    class Card():
        """牌"""
    
        def __init__(self, suite, face):
            """初始化方法"""
            self.suite = suite
            self.face = face
    
        def show(self):
            """显示牌面"""
            suites = ['♠︎', '♥︎', '♣︎', '♦︎']
            faces = ['', 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
            return f'{suites[self.suite.value]}{faces[self.face]}'
    
        def __repr__(self):
            return self.show()
    
    
    class Poker():
        """扑克"""
    
        def __init__(self):
            self.index = 0
            self.cards = [Card(suite, face)
                          for suite in Suite
                          for face in range(1, 14)]
    
        def shuffle(self):
            """洗牌(随机乱序)"""
            random.shuffle(self.cards)
            self.index = 0
    
        def deal(self):
            """发牌"""
            card = self.cards[self.index]
            self.index += 1
            return card
    
        @property
        def has_more(self):
            return self.index < len(self.cards)
    
    
    class Player():
        """玩家"""
    
        def __init__(self, name):
            self.name = name
            self.cards = []
    
        def get_one(self, card):
            """摸一张牌"""
            self.cards.append(card)
    
        def sort(self, comp=lambda card: (card.suite, card.face)):
            """整理手上的牌"""
            self.cards.sort(key=comp)
    
    
    def main():
        """主函数"""
        poker = Poker()
        poker.shuffle()
        players = [Player('东邪'), Player('西毒'), Player('南帝'), Player('北丐')]
        while poker.has_more:
            for player in players:
                    player.get_one(poker.deal())
        for player in players:
            player.sort()
            print(player.name, end=': ')
            print(player.cards)
    
    
    if __name__ == '__main__':
        main()
    

      装饰器:

  • 相关阅读:
    2016.6.23 随笔———— AJAX
    2016.6.13 随笔————图像获取、处理,视频获取,png图片尺寸缩小
    2016.5.15 随笔————网页平面设计软件 Illustrator(Ai) 和 Photoshop(Ps) 简介
    学习的目的:理解<转>
    几点要求自己也可以借鉴
    手表电池
    许小年:宁可踏空,不可断粮<转>
    【微言大义】时间都去哪了?
    互联网趋势其实很浮夸
    解决Mac下GDB提示签名错误
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/14835691.html
Copyright © 2011-2022 走看看