• python学习之编程思想、内置函数及模块作业


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

    ​ egon male 18 3000
    ​ alex male 38 30000
    ​ wupeiqi female 28 20000
    ​ yuanhao female 28 10000

    要求:
    从文件中取出每一条记录放入列表中,
    列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式

    with open('db.txt','rt',encoding='utf8') as f:
        user_info = []
        for line in f:
            name,sex,age,salary=line.strip().split()
            info = [name,sex,int(age),int(salary)]
            user = {k:v for k,v in zip(['name','sex','age','salary'],info)}
            user_info.append(user)
    
    print(user_info)
    

    2、根据1得到的列表,取出薪资最高的人的信息

    max_salary_info = max(user_info,key=lambda k:k['salary'])
    print(max_salary_info)
    

    3 、根据1得到的列表,取出最年轻的人的信息

    youngest_info = min(user_info,key=lambda k:k['age'])
    print(youngest_info)
    

    4、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写

    names=['egon','alex_sb','wupeiqi','yuanhao']
    names1 = map(lambda name:name.upper() ,names)
    names2 = (name.upper() for name in names)
    print(list(names1))
    print(list(names2))
    

    5、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度

    names=['egon','alex_sb','wupeiqi','yuanhao']
    sb_name = [name[:-3] for name in names if name.endswith('sb')]
    print(sb_name[0])
    
    sb_name1 = list(filter(lambda name:name.endswith('sb'),names))
    print(sb_name1[0][:-3])
    

    6、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)

    with open('a.txt','rt',encoding='utf8') as f:
        max_line = max(f,key=lambda k:len(k))
    
    res = len(max_line)
    print(res)
    

    7、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
    方法一

    with open('a.txt','rt',encoding='utf8') as f:
        res = 0
        for line in f:
            res += len(line)
    
    print(res)
    

    方法二

    with open('a.txt','rt',encoding='utf8') as f:
        res= sum([len(line) for line in f])
    
    print(res)
    
    with open('a.txt','rt',encoding='utf8') as f:
        res = sum(len(line) for line in f)
        res1= sum(len(line) for line in f)
    
    print(res)  #130
    print(res1) #0
    

    因为第一次sum求和后文件指针已跳到文件末尾

    with open('a.txt','rt',encoding='utf8') as f:
        res = sum(len(line) for line in f)
        f.seek(0,0)
        res1= sum(len(line) for line in f)
    
    print(res)  #130
    print(res1) #130
    

    8、思考题

    with open('a.txt') as f:
        g=(len(line) for line in f)
    print(sum(g)) #为何报错?
    

    g是一个生成器,g产生值必须读取文件中的内容;sum(g)在with控制的范围之外,因此报错。

    9、文件shopping.txt内容如下

    mac,20000,3
    lenovo,3000,10
    tesla,1000000,10
    chicken,200,1
    求总共花了多少钱?

    with open('shopping.txt','rt',encoding='utf8') as f:
        shopping_list = []
        keys = ['name','price','count']
        for line in f:
            name,price,count=line.strip().split(',')
            values=[name,int(price),int(count)]
            shopping_list.append(dict(zip(keys,values)))
    
    total_money = sum(item['price']*item['count'] for item in shopping_list)
    print(total_money)
    

    打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]

    print(shopping_list)
    

    求单价大于10000的商品信息,格式同上

    ten_thousand_more = filter(lambda x:x.get('price')>10000,shopping_list)
    print(list(ten_thousand_more))
    

    10、思考:判断下述说法是否正确

    ​ 题目1:
    ​ 1、应该将程序所有功能都扔到一个模块中,然后通过导入模块的方式引用它们
    ​ 错
    ​ 2、应该只将程序各部分组件共享的那一部分功能扔到一个模块中,然后通过导入模块的方式引用它们
    ​ 对
    ​ 题目2:
    ​ 运行python文件与导入python文件的区别是什么?
    ​ 运行python文件会产生这个文件的名称空间,如果这个python文件中导入了其他python文件,会产生导入的python文件的名称空间,
    ​ 被导入的python文件的名称空间中会产生一个导入的python文件的名字,名字指向导入的python文件产生的名称空间
    ​ 运行的python文件产生的名称空间何时回收,为什么?
    ​ python文件运行结束后回收
    ​ 导入的python文件产生的名称空间何时回收,为什么?
    ​ 被导入的python文件python解释器关闭时回收

  • 相关阅读:
    16.10.16学到的JAVA知识
    参数类型转换求和(JAVA)
    大道至简第一篇读后感之愚公移山(伪代码)
    First
    18.10.22 luoguP3374 【模板】树状数组 1
    18.10.16 luoguP3372 线段树模板-区间更新值&求和(POJ3468 A Simple Problem with Integers)
    18.10.16 POJ 2528 Mayor's posters(线段树+离散化)
    18.10.15 POJ 2182 Lost Cows(线段树)
    18.10.10 数算作业-字符串
    18.10.9 不好做的最长上升子序列(nlogn树状数组解LIS)
  • 原文地址:https://www.cnblogs.com/leilijian/p/12577239.html
Copyright © 2020-2023  润新知