• python之道13


    1. 看代码分析结果
    func_list = []
    
    for i in range(10):
        func_list.append(lambda :i)
    
    v1 = func_list[0]()
    v2 = func_list[5]()
    print(v1,v2)  # 9 9 i的最终指向
    
    1. 看代码分析结果
    func_list = []
    
    for i in range(10):
        func_list.append(lambda x:x+i)
    
    v1 = func_list[0](2)
    v2 = func_list[5](1)
    print(v1,v2)  # 11 10
    
    1. 看代码分析结果
    func_list = []
    
    for i in range(10):
        func_list.append(lambda x:x+i)
    
    for i in range(0,len(func_list)):
        result = func_list[i](i)
        print(result)
    '''
    0 2 4 ... ... 18
    '''
    
    1. 看代码写结果(面试题):
    def func(name):
        v = lambda x:x+name
        return v
    
    v1 = func('太白')  # lambda内存地址
    v2 = func('alex')  # lambda内存地址
    v3 = v1('银角')  # 银角太白
    v4 = v2('金角')  # 金角alex
    print(v1,v2,v3,v4)
    
    1. 看代码写结果【面试题】
    result = []
    for i in range(10):
        func = lambda : i      # 注意:函数不执行,内部代码不会执行。
        result.append(func)
    
    print(i)  # 9
    print(result)  # 列表中是10个元素,对应的lambda的内存地址
    v1 = result[0]() 
    v2 = result[9]()  
    print(v1,v2)  # 9 9
    
    1. 看代码分析结果【面试题】
    def func(num):
        def inner():
            print(num)
        return inner
    
    result = []
    for i in range(10):
        f = func(i)
        result.append(f)
    
    print(i)  # 9
    print(result)  # 返回一个列表,里面是是个inner函数的内存地址
    v1 = result[0]()  # 0
    v2 = result[9]()  # 9  
    # 闭包思想解决这个问题
    print(v1,v2)  # 由于inner函数没有返回值,所以为None,None
    
    1. 看代码写结果【新浪微博面试题】

      def func():
          for num in range(10):
              pass
          v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
          result1 = v4[1]()
          result2 = v4[2]()
          print(result1,result2)
      func()  # 109 109 
      
    2. 请编写一个函数实现将IP地址转换成一个整数。【面试题,较难,可以先做其他题】

      如 10.3.9.12 转换规则为二进制:
              10            00001010
               3            00000011
               9            00001001
              12            00001100
      再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
      # 方法一:
      def ip(ip_addr):
          ip_list = ip_addr.split('.')
          num = ''
          for i in ip_list:
              i = int(i)
              num = num + format(i,'08b')
          return int(num,2)
      ip('10.3.9.12')
      
      
      # 方法二:
      def ip(ip_addr):
          return int(''.join([format(int(i),'08b') for i in ip_addr.strip().split('.')]),2)
      
      print(ip('10.3.9.12'))
      
      
    3. 都完成的做一下作业(下面题都是用内置函数或者和匿名函数结合做出):

      1. 用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb

      ​ name=[‘oldboy’,'alex','wusir']

      
      

    name=['oldboy','alex','wusir']

    l = list(map(lambda x:x+'_sb',name))

    print(l)

       
       
       2. 用map来处理下述l,然后用list得到一个新的列表,列表中每个人的名字都是sb结尾  
       
         l =  [{'name':'alex'},{'name':'y'}]
       
    

    l=[{'name':'alex'},{'name':'y'}]

    print(list(map(lambda x:x['name']+'_sb',l)))

       
    
       3. 用filter来处理,得到股票价格大于20的股票名字
       
    
       shares={
      	'IBM':36.6,
      	'Lenovo':23.2,
      	'oldboy':21.2,
      	'ocean':10.2,
      }
    
       
    
      # print(list(filter(lambda x:shares[x] > 20,shares)))
    
       
          
       
       4. 有下面字典,得到购买每只股票的总价格,并放在一个迭代器中结果:list一下[9110.0, 27161.0,......]
       
    
      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}]
    
    # print(list(map(lambda x:x['shares']*x['price'],portfolio)))
    
    
    ​      
    
    5. 还是上面的字典,用filter过滤出单价大于100的股票。
    
    

    for i in filter(lambda x:x['price'] > 100, portfolio):

    print(i)

    
    
    
    6. 有下列三种数据类型,
    
    

    l1 = [1,2,3,4,5,6]

    l2 = ['oldboy','alex','wusir','太白','日天']

    tu = ('','','','****')

    
    ​			写代码,最终得到的是(每个元祖第一个元素>2,第三个*至少是4个。)
    
     			[(3, 'wusir', ''), (4, '太白', '*******')]这样的数据。 
    
    

    for i in filter(lambda x:x[0] > 2 and len(x[2]) >= 4,zip(l1,l2,tu)):

    print(i)

    
    ​			7. 有如下数据类型(**实战题**):
    
    

    l1 = [ {'sales_volumn': 0},

    {'sales_volumn': 108},
    
    {'sales_volumn': 337},
    
    {'sales_volumn': 475},
    
    {'sales_volumn': 396},
    
    {'sales_volumn': 172},
    
    {'sales_volumn': 9},
    
    {'sales_volumn': 58}, 
    
    {'sales_volumn': 272}, 
    
    {'sales_volumn': 456}, 
    
    {'sales_volumn': 440},
    
    {'sales_volumn': 239}]
    
    
    ​	将l1按照列表中的每个字典的values大小进行排序,形成一个新的列表。
    
    

    print(sorted(l1,key=lambda x:x['sales_volumn']))

    
    10. 求结果(**面试题**)
    
    

    v = [lambda :x for x in range(10)]

    print(v) # 返回一个列表里面有个10个lambda函数的内存地址

    print(v[0]) # 一个lambda函数的内存地址

    print(v0) # 9

    
    11. 求结果(**面试题**)
    
    

    v = (lambda :x for x in range(10))

    print(v) # 内存地址

    print(v[0]) # 报错

    print(v0) # 报错

    print(next(v)) # lambda内存地址

    print(next(v)()) # 执行下一个lambda 返回1

    
    12. map(str,[1,2,3,4,5,6,7,8,9])输出是什么? (**面试题**)
    
        ```
        返回一个内存地址
        
        ```
    
    13. 求结果:(**面试题,比较难,先做其他题**)
    
    

    def num():
    return [lambda x:i*x for i in range(4)]
    print([m(2)for m in num()])

    [6, 6, 6, 6]

    
    14. 有一个数组[3,4,1,2,5,6,6,5,4,33]请写一个函数,找出该数组中没有重复的数
    
    的总和(上面数据的么有重复的总和为1+2=3)(**面试题**)
    
    

    def func(alist):
    return sum([i for i in alist if alist.count(i) == 1])
    print(func([3,4,1,2,5,6,6,5,4,3,3]))

    
    15. 写一个函数完成三次登陆功能:
    
        - 用户的用户名密码从一个文件register中取出。
    
        - register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行。
    
        - 完成三次验证,三次验证不成功则登录失败,登录失败返回False。
    
        - 登陆成功返回True。
    
          ```
          def get_dic_user_pwd():
              with open('register', encoding='utf-8') as f1:
                  dic = {i.strip().split('|')[0]: i.strip().split('|')[1] for i in f1}
              return dic
          
          def login(dic_user_pwd):
              i = 0
              dic = dic_user_pwd()
              while i < 3:
                  username = input('请输入用户名:').strip()
                  password = input('请输入密码:').strip()
                  if username in dic and dic[username] == password:
                      print('登录成功')
                      return True
                  else:
                      print('用户名密码错误,请重新登录')
                      i += 1
                      
          login(get_dic_user_pwd)
          
          ```
    
          
    
    16. 再写一个函数完成注册功能:
    
        - 用户输入用户名密码注册。
        - 注册时要验证(文件regsiter中)用户名是否存在,如果存在则让其重新输入用户名,如果不存在,则注册成功。
    
    - 注册成功后,将注册成功的用户名,密码写入regsiter文件,并以 | 隔开。
    
      - 注册成功后,返回True,否则返回False。
    
        ```
        def get_dic_user_pwd():
            with open('register', encoding='utf-8') as f1:
                dic = {i.strip().split('|')[0]: i.strip().split('|')[1] for i in f1}
            return dic
        
        def register(dic_user_pwd):
            dic = dic_user_pwd()
            username = input('请输入您要注册的用户名:').strip()
            password = input('请输入注册密码密码:').strip()
            if username not in dic:
                with open('register',encoding='utf-8',mode='a') as f1:
                    f1.write(f'
    {username}|{password}')
                return True
            return False
        
        register(get_dic_user_pwd)
        
        ```
    
        
    
    17. 用完成一个员工信息表的增删功能(**选做题,有时间做,没时间周末做**)。
    
    文件存储格式如下:
    
     id,name,age,phone,job
    
     1,Alex,22,13651054608,IT
    
     2,太白,23,13304320533,Tearcher
    
     3,nezha,25,1333235322,IT
    
    现在要让你实现两个功能:
    
    第一个功能是实现给文件增加数据,用户通过输入姓名,年龄,电话,工作,给原文件增加数据(增加的数据默认追加到原数据最后一行的下一行),但id要实现自增(id自增有些难度,id是不需要用户输入的但是必须按照顺序增加)。
    
    第二个功能是实现给原文件删除数据,用户只需输入id,则将原文件对应的这一条数据删除(删除后下面的id不变,比如此时你输入1,则将第一条数据删除,但是下面所有数据的id值不变及太白,nezha的 id不变)。
    
    

    自己做!

  • 相关阅读:
    [译]WCF RIA Services中的集合(2)
    Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)
    记录来敦煌一周的情况
    Silverlight通过MVVM实现多语言实时切换(含源代码)
    [译]WCF RIA Services中的集合(1)
    Silverlight Client←→Server数据同步备忘代码
    Siverlight5新功能/改进总结
    Expression Blend 5 Preview For Silverlight5 RC已发布
    你应该知道的,那些未在Silverlight5Beta中出现的特性
    .NET数据库编程求索之路1.引子
  • 原文地址:https://www.cnblogs.com/zanao/p/11079854.html
Copyright © 2020-2023  润新知