• python基础---递归函数真题解析


    方法一。有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    即: {'k1': 大于66 , 'k2': 小于66}
    values = [11, 22, 33,44,55,66,77,88,99,90]
    
    my_dict = {}
    
    for value in  values:
        if value>66:
            if my_dict.has_key('k1'):
                my_dict['k1'].append(value)
            else:
                my_dict['k1'] = [value]
        else:
            if my_dict.has_key('k2'):
                my_dict['k2'].append(value)
            else:
                my_dict['k2'] = [value]
    方法二。from collections import defaultdict
    
    values = [11, 22, 33,44,55,66,77,88,99,90]
    
    my_dict = defaultdict(list)
    
    for value in  values:
        if value>66:
            my_dict['k1'].append(value)
        else:
            my_dict['k2'].append(value)
    三。defaultdict 的用法
    from collections import defaultdict
     dd = defaultdict(lambda: 'N/A')
     dd['key1'] = 'abc'
     dd['key1'] # key1存在
    'abc'
    dd['key2'] # key2不存在,返回默认值
    'N/A'
    defaultdict
    #如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
    portfolio = [
        {'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}]
    #1.计算购买每支股票的总价?
    ret = map(lambda dic:{dic['name']:round(dic['share']*dic['price'],2)},portfolio)
    print(list(ret))
    #2.用filter过滤出,单价大于100的股票有哪些?
    #方法一
    ret = filter(lambda dic:True if dic['price'] > 100 else False,portfilio)
    print(list(ret))
    #方法二
    ret = filter(lambda dic:dic['price'] > 100,portfilio)
    print(list(ret))
    真题一
    利用递归函数找二分法
    def find(l,aim,start = 0,end = None):
        end = len(l) if end is None else end
        mid_index = (end - start)//2 + start
        if start <= end:
            if l[mid_index] < aim:
                return find(l,aim,start = mid_index+1,end = end)
            elif l[mid_index] > aim:
                return find(l,aim,start = start,end = mid_index-1)
            else:
                return mid_index
        else:
            return '找不到这个值'
    ret = find(l,55)
    print(ret)
    利用递归函数找二分法******
    import re
    
    ret=re.findall(r"d+","1-2*(60+(-40.35/5)-(-4*3))")
    print(ret) #['1', '2', '60', '40', '35', '5', '4', '3']
    ret=re.findall(r"-?d+.d*|(-?d+)","1-2*(60+(-40.35/5)-(-4*3))")
    print(ret) #['1', '-2', '60', '', '5', '-4', '3']
    ret.remove("")
    print(ret) #['1', '-2', '60', '5', '-4', '3']
    匹配整数
    1、 匹配一段文本中的每行的邮箱
          http://blog.csdn.net/make164492212/article/details/51656638
    
    2、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’;
    
       分别取出1年的12个月(^(0?[1-9]|1[0-2])$)、
       一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$
    
    3、 匹配qq号。(腾讯QQ号从10000开始)  [1,9][0,9]{4,}
    
    4、 匹配一个浮点数。       ^(-?d+)(.d+)?$   或者  -?d+.?d*
    
    5、 匹配汉字。             ^[u4e00-u9fa5]{0,}$ 
    
    6、 匹配出所有整数
    数字匹配
    import requests
    
    import re
    import json
    
    def getPage(url):
    
        response=requests.get(url)
        return response.text
    
    def parsePage(s):
        
        com=re.compile('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>'
                       '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>',re.S)
    
        ret=com.finditer(s)
        for i in ret:
            yield {
                "id":i.group("id"),
                "title":i.group("title"),
                "rating_num":i.group("rating_num"),
                "comment_num":i.group("comment_num"),
            }
    
    def main(num):
    
        url='https://movie.douban.com/top250?start=%s&filter='%num
        response_html=getPage(url)
        ret=parsePage(response_html)
        print(ret)
        f=open("move_info7","a",encoding="utf8")
    
        for obj in ret:
            print(obj)
            data=json.dumps(obj,ensure_ascii=False)
            f.write(data+"
    ")
    
    if __name__ == '__main__':
        count=0
        for i in range(10):
            main(count)
            count+=25
    爬虫练习
    import re
    import json
    from urllib.request import urlopen
    
    def getPage(url):
        response = urlopen(url)
        return response.read().decode('utf-8')
    
    def parsePage(s):
        com = re.compile(
            '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>'
            '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)
    
        ret = com.finditer(s)
        for i in ret:
            yield {
                "id": i.group("id"),
                "title": i.group("title"),
                "rating_num": i.group("rating_num"),
                "comment_num": i.group("comment_num"),
            }
    
    
    def main(num):
        url = 'https://movie.douban.com/top250?start=%s&filter=' % num
        response_html = getPage(url)
        ret = parsePage(response_html)
        print(ret)
        f = open("move_info7", "a", encoding="utf8")
    
        for obj in ret:
            print(obj)
            data = str(obj)
            f.write(data + "
    ")
    
    count = 0
    for i in range(10):
        main(count)
        count += 25
    爬虫练习简化版
    flags有很多可选值:
    
    re.I(IGNORECASE)忽略大小写,括号内是完整的写法
    re.M(MULTILINE)多行模式,改变^和$的行为
    re.S(DOTALL)点可以匹配任意字符,包括换行符
    re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 w, W, , B, s, S 依赖于当前环境,不推荐使用
    re.U(UNICODE) 使用w W s S d D使用取决于unicode定义的字符属性。在python3中默认使用该flag
    re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
    flags
    import re
    ret = re.search("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>")
    #还可以在分组中利用?<name>的形式给分组起名字
    #获取的匹配结果可以直接用group('名字')拿到对应的值
    print(ret.group('tag_name'))  #结果 :h1
    print(ret.group())  #结果 :<h1>hello</h1>
    
    ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>")
    #如果不给组起名字,也可以用序号来找到对应的组,表示要找的内容和前面的组内容一致
    #获取的匹配结果可以直接用group(序号)拿到对应的值
    print(ret.group(1))
    print(ret.group())  #结果 :<h1>hello</h1>
    匹配标签
    import random
    
    def v_code():
    
        code = ''
        for i in range(5):
    
            num=random.randint(0,9)
            alf=chr(random.randint(65,90))
            add=random.choice([num,alf])
            code="".join([code,str(add)])
    
        return code
    
    print(v_code()
    生成随机验证码
    # 练习一:在终端输出如下信息
    #
    # 小明,10岁,男,上山去砍柴
    # 小明,10岁,男,开车去东北
    # 小明,10岁,男,最爱大保健
    # 老李,90岁,男,上山去砍柴
    # 老李,90岁,男,开车去东北
    # 老李,90岁,男,最爱大保健
    # 老张…
    class Person:
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def shangshan(self):
            print('%s%d%s上山砍柴'%(self.name,self.age,self.sex))
        def drive(self):
            print('%s%d%s开车去东北'%(self.name,self.age,self.sex))
        def favorite(self):
            print('%s%d%s最爱大保健'%(self.name,self.age,self.sex))
    p1 = Person('小明',23,'')
    p2 = Person('老李',32,'')
    Person.shangshan(p1)
    p1.shangshan()
    Person.drive(p2)
    p2.drive()
    面向对象练习题
    from math import pi
    class Arc:
        def __init__(self,r):
            self.r = r
        def area(self):
            return pi*(self.r**2)
        def perimeter(self):
            print(2*self.r*pi)
    p1 = Arc(3)
    print(p1.area())
    p1.perimeter()
    print(Arc.area(p1))
    Arc.perimeter(p1)
    用面向对象求周长和面积
    class Carstore(object):
        def __init__(self):
            self.factory = Factory()
        def order(self,car_type):
                return self.factory.select_car_by_type(car_type)
    class Factory(object):
        def select_car_by_type(self,car_type):
            if car_type == '索纳塔':
                return Suonata()
            elif car_type == '名图':
                return Mingtu()
            elif car_type == 'ix35':
                return Ix35()
    class Car(object):
        def move(self):
            print('车在移动。。。')
        def music(self):
            print('正在播放音乐。。。')
        def stop(self):
            print('车在停止。。。')
    class Suonata(Car):pass
    class Mingtu(Car):pass
    class Ix35(Car):pass
    car_store = Carstore()
    car = car_store.order('索纳塔')
    car.move()
    car.music()
    car.stop()
    cs店
    class Dog:
        def __init__(self,name,blood,aggr,kind):
            self.name = name
            self.hp = blood
            self.aggr = aggr
            self.kind = kind
        def bite(self,person):
            person.blood -= self.aggr
    class Person:
        def __init__(self,name,blood,aggr,sex):
            self.name = name
            self.blood = blood
            self.aggr = aggr
            self.sex = sex
        def attack(self,dog):
            dog.hp -= self.aggr
            if dog.hp <= 0:
                print('%s is over %s have %s xie'%(dog.name,self.name,self.blood))
            else:print('%s dadiao le %s %sdixie'%(self.name,dog.name,dog.hp))
    d1 = Dog('jinlaoban',100,10,'taddy')
    p1 = Person('laoli',100,10,'nan')
    p1.attack(d1)
    d1.bite(p1)
    人狗大战
  • 相关阅读:
    Mysql数据库快速备份还原-mysqldump
    写给年轻人的交友和人脉建议
    令人担忧的趋势:科技崇拜与人文失落
    高情商的特征
    高情商与朋友圈
    数据库临时表空间设置
    oracle 临时表空间的增删改查
    语言表达能力写作能力决定一个人的发展和未来
    一个人如何从平庸到优秀,再到卓越?
    06.堆排序
  • 原文地址:https://www.cnblogs.com/lianggege123/p/8242841.html
Copyright © 2020-2023  润新知