Python二级考试-综合应用题(csv文件读取与操作示例)

时间:2024-03-12 13:39:50

一:二级等级基本要求

掌握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)

输出示例:

初次写博客,内容粗糙!有看不懂的地方还请见谅!