Python二级考试-综合应用题(csv文件读取与操作示例)
一:二级等级基本要求
掌握Python语言的基本语法规则。
掌握不少于2个基本的Python标准库。
掌握不少于2个Python第三方库,掌握获取并安装第三方库的方法。
能够阅读和分析Python程序。
熟练使用IDLE开发环境,能够将脚本程序转变为可执行程序。
了解Python计算生态在以下方面(不限于)的主要第三方库名称:网络爬虫、数据分析、数据可视化、机器学习、Web开发等
二:给出题目
考生文件夹中有这样一个csv文件(如下图所示)
三:问题1
分析问题:打开csv文件后,将csv中的内容添加到列表中,然后根据用户键盘输入的星座输出星座的日期范围即可(详情请看代码注释)。
代码实现:
# !/usr/bin/env python # -*- encoding:utf-8 -*- # 作者:赖正华 def read_files(): """读取文件""" files = open("C:\\WEXAM\\000000000000\\PY301-SunSign.csv","r",encoding="gbk") # 文件地址以文件所在位置为准 data = files.readlines() # 逐行读取文件,并返回一个列表 lis = [] for i in data[1:]: # 遍历读取的文件列表,并去掉第一行 line = i.split(',') # 用","分隔开,并返回一个列表 lis.append(line) files.close() return lis def get_user_enter(lis): """获得用户输入""" user = input("请输入星座中文名称(例如:双子座):") for l in lis: if l[1] == user: print("{}的生日位于{}-{}之间".format(l[1],l[2],l[3])) if __name__ == "__main__": lis = read_files() get_user_enter(lis)
输出示例:
四:问题2
分析问题:与问题1类似,在代码中使用循环结构和分支结构相结合的方式,根据用户键盘输入的序号输出星座的名称。字符编码和生日范围。(详情请看代码注释)
代码实现:
# !/usr/bin/env python # -*- encoding:utf-8 -*- # 作者:赖正华 def read_files(): """读取文件""" files = open("C:\\WEXAM\\000000000000\\PY301-SunSign.csv","r",encoding="gbk") # 打开文件,文件打开位置以文件所在位置为准 data = files.readlines() # 逐行读取文件,并返回一个列表,每一行即为一个列表元素 lis = [] # 新建一个列表,用于存放分割后的新元素 for i in data[1:]: # 此操作去掉第0行 line = i.split(',') # 用','对每一行进行分割,并放入新的列表,方便后面计算。 lis.append(line) files.close() return lis # 让函数返回列表 def get_user_enter(lis): """获得用户输入""" while True: user = input("请输入星座序号(例如:5):") # 获得用户输入 if user == 'n': # 防止死循环 break else: new_user = user.split() # 对用户输入的内容进行分割,这里也是返回一个列表 for num in new_user: for line in lis: # 遍历每一行(用','好分割过的) if int(num) == int(line[2][:-2]): # 这里用户输入的星座序号要和题目给出文件做计算,也是本题的关键和规律所在 m1,d1 = line[2][:-2],line[2][-2:] m2,d2 = line[3][:-2],line[3][-2:] print("{}({})的生日是{}月{}日至{}月{}日之间".format(line[1],line[4].strip('\n'),m1,d1,m2,d2)) if __name__ == "__main__": lis = read_files() get_user_enter(lis)
注:
if int(num) == int(line[2][:-2]): 这行代码就是就是本题的规律,如果用户输入的序号与文件开始月日的月份相等(如:120就代表1月20日),那么该序号就是与之相对应的星座生日范围,最后根据切片输出
相应的内容即可。
输出示例:
五:问题3
分析问题:写出问题2后,问题3就简单了很多,就是在问题2的基础上,添加判断用户键盘输入的序号是否在csv文件中(或者是列表在)。
代码实现:
# !/usr/bin/env python # -*- encoding:utf-8 # 作者:赖正华 def read_files(): """读取文件""" files = open("C:\\WEXAM\\000000000000\\PY301-SunSign.csv","r",encoding="gbk") data = files.readlines() lis = [] for i in data[1:]: line = i.split(',') lis.append(line) files.close() return lis def get_user_enter(lis): """获得用户输入""" while True: user = input("请输入星座序号(例如:5):") if user == 'n': break else: new_user = user.split() for num in new_user: if int(num) <= 0 or int(num) > 12: # 在问题2的基础上,判断用户输入序号是否在1-12之间。 print("输入星座序号有误!") for line in lis: if int(num) == int(line[2][:-2]): m1,d1 = line[2][:-2],line[2][-2:] m2,d2 = line[3][:-2],line[3][-2:] print("{}({})的生日是{}月{}日至{}月{}日之间".format(line[1],line[4].strip('\n'),m1,d1,m2,d2)) if __name__ == "__main__": lis = read_files() get_user_enter(lis)
输出示例:
初次写博客,内容粗糙!有看不懂的地方还请见谅!
学习没有捷径,需要日积月累的积淀及对技术的热爱。