zoukankan      html  css  js  c++  java
  • day20---作业

    1、文件内容如下,标题为:姓名,性别,年纪,薪资

    [root@Surpass day20]# cat user.txt 
    egon male 18 3000
    alex male 38 30000
    wupeiqi female 28 20000
    yuanhao female 28 10000

    实现:

    f = open('user.txt', mode='r', encoding='utf-8')
    g = (line.strip('
    ').split(' ') for line in f)
    user_list = [{k:v for k,v in zip(['name','sex','age','salary'],item)} for item in g]

    ##
    [{'name': 'egon', 'sex': 'male', 'age': '18', 'salary': '3000'},
    {'name': 'alex', 'sex': 'male', 'age': '38', 'salary': '30000'},
    {'name': 'wupeiqi', 'sex': 'female', 'age': '28', 'salary': '20000'},
    {'name': 'yuanhao', 'sex': 'female', 'age': '28', 'salary': '10000'}

    2、对列表1进行取值操作

    #2 根据1得到的列表,取出薪资最高的人的信息
    #3 根据1得到的列表,取出最年轻的人的信息
    
    res = max(user_list,key=lambda item:item['salary'])
    print(res)
    #{'name': 'alex', 'sex': 'male', 'age': '38', 'salary': '30000'}
    
    res = min(user_list,key=lambda item:item['age'])
    print(res)
    #{'name': 'egon', 'sex': 'male', 'age': '18', 'salary': '3000'}

    3、对列表names=['egon','alex_sb','wupeiqi','yuanhao']进行操作

    #4、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写
    #5、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度
    
    names_new = [(lambda obj:obj.upper())(item) for item in names]
    print(names_new)
    #['EGON', 'ALEX_SB', 'WUPEIQI', 'YUANHAO']
    
    names_new = list(filter(lambda item: not item.endswith('sb'), names))
    print(names_new)
    #['egon', 'wupeiqi', 'yuanhao']

    4、对a.txt文件进行操作

    #6、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
    #7、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
    
    f = open('user.txt', mode='r', encoding='utf-8')
    res = len(max(f,key=lambda item:len(item)))
    print(res)
    f.close()
    #24
    
    f = open('user.txt', mode='r', encoding='utf-8')
    res = sum((lambda item:len(item))(line) for line in f)
    print(res)
    f.close()
    #85
    
    f = open('user.txt', mode='r', encoding='utf-8')
    res = sum((lambda item:len(item))(line) for line in f)
    res2 = sum((lambda item:len(item))(line) for line in f)
    res3 = sum((lambda item:len(item))(line) for line in f)
    print(res)
    print(res2)
    print(res3)
    f.close()
    #答:因为第一次操作后,文件指针移到了文件末尾,再通过for line in f取值,没有值了,所以之后的n次结果全为0

    5、思考题

    with open('a.txt') as f:
        g=(len(line) for line in f)
    print(sum(g)) #为何报错?
    
    #答:生成器g是对文件f进行取值,经过with open后,文件对象f已经被释放,sum(g)取不到值,因此会报错。
    
    正确的做法应该是:
    f = open('a.txt')
    g=(len(line) for line in f)
    print(sum(g))
    f.close()

    6、对shopping.txt文件进行操作

    mac,20000,3
    lenovo,3000,10
    tesla,1000000,10
    chicken,200,1
    #求总共花了多少钱?
    
    #打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]
    
    #求单价大于10000的商品信息,格式同上
    
    f = open('shopping.txt', mode='r', encoding='utf-8')
    res = sum((lambda obj: int(obj[1]) * int(obj[2]))(item.strip('
    ').split(',')) for item in f)
    print('一共消费{}元'.format(res))
    f.close()
    #一共消费10090200元
    
    
    f = open('shopping.txt', mode='r', encoding='utf-8')
    goods_info = [{k: v for k, v in zip(['name', 'price', 'count'], line.strip('
    ').split(','))} for line in f]
    print(goods_info)
    f.close()
    #[{'name': 'mac', 'price': '20000', 'count': '3'}, {'name': 'lenovo', 'price': '3000', 'count': '10'}, {'name': 'tesla', 'price': '1000000', 'count': '10'}, {'name': 'chicken', 'price': '200', 'count': '1'}]
    
    
    f = open('shopping.txt', mode='r', encoding='utf-8')
    goods_info = [{k: v for k, v in zip(['name', 'price', 'count'], line.strip('
    ').split(','))} for line in f]
    res = list(filter(lambda item: int(item['price']) > 10000, goods_info))
    print(res)
    f.close()
    #[{'name': 'mac', 'price': '20000', 'count': '3'}, {'name': 'tesla', 'price': '1000000', 'count': '10'}]

    7、思考题,判断下列说法是否正确

     题目1:
        1、应该将程序所有功能都扔到一个模块中,然后通过导入模块的方式引用它们        (F)
        2、应该只将程序各部分组件共享的那一部分功能扔到一个模块中,然后通过导入模块的方式引用它们      (F)
    
     题目2:
        运行python文件与导入python文件的区别是什么?
    答:(1)运行python文件。打开文件——>将内容从硬盘读到内存-->python解释器读取运行;
    (2)导入python文件。运行python文件-->产生文件的的名称空间,将文件运行过程中产生的名字都丢到文件的名称空间中-->在当前文件中产生一个名字,该名字指向之前产生的名称空间 运行的python文件产生的名称空间何时回收,为什么?
    答:程序结束后。 导入的python文件产生的名称空间何时回收,为什么?
    答:引用结束后。

     8、二分法取值

    使用递归函数来实现二分法

    list_obj = [-3,4,7,10,13,21,43,77,89]
    find_num = 10
    
    def bindary_search(list_obj,find_num):
        print(list_obj)
        mid_index = len(list_obj) // 2
        if not list_obj:
            print('该值不在此列表中')
            return
        if find_num > list_obj[mid_index]:
            list_obj = list_obj[mid_index+1:]
            bindary_search(list_obj,find_num)
        elif find_num < list_obj[mid_index]:
            list_obj = list_obj[:mid_index]
            bindary_search(list_obj,find_num)
        else:
            print('find it!')
    
    bindary_search(list_obj,find_num)

    9、使用递归函数,来实现查看文件夹的文件大写

    [root@Surpass day20]# python practice_2.py 
    请输入目标文件夹:/practice/
    文件夹的大小为:9898
    [root@Surpass day20]# ll /practice/
    总用量 32
    -rw-r--r--. 1 root root    0 3月  13 09:00 11.py
    -rw-r--r--. 1 root root  158 3月  13 09:00 2.py
    -rw-r--r--. 1 root root 1954 3月  12 20:01 3.py
    -rw-r--r--. 1 root root   31 3月  13 12:17 3.txt
    drwxr-xr-x. 2 root root   26 3月  13 14:53 day10
    drwxr-xr-x. 2 root root   27 3月  19 07:58 day15
    drwxr-xr-x. 2 root root  141 3月  22 17:46 day16
    drwxr-xr-x. 2 root root  166 3月  24 09:00 day17
    drwxr-xr-x. 2 root root  233 3月  26 08:34 day18
    drwxr-xr-x. 2 root root   77 3月  25 19:32 day19
    drwxr-xr-x. 2 root root  112 3月  26 17:30 day20
    -rwxr-xr-x. 1 root root  877 3月  16 16:51 file_copy.py
    -rw-r--r--. 1 root root   48 3月  13 11:06 test1.py
    -rw-r--r--. 1 root root  445 3月  13 12:19 test2.py
    -rw-r--r--. 1 root root 2114 3月  12 19:37 test3.py
    -rw-r--r--. 1 root root 3489 3月   4 16:44 timg.jpeg
  • 相关阅读:
    table表框去掉相邻的间隔
    各种日期格式化返回
    校验金额、大小写字母、大写字母、合法uri、email
    vue js校验金钱、数字
    vue-router 动态添加 路由
    可视化-echarts流向图制作
    HTTP状态码
    二分查找
    编程语言的变量为啥不能是数字开头
    python位运算
  • 原文地址:https://www.cnblogs.com/surpass123/p/12575121.html
Copyright © 2011-2022 走看看