欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初学者python总结

程序员文章站 2022-04-25 23:09:20
...

初学者python总结

一、前言

二、python知识点总结

三、问题解析

四、结束语

一、前言

本人第一次写博客,为大一新生,到了大学才了解到python,如今已经学习了一学期,对python有了一些见解,希望能与各位大佬交流一下。python总的来说还是比较简单的,可能是我学得还不够深入,但只要投入时间,就会得到回报。下面我对这一学期python的总结与一些题目的解析。

二、python知识点总结

初学者python总结

以上是python总结的思维导图,有什么知识点遗漏的地方,希望大家能指点出来,补缺漏洞。

三、问题解析

泰迪杯B题7

1、根据附件 1 中的数据,提取每台售货机对应的 销售数据,保存在 CSV 文件中,文件名分别为 “task1-1A.csv”、“ task1-1B.csv”、…、task11E.csv”。

解题过程:

找出每台售货机对应的数据,(如图表格,地点那一列为 不同售货机的记号)如此一来,可以想办法将所有A、B、C、 D、E的数据分别提取出来
初学者python总结
步骤一:有了初步思路,我们开始操作,首先读取文件,以列表 的形式读取

with open('附件1.csv','r+') as f:
    k = f.readlines()

步骤二:遍历附件1中的每一行数据,然后将循环遍历中的数据 转化为列表,便于提取数据,再提取(附件1)中 ‘地点’ 那一列 数据(如图为b[6]),用简单的单分支结构判断是否为A售货机的 数据,最后写入文件中。

for x in a:
        b = x.split(',')
if b[6] == 'A':
with open('task1-1A.csv','a+')as f1:
                f1.write(x)

