Python_day08作业详解编程语言

1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数。

apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
通过代码,将其构建成这种数据类型:
[{‘name’:’apple’,’price’:10,’amount’:3},
{‘name’:’tesla’,’price’:1000000,’amount’:1}……] 并计算出总价钱。

答:

li = [] 
with open('a.txt', encoding='utf-8', mode='r') as f1: 
    for i in f1: 
        l2 = i.strip().split() 
        dic = {'name':l2[0], 'price':l2[1], 'amount':l2[2]} 
        li.append(dic) 
print(li) 
sum = 0 
for j in li: 
    sum = sum + int(j['price']) * int(j['amount']) 
print(sum) 
 
优化扩展代码如下: 
name_list = ['name', 'price', 'amount'] 
li = [] 
with open('a.txt', encoding='utf-8', mode='r') as f1: 
    for i in f1: 
        l2 = i.strip().split() 
        # dic = {} 
        # for j in range(len(l2)): 
        #     dic[name_list[j]] = l2[j] 
        dic = dict(zip(name_list, l2)) # 前面三句可以优化成这一句,易读性也更强 
        li.append(dic) 
print(li) 
sum = 0 
for k in li: 
    sum = sum + int(k['price']) * int(k['amount']) 
print(sum)

2,有如下文件:

------- 
alex是老男孩python发起人,创建人。 
alex其实是人妖。 
谁说alex是sb? 
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。 
----------

将文件中所有的alex都替换成大写的SB。

import os 
with open('alex.txt', encoding='utf-8', mode='r') as f1,/ 
    open('SB.txt', encoding='utf-8', mode='w') as f2: 
    for i in f1: 
        print(i) 
        new_i = i.replace('alex', 'SB') 
        f2.write(new_i) 
os.remove('alex.txt') 
os.rename('SB.txt', 'alex.txt')

3. 文件a1.txt内容:

文件内容: 
name:apple price:10 amount:3 year:2012 
name:tesla price:100000 amount:1 year:2013 
 
通过代码,将其构建成这种数据类型: 
[{'name':'apple','price':10,'amount':3}, 
{'name':'tesla','price':1000000,'amount':1}......] 
 
# 直接通过a模式创建题目所需要的a1文件 
# with open('a1.txt', encoding='utf-8', mode='a') as f1: 
#     f1.write('name:apple price:10 amount:3 year:2012/n') 
#     f1.write('name:tesla price:100000 amount:1 year:2013') 
 
# 接下来的解题代码如下: 
lis = [] 
dic = {} 
with open('a1.txt', encoding='utf-8', mode='r') as f2: 
    for i in f2: 
        # 第一次大循环按行转换成列表 
        li = i.strip().split() 
        for j in li: 
            # 小循环里面通过分割':'得到一对键值对 
            KeyVal = j.split(':') 
            # 分别赋值给初始的空字典,完成小循环添加完毕 
            dic.setdefault(KeyVal[0], KeyVal[1]) 
        # 第一行大循环时增添第一行对应的dic字典 
        lis.append(dic) 
        # 关键来了,再把字典给清空再进行第二行的大循环,不然小循环里会增添不上。 
        dic = {} 
print(lis)

4,文件a2.txt内容:

文件内容:
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
通过代码,将其构建成这种数据类型:
[{‘序号’:’1′,’部门’:Python,’人数’:30,’平均年龄’:26,’备注’:’单身狗’},
……]

li = [] 
with open('a2.txt', encoding='utf-8', mode='r') as f1: 
    key = f1.readline().strip().split() 
    # 先读取第一行作为key键的列表元素 
    # 此时光标己移到第2行开头,再进行后面同样是充当键值的行循环就简单多了 
    print(key) 
    for i in f1: 
        print(i) 
        val = i.strip().split() 
        # 以key为基准,循环i次去进行zip函数两个列表合并成字典的操作就简单了 
        dic = dict(zip(key, val)) 
        li.append(dic) 
print(li) 
 
每一步print出来的效果如下,可以更直观看到: 
 
['序号', '部门', '人数', '平均年龄', '备注'] 
 
1       python    30         26         单身狗 
 
2       Linux     26         30         没对象 
 
3       运营部     20         24         女生多 
 
[{'平均年龄': '26', '备注': '单身狗', '部门': 'python', '人数': '30', '序号': '1'},  
 {'平均年龄': '30', '备注': '没对象', '部门': 'Linux', '人数': '26', '序号': '2'},  
 {'平均年龄': '24', '备注': '女生多', '部门': '运营部', '人数': '20', '序号': '3'}]

5,明日默写:就是第二题的代码(课上讲过)。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/12770.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论