步骤三:已经提取了一个售货机的数据,其他还有难度吗?嗯, 没有了,只要将 (if b[6] == ‘A’???? 中的A换成其他字母再保存到 其他文件就完成任务了。(下图为完整代码)

with open('附件1.csv','r+') as f:
    k = f.readlines()
    a = k[1::]
for x in a:
        b = x.split(',')
if b[6] == 'A':
with open('task1-1A.csv','a+')as f1:
                f1.write(x)

当然,如果还嫌这样麻烦的话,我们可以改进一下
补充:我们将代码放入函数中,售货机记号作为参数,代码如图????

def y(z):
with open('附件1.csv','r+') as f:
    k = f.readlines()
    a = k[1::]
for x in a:
        b = x.split(',')
if b[6] == 'A':
with open('task1-1A.csv','a+')as f1:
                f1.write(x)
e = ['A','B','C','D','E']
for z in e:
    y(z)

2、根据附件 1 中的数据,计算每台售货机 2017 年 4 月份的交易额、订单量及所有售 货机交易总额和订单总量。

(以计算售货机A的2017年4月份的交易额、订单量为例)

解题过程:

第一题中,以拿到各个售货机的数据,如此一来,只要从各个售 货机的数据中提取四月份的数据再进行处理即可
初学者python总结
步骤一:有了初步思路,我们开始操作,首先赋值起始交易额、 订单量为0,再读取文件,以列表的的形式。

z = 0#交易额
n = 0#订单量
with open('附件1.csv','r+') as f:
    k = f.readlines()

步骤二:遍历附件1中的每一行数据,然后将循环遍历中的数据 转化为列表,提取日期F那一列,然后提取年月日,最后选取月 份。用单分子判断是否为四月份的数据,再将交易额和订单量累 加起来,输出结果。

for x in k:
        b = x.split(',')
        c = b[5].split(' ')
        d = c[0].split('/')
if d[1] == '4':
             n += 1
             z += float(b[3])
print('A售货机4月份的交易额:' + str(z))
print('A售货机4月份的订单量:' + str(n))

基本上完成任务,剩下的就是换个文件名称的问题了。
注意(用附件1文件计算所有售货机的交易额和订单时,要过滤 掉第一行无用数据)附上完整代码????

z = 0#交易额
n = 0#订单量
with open('附件1.csv','r+') as f:
    k = f.readlines()
for x in k:
        b = x.split(',')
        c = b[5].split(' ')
        d = c[0].split('/')
if d[1] == '4':
             n += 1
             z += float(b[3])
print('A售货机4月份的交易额:' + str(z))
print('A售货机4月份的订单量:' + str(n))

3、计算每台售货机每个月的每单平均交易 额与日均订单量

(以计算售货机A的2017年每个月的每单平均交易额与日均订单 量为例)

解题思路:

将每个月份的数据分隔开,再将各个月份的实付金额累加起来, 并计算每个月的订单量
初学者python总结

步骤一:创建空列表[](用来装各个月份),读取文件,以列表的形式。

u = []
with open('task1-1E.csv','r+') as f:
    k = f.readlines()

步骤二:遍历每行数据,取出各个月份,放入空列表中,再以各 个月份为键,初始值为0,构建字典j和字典t。

for x in k:
        a = x.split(',')
        c = a[5].split(' ')
        d = c[0].split('/')
        u.append(d[1])
    j = {}.fromkeys(u,0)
    t = {}.fromkeys(u,0)

步骤三:再次遍历每行数据,并取出各个月份,字典j中的值为 各个月份的交易额,字典t中各键的值为对应月份的订单量。在 遍历过程中不断累加。

for z in k:
        b = z.split(',')
        e = b[5].split(' ')
        f = e[0].split('/')       
        j[f[1]] += float(b[3])
        t[f[1]] += 1

步骤四:引入calendar模块(日历模块),遍历含有各个月份的 集合,计算每个月的每单平均交易额与日均订单量。

import calendar
for p in set(u):
        r = j[p]/t[p]
        h = t[p]/int(calendar.monthrange(2017,p)[1])
print(str(p)+'月的每单平均交易额为:'+ str(r))
print(str(p)+'月的日均订单量为:'+ str(h))

以上为售货机A的每单平均交易额与日均订单量,其他售货机同理。(附上完整代码)????

import calendar
u = []
with open('task1-1E.csv','r+') as f:
    k = f.readlines()
for x in k:
        a = x.split(',')
        c = a[5].split(' ')
        d = c[0].split('/')
        u.append(d[1])
    j = {}.fromkeys(u,0)
    t = {}.fromkeys(u,0)
for z in k:
        b = z.split(',')
        e = b[5].split(' ')
        f = e[0].split('/')       
        j[f[1]] += float(b[3])
        t[f[1]] += 1
for p in set(u):
        r = j[p]/t[p]
        h = t[p]/int(calendar.monthrange(2017,p)[1])
print(str(p)+'月的每单平均交易额为:'+ str(r))
print(str(p)+'月的日均订单量为:'+ str(h))

我校2019年Python 数据分析职业技能大赛

任务 1 数据预处理

4、任务 1.1 编写代码检查订单日期,将错误日期订单在原始数据中删除。

解题思路:

如下图为附件1中的数据,首先我将日期提取出来,再分析每个月的天数是否正确,从而完成任务
初学者python总结
步骤一:因为附件一中第一行数据会影响我的分析,所以我直接跳过第一行读取数据,然后将日期中日和月份提取出来。

with open('附件1.csv','r+')as f:
        a = f.readlines()
        a1 = a[1:]
for z in a1:
            b = z.split(',')
            c = b[1].split(' ')
            d = c[0].split('-')
# d[1] 为月份
# d[2] 为日

步骤二:我发现当日和月份都由两个数组成,小于10时,其前面会带有一个0,使我无法分析。我决定将日和月份的两个数拆开,分类谈论(例:01 转化为 [0,1])。当日的十位数为0时,该日期不会出现错误;当日的十位数不为0时,判断该月的天数是否错误,最后写进新文件中。

            e = ','.join(d[1]).split(',')
            y = ','.join(d[2]).split(',')
if int(y[0]) == 0:
                str1 = z
if int(y[0]) > 0:
if 0 < int(d[2]) <= int(calendar.monthrange(2019,int(y[0]))[1]):
                    str1 = z
with open('xinshuju.csv','a+')as f1:
                f1.write(str1)

任务完成。(附上完整代码)????

import calendar
def y():
with open('附件1.csv','r+')as f:
        a = f.readlines()
        a1 = a[1:]
for z in a1:
            b = z.split(',')
            c = b[1].split(' ')
            d = c[0].split('-')
# d[1] 为月份
# d[2] 为日
            e = ','.join(d[1]).split(',')
            y = ','.join(d[2]).split(',')
if int(y[0]) == 0:
                str1 = z
if int(y[0]) > 0:
if 0 < int(d[2]) <= int(calendar.monthrange(2019,int(y[0]))[1]):
                    str1 = z
with open('xinshuju.csv','a+')as f1:
                f1.write(str1)

5、任务 1.2 实销金额为 0 时,成本金额在[0, 300]区间表示该商品为普通赠品,成本金额大于 300 时该订单失效,需删除。 预处理后数据文件命名为 task1.csv。

解题思路:

我先判断实销金额是否为0,再分析成本金额是否在范围内,最后将正确数据写入文件。
初学者python总结
步骤一:读取数据,取出实销金额。

with open ('xinshuju.csv','r+')as f:
        data1 = f.readlines()
for line1 in data1[:5]:
            sList = line1.split(',')
# sList[13] 为实销金额

步骤二:判断实销金额是否为0,若为0,再判断成本金额是否在[0,300]内,若是,则写入文件;若实销金额不为0,则直接写入文件。

if float(sList[13]) == 0:
if float(sList[14]) >= 0 and float(sList[14]) <=300:
                    str2 = line1
if float(sList[13]) != 0:   
                str2 = line1
with open('task1.csv','a+')as f2:
                f2.write(str2) 

任务完成。(附上完整代码)????

def x():
with open ('xinshuju.csv','r+')as f:
        data1 = f.readlines()
for line1 in data1[:5]:
            sList = line1.split(',')
# sList[13] 为实销金额
if float(sList[13]) == 0:
if float(sList[14]) >= 0 and float(sList[14]) <=300:
                    str2 = line1
if float(sList[13]) != 0:   
                str2 = line1
with open('task1.csv','a+')as f2:
                f2.write(str2)        
x()

任务 2 数据处理与统计

6、任务 2.1 根据“订单类型”字段,提取每种订单对应的数据,保存在 CSV文件中,文件名分别为“C01.csv”、“C02.csv”、“C03.csv”、“C04.csv”。

解题思路:

我由订单类型中看出第三个字符是变化的,于是我定义一个函数,变量为[1,2,3,4],根据订单类型的第三个字符与函数变量相同,将数据写进相对应的文件。
初学者python总结
步骤一:定义一个p(z)函数,函数变量为z,读取数据并提取数据中订单类型中第三个字符。

def p(z):
with open('task1.csv','r+') as f:
        k = f.readlines()
for x in k:
            b = x.split(',')
            c = ','.join(b[0]).split(',')

步骤二:根据订单类型的第三个字符与函数变量z相同,将每种订单对应的数据写进其对应的文件中,最后输入函数变量。

if int(c[2]) == z:
with open('C0'+ str(z) +'.csv','a+')as f1:
                    f1.write(x)
for h in range(1,5):
    p(h)

任务完成。(附上完整代码)????

def p(z):
with open('task1.csv','r+') as f:
        k = f.readlines()
for x in k:
            b = x.split(',')
            c = ','.join(b[0]).split(',')
if int(c[2]) == z:
with open('C0'+ str(z) +'.csv','a+')as f1:
                    f1.write(x)
for h in range(1,5):
    p(h)

7、任务 2.2 统计每个一级商品类别的实际销售金额,将结果保存为“task2_2.csv”。

解题思路:

创建一个字典,我将每个一级商品类型作为字典的键,每个一级商品类别对应的实际销售金额作为值,再将结果写入文件,便可完成任务。
初学者python总结
步骤一:我先创建一个空列表(装每个一级商品类型),读取数据,取出一级商品类别中的数据添加到空列表中,再创建一个字典j,每个一级商品类型作为字典的键,每个键所对应的初始值为0.

u = []
with open('task1.csv','r+') as f:
    k = f.readlines()
for x in k:
        h = x.split(',')
        u.append(h[6])
    j = {}.fromkeys(u,0)

步骤二:再次遍历数据,将各个一级商品类型对应的实际销售金额累加起来,最后写入文件中。

for z in k:
        b = z.split(',')
        j[b[6]] += float(b[13])
for v in set(u):
        str1 = str(v) + ',' + str(j[v]) + '\n'
with open('Atask2_2.csv','a+')as f1:
            f1.write(str1)

任务完成。(附上完整代码)????

u = []
with open('task1.csv','r+') as f:
    k = f.readlines()
for x in k:
        h = x.split(',')
        u.append(h[6])
    j = {}.fromkeys(u,0)
for z in k:
        b = z.split(',')
        j[b[6]] += float(b[13])
for v in set(u):
        str1 = str(v) + ',' + str(j[v]) + '\n'
with open('Atask2_2.csv','a+')as f1:
            f1.write(str1)

8、任务 2.3 统计每个分公司的“秋冬”商品实际销售金额和“春夏”商品实际销售金额,将结果保存为“task2_3.csv”。

解题思路:

与任务2.2的思路一致,创建一个字典,我将[每个公司+秋冬(春夏)]作为字典的键,对应的实际销售金额作为值。将结果写入文件便可完成任务。
初学者python总结
步骤一:我先创建一个空列表(装每个公司+秋冬(春夏)),读取数据,取出(各分公司与服装季,两者凑成一个字符串)添加到空列表中,再创建一个字典j,每个公司+秋冬(春夏)作为字典的键,每个键所对应的初始值为0.

with open ("task1.csv","r") as f:           # 打开同目录下(task1.csv)文件,简称为f          
        data = f.readlines()                    # 读取f文件中的数据        

for line in data:                       # 遍历data中的数据          
            lineList = line.split(",")          # 以‘,’为分隔符,构成新的列表           
            lineList = lineList[3] +','+ lineList[2]                
            listName.append(lineList)           # 将各公司和季节写进空列表中
        dic = {}.fromkeys(listName,0)           # 将集合中的元素作为字典dic中的键,每个键的初始值0 

(为何在分公司与服装季中间加上逗号,为后面写入csv文件提供了方便)

步骤二:步骤二:再次遍历数据,将每个公司+秋冬(春夏)对应的实际销售金额累加起来,最后写入csv文件中。

for line in data:                       # 遍历data中的数据          
            lineList1 = line.split(",")         # 以‘,’为分隔符,构成新的列表
            lineList = lineList1[3] +','+ lineList1[2]
            dic[lineList] += float(lineList1[13])   # 将各公司与季节所对应的金额累加起来
for i in set(listName):                       # 遍历setName中的数据
            str2 = str(i) +  ',' + str(dic[i]) + '\n'
with open ("task2_3.csv","a+") as f1: # 创建名为:task2_3 的csv文件,简称为f1
                f1.write(str2)   

任务完成。(附上完整代码)????

listName =[]    
def x23()                   
with open ("task2_3.csv","a+") as f3:       # 增加表头
        str1 = '分公司'+ ',' + '服装季'+ ',' + '商品实际销售金额' + '\n'
        f3.write(str1)
with open ("task1.csv","r") as f:           # 打开同目录下(task1.csv)文件,简称为f          
        data = f.readlines()                    # 读取f文件中的数据        

for line in data:                       # 遍历data中的数据          
            lineList = line.split(",")          # 以‘,’为分隔符,构成新的列表           
            lineList = lineList[3] +','+ lineList[2]   # 将集合中的元素作为字典dic中的键,每个键的初始值0                  
            listName.append(lineList)           # 将各公司和季节写进空列表中
        dic = {}.fromkeys(listName,0)
for line in data:                       # 遍历data中的数据          
            lineList1 = line.split(",")         # 以‘,’为分隔符,构成新的列表
            lineList = lineList1[3] +','+ lineList1[2]
            dic[lineList] += float(lineList1[13])   # 将各公司与季节所对应的金额累加起来
for i in set(listName):                       # 遍历setName中的数据
            str2 = str(i) +  ',' + str(dic[i]) + '\n'
with open ("task2_3.csv","a+") as f1: # 创建名为:task2_3 的csv文件,简称为f1
                f1.write(str2)
x23()                                  

9、任务 2.4 统计“直营客户”和“加盟客户”每月的实际订购金额和订单量, 将结果保存为“task2_4.csv”。

解题思路:

创建四个字典,两个将(月份)作为字典的键,对应的实际销售金额作为值,另两个将(月份)作为字典的键,对应的订单量作为值,最后将结果写入文件便可完成任务。
初学者python总结
步骤一:创建两个空列表u和o,u用来装(客户类型),o用来装(月份)。遍历数据,取出各月份和客户类型,将各个月份添加到列表o中,各个客户类型添加到列表u中。再创建四个字典dian1、dian2、j、t,字典dian1和j分别表示“直营客户”每月的实际订购金额和订单量;字典dian2和t分别表示“加盟客户”每月的实际订购金额和订单量。

    o = []                                      # 创建空列表
with open('task1.csv','r+') as f:           # 打开同目录下(task1.csv)文件,简称为f   
        k = f.readlines()                       # 读取f文件中的数据  
for x in k:                             # 遍历k中的数据
            a = x.split(',')                    # 以‘,’为分隔符,构成新的列表
            l = a[1].split(' ')                 # 以‘  ’为分隔符,构成新的列表
            m = l[0].split('-')                 # 以‘—’为分隔符,构成新的列表
            h = ','.join(m[1]).split(',')       # 将月份分开(例:01转化为0,1)
            o.append(h[1])                      # 将月份的数据加入空列表中
        dian1 = {}.fromkeys(o,0)                # 将列表中的元素作为字典j中的键,每个键的初始值0
        dian2 = {}.fromkeys(o,0)
        j = {}.fromkeys(o,0)
        t = {}.fromkeys(o,0)

步骤二:再次遍历数据,取出各月份,用两个单分支累加“直营客户”和“加盟客户”每月的实际订购金额和订单量,最后将结果写入文件中。

for z in k:                             # 遍历k中的数据
            list1 = z.split(',')                # 以‘,’为分隔符,构成新的列表
            c = list1[1].split('  ')            # 以‘  ’为分隔符,构成新的列表
            d = c[0].split('-')                 # 以‘—’为分隔符,构成新的列表
            e = ','.join(d[1]).split(',')       # 将月份分开(例:01转化为0,1)
if list1[4] == '01|直营客户':       # 若list1[4]为'01|直营客户'执行以下语句块
                dian1[e[1]] += float(list1[13]) # 累加各月份的销售额
                t[e[1]] += 1                    # 累加销售量
if list1[4] == '02|加盟客户':       # 若list1[4]为'02|加盟客户'执行以下语句块
                dian2[e[1]] += float(list1[13]) # 累加各月份的销售额
                j[e[1]] += 1                    # 累加销售量

for jine in set(o):                     # 遍历集合o中的数据
            str2 = '01|直营客户,' + str(jine) +'月'+ ',' +str(dian1[jine]) + ',' + str(t[jine])+ '\n'
with open('task_2.4.csv','a+')as f3: # 创建名为:task2_4 的csv文件,简称为f3
                f3.write(str2)                  # 将字符串str2写f1文件中
for jine in set(o):                     # 遍历集合o中的数据
            str2 = '02|加盟客户,' + str(jine) +'月'+ ',' + str(round(dian1[jineA],2)) + ',' + str(j[jine])+ '\n'
with open('task2_4.csv','a+')as f3: # 打开名为task2_4的csv文件,简写为f3
                f3.write(str2)                  # 将字符串str2写f1文件中A

任务完成。(附上完整代码,略长)????

def x24():                                      # 定义x24函数
    o = []                                      # 创建空列表
with open('task1.csv','r+') as f:           # 打开同目录下(task1.csv)文件,简称为f   
        k = f.readlines()                       # 读取f文件中的数据  
for x in k:                             # 遍历k中的数据
            a = x.split(',')                    # 以‘,’为分隔符,构成新的列表
            l = a[1].split(' ')                 # 以‘  ’为分隔符,构成新的列表
            m = l[0].split('-')                 # 以‘—’为分隔符,构成新的列表
            h = ','.join(m[1]).split(',')       # 将月份分开(例:01转化为0,1)
            o.append(h[1])                      # 将月份的数据加入空列表中
        dian1 = {}.fromkeys(o,0)                # 将列表中的元素作为字典j中的键,每个键的初始值0
        dian2 = {}.fromkeys(o,0)
        j = {}.fromkeys(o,0)
        t = {}.fromkeys(o,0)

for z in k:                             # 遍历k中的数据
            list1 = z.split(',')                # 以‘,’为分隔符,构成新的列表
            c = list1[1].split('  ')            # 以‘  ’为分隔符,构成新的列表
            d = c[0].split('-')                 # 以‘—’为分隔符,构成新的列表
            e = ','.join(d[1]).split(',')       # 将月份分开(例:01转化为0,1)
if list1[4] == '01|直营客户':       # 若list1[4]为'01|直营客户'执行以下语句块
                dian1[e[1]] += float(list1[13]) # 累加各月份的销售额
                t[e[1]] += 1                    # 累加销售量
if list1[4] == '02|加盟客户':       # 若list1[4]为'02|加盟客户'执行以下语句块
                dian2[e[1]] += float(list1[13]) # 累加各月份的销售额
                j[e[1]] += 1                    # 累加销售量

for jine in set(o):                     # 遍历集合o中的数据
            str2 = '01|直营客户,' + str(jine) +'月'+ ',' +str(dian1[jine]) + ',' + str(t[jine])+ '\n'
with open('task_2.4.csv','a+')as f3: # 创建名为:task2_4 的csv文件,简称为f3
                f3.write(str2)                  # 将字符串str2写f1文件中
for jine in set(o):                     # 遍历集合o中的数据
            str2 = '02|加盟客户,' + str(jine) +'月'+ ',' + str(round(dian1[jineA],2)) + ',' + str(j[jine])+ '\n'
with open('task2_4.csv','a+')as f3: # 打开名为task2_4的csv文件,简写为f3
                f3.write(str2)                  # 将字符串str2写f1文件中A
x24()

10、任务 2.5 根据“商品名和编码”字段,统计不重复商品名及其对应一二级类,将结果保存为“task2_5.csv”。

解题思路:

与之前一样的思路,创建一个字典,商品名作为键,商品名对应一二级类为值,最后将结果写入文件即可。
初学者python总结
步骤一:创建一个新列表(装商品名),读取数据,取出各个商品名的数据,添加到空列表中,再创建新字典,以各个商品名作为键,各键对应的值起始为空。

    namelist1 = []
    str2 = '商品名' + ',' + '一级商品类别' + ',' + '二级商品类别' + '\n'
with open('task2_5.csv','a+')as f:          # 添加表头
        f.write(str2)

with open('task1.csv','r+')as f:            # 打开同目录下(task1.csv)文件,简称为f  
        data1 = f.readlines()                   # 读取f文件中的数据
for line in data1:                      # 遍历data1中的数据
            nameline = line.split(',')          # 以‘,’为分隔符,构成新的列表
            nameline1 = nameline[8].split('|')  # 以‘|’为分隔符,构成新的列表     
            namelist1.append(nameline1[1])       # 将nameline[8]内的数据加入空列表中
        j = {}.fromkeys(namelist1,'')

步骤二:再次遍历数据,将商品名对应一二级类添加入字典,最后将结果写入文件中。

for line in data1:                      # 遍历data1中的数据
            nameline2 = line.split(',')      # 以‘,’为分隔符,构成新的列表
            nameline3 = nameline2[8].split('|')  # 以‘|’为分隔符,构成新的列表
            str1 = nameline2[6] + ',' +  nameline2[7]
            j[nameline3[1]] = str(str1)
for o in set(namelist1):                       # 遍历var中的数据
            str2 = str(o) +","+ str(j[o]) + "\n"
with open('Atask2_5.csv','a+')as f1: # 创建名为:task1 的csv文件,简称为f2
                f1.write(str2)

任务完成。(附上完整代码,略长)????

def x25():
    namelist1 = []
    str2 = '商品名' + ',' + '一级商品类别' + ',' + '二级商品类别' + '\n'
    with open('task2_5.csv','a+')as f:          # 添加表头
        f.write(str2)
    with open('task1.csv','r+')as f:            # 打开同目录下(task1.csv)文件,简称为f  
        data1 = f.readlines()                   # 读取f文件中的数据
        for line in data1:                      # 遍历data1中的数据
            nameline = line.split(',')          # 以‘,’为分隔符,构成新的列表
            nameline1 = nameline[8].split('|')  # 以‘|’为分隔符,构成新的列表     
            namelist1.append(nameline1[1])       # 将nameline[8]内的数据加入空列表中
        j = {}.fromkeys(namelist1,'')
        for line in data1:                      # 遍历data1中的数据
            nameline2 = line.split(',')      # 以‘,’为分隔符,构成新的列表
            nameline3 = nameline2[8].split('|')  # 以‘|’为分隔符,构成新的列表
            str1 = nameline2[6] + ',' +  nameline2[7]
            j[nameline3[1]] = str(str1)
        for o in set(namelist1):                       # 遍历var中的数据
            str2 = str(o) +","+ str(j[o]) + "\n"
            with open('Atask2_5.csv','a+')as f1: # 创建名为:task1 的csv文件,简称为f2
                f1.write(str2)  
x25()

课后作业

11、数据分析中的异常处理 使用 testError.csv 数据(qq 群下载),统计每种商品的销售额。

提示:testError.csv 中的销售额存在非数字格式的”NA”值,还存在数据缺失的情 况。直接使用文件操作作业第二题的代码计算会抛出异常,需要使用 try…语句完 善代码,实现读取数据时的异常处理。

解题思路:

从数据中可以看出,数据出现了两种错误,一是实际金额为NA的,二是空白的,我认为可以先将统计每种商品销售额的代码打出来,运行再观察哪个地方出现了错误,再使用try…语句完善代码。
初学者python总结
步骤一:先假设数据都是正确的,写出计算商品销售额的代码。

b = []
with open('testError.csv','r+')as p:                  # 打开同一目录下命名为'testError'的csv文件进行读写模式,简称为p,操作结束后自动关闭文件
    k = p.readlines()                                 # 读取p中的数据,并转化为列表
    for x in k:                                       # 循环变量x遍历列表k
        a = x.split(',')                              # 将变量x以‘,’为分隔符创建新列表a
        b.append(a[4])                            # 将列表l中下标为4的元素添加到列表b中
j = {}.fromkeys(set(b),0)                         # 将列表b转化为集合(去重),并将集合中的元素作为字典j中的键,每个键的初始值0
    for z in k:                                       # 循环变量x遍历列表k
        lineList = z.split(',')                       # 将变量z以‘,’为分隔符创建新列表lineList
        j[lineList[4]] += float(lineList[3])      # 将字典j中每个键相对应的值累加起来
    for i in set(b):                                  # 循环变量i遍历集合b
        str1 = i + ',' + str(j[i]) + '\n'
        with open('saleALL.csv','a+')as v:            # 新建名为‘saleAll’的csv文件,并命名为v
            v.write(str1)

步骤二:运行步骤一中代码,可以知道( j[lineList[4]] += float(lineList[3]) )在累加销售额时会发生异常,因为字符串‘NA’不能转化为浮点数。所以我将累加销售额这句代码放进str语句中,即可实现过滤错误数据。

b = []
with open('testError.csv','r+')as p:                  # 打开同一目录下命名为'testError'的csv文件进行读写模式,简称为p,操作结束后自动关闭文件
    k = p.readlines()                                 # 读取p中的数据,并转化为列表
    for x in k:                                       # 循环变量x遍历列表k
        a = x.split(',')                              # 将变量x以‘,’为分隔符创建新列表a
        b.append(a[4])                            # 将列表l中下标为4的元素添加到列表b中
j = {}.fromkeys(set(b),0)                         # 将列表b转化为集合(去重),并将集合中的元素作为字典j中的键,每个键的初始值0
    for z in k:                                       # 循环变量x遍历列表
        lineList = z.split(',')                       # 将变量z以‘,’为分隔符创建新列表lineList
        try:
             j[lineList[4]] += float(lineList[3])      # 将字典j中每个键相对应的值累加起来
        except:
             pass
    for i in set(b):                                  # 循环变量i遍历集合b
        str1 = i + ',' + str(j[i]) + '\n'
        with open('saleALL.csv','a+')as v:            # 新建名为‘saleAll’的csv文件,并命名为v
            v.write(str1)

步骤三:经过步骤的修改后,代码不会出现报错了,但是在新文件中,我发现还是会有空白行出现,如何去掉空白行呢,销售额那一列的错误已经解决,剩下就是商品名的问题,我发现集合b中会有空白商品名,所以我在集合b形成之前过滤掉空白。

b = []
with open('testError.csv','r+')as p:                  # 打开同一目录下命名为'testError'的csv文件进行读写模式,简称为p,操作结束后自动关闭文件
    k = p.readlines()                                 # 读取p中的数据,并转化为列表
    for x in k:                                       # 循环变量x遍历列表k
        a = x.split(',')                              # 将变量x以‘,’为分隔符创建新列表a
        tryfloat(a[3])
             b.append(a[4])                            # 将列表l中下标为4的元素添加到列表b中
       	except:
       	     pass
j = {}.fromkeys(set(b),0)                         # 将列表b转化为集合(去重),并将集合中的元素作为字典j中的键,每个键的初始值0
    for z in k:                                       # 循环变量x遍历列表
        lineList = z.split(',')                       # 将变量z以‘,’为分隔符创建新列表lineList
        str:
             j[lineList[4]] += float(lineList[3])      # 将字典j中每个键相对应的值累加起来
        except:
             pass
    for i in set(b):                                  # 循环变量i遍历集合b
        str1 = i + ',' + str(j[i]) + '\n'
        with open('s0aleALL.csv','a+')as v:            # 新建名为‘saleAll’的csv文件,并命名为v
            v.write(str1)

如此操作后,空白行也去掉了,问题也算是解决了。

12、打印乘法表。

解题思路:

找到乘法表的规律(11=1,21=2,22=4,…),可以发现乘法表的每一行的式子(11=1)数目都由第一个数决定,我想到了用两个for循环,第一个for循环作为每个式子第一个数,第二个for循环控制式子数目。

    for x in range(1,10):      # 由循环变量x计数循环(num+1次)
        for z in range(1,x+1):              # 由循环变量z计数循环(x+1次)
            print("%d*%d=%2d"%(x,z,x*z),end=" ")  # 输出结果,并用"  "代替换行
        print()                             # 内层for in结束,输出,使外层for in循环一次的结果分行

13、返回第 n 个 fibonaccia 数

解题思路:第n个fibonaccia 数是由其前两项相加而得,即要讨论n<=1时,n>1时两种情况。当n<=1时,即 fibonaccia 数为其本身,当n>1时,第n个fibonaccia 数= 第n-1个+第n-2个。
def fib(n):
    '''返回第 n 个 fibonaccia 数'''
    a,b = 0,1
    if n<=1:
        return n
    for i in range(2, n+1):
        a,b = b,a+b
    return b

也可用递推的方法

def fib_rec(n):
    if n<=1:
        return n
    return fib(n-1)+fib(n-2)

14、将字典按照value的值从大到小排序

解题思路:

要将字典按照value的值排序,就要先将其提取出来,或是表达出来,然后用匿名函数,value的值作为变量进行排序。

def sort_dict(d):
    d = list(d.items())
    d = sorted(d, key=lambda t:t[1], reverse=True)
    return d

15、计数有序数据元素 e 的数量

解题思路:

可先遍历有序数据,再运用单分支判断循环变量是否为e,若为e,元素e的数量+1;若不为e,元素e的数量不变

def the_count(seq, e):
    _c = 0
    for j in seq:
        if j==e:
            _c += 1
    return _c  

四、结束语

python还是比较有趣的,就跟游戏一样,玩得越多就会挖掘出越多的彩蛋,希望以后能与大家共同游戏。

相关标签: 例题解析 python