首页编程Python文章详细

Python文本字符检索与输出?

原创 2023-03-21 12:47:54 796

法定节假日是根据各国、各名族的风俗习惯或纪令要求,由国家法律统一规定的用以进行庆祝及度假的休息时间。法定节假日制度是国家政治、经济、文化制度的重要反映,涉及经济社会的多个方面,涉及广大人民群众的切身利益。法定节假日的休假安排,为居民出行购物和休闲提供了时间上的便利,为拉动内需、促进经济增长做出了和极贡献。

给出一个2018年的节假日的放假日期CSV文件(PY301-vacations.csv),内容示例如下:

image.png

以第1行为例,1230表示12月30日,0101表示1月1日。

在PY301-1 py文件中修改代码,读入CSV文件中数据,获得用户输入。根据用户输入的节假日名称,输出此节假日的假期范围。

参考输入和输出示例格式如下:

请输入节假日名称(例如,春节):春节

春节的假期位于0215-0221之间

代码如下:

fi = open("PY301-vacations.csv","r")
ls = []
for line in fi:
    ls.append(line.strip("\n").split(","))
fi.close()
s = input("请输入节假日名称:")
for line in ls:
    if s == line[1]:
      print("{}的假期位于{}-{}之间".format(line[1],line[2],line[3]))

【解题思路】

(1)对文件的读操作需要使用openO函数,模式为“r”;将文件读入后,需要把CSV格式文件转化成二维数据,并将其转化成二维列表对象。首先定义一个列表1s,把读入的每行数据使用srinO函数清除掉拉行符,再使用splitO函数在元素之间以*.~分隔存储在列表Is中,splitO函数返回的是一个列表,因此把CSV格式转化成二维列表对象。使用input)函数获取用户输入,再用for循环遍历二维列表,如果输入的节假日名称在列表中,则输出对应的时间段。


在PY301-2.py文件中修改代码,读入CSV文件中数据,获得用户输入。用户键盘输入一组范围是1-7的整数作为序号,序号间采用空格分隔。以回车结束。屏幕输出这些序号对应的节假日的名称、假期范围,每个节假日的信息一

行。本次屏幕显示完成后,重新回到输入序号的状态。

参考输入和输出示例格式如下:

请输入节假日序号:15

元旦(1)假期是12月30日至01月01日之间

端午节(5)假期是06月16日至06月18日之间

请输入节假日序号:

代码如下:

fi = open("PY301-vacations.csv","r")
ls = []
for line in fi:
    ls.append(line.strip("\n").split(","))
fi.close()
s = input("请输入节假日序号:").split(" ")
while True:
    for i in s:
        for line in ls:
            if i == line[0]:
                print("{}({})假期是{}月{}日至{}月{}日之间".format(line[1],line[0],line[2][0]+line[2][1],line[2][2]+line[2][3],line[3][0]+line[3][1],line[3][2]+line[3][3]))

    input("请输入节假日序号:").split(" ")

【解题思路】

(2)用户可以输入多个节假日的序号,因此可以考虑使用splitO函数把输入的序号放在一个列表中,然后使用两层for循环,一个用来遍历二维列表,一个用来遍历输入的序号列表,当输入的序号与二维列表中的一样时,输出结果。因为题目的示例输出在数子月和日期之间加入了次子,此时分析存入二维列表中的数字,可以知道,存入的是字符串,即在CSV文件中初始月日和结束月日都是长度为4的字符串,属于序列类型,因此可以使用索引访问。


在问题2的基础上,在PY301-3.py文件中修改代码,对键盘输入的每个序号做合法性处理。如果输入的数字不合法,请输出“输入节假日编号有误!”,继续输出后续信息,然后重新回到输入序号的状态。

参考输入和输出示例格式如下:

请输入节假日序号:51411

端午节假期是06月16日至06月18日之间

输入节假日编号有误!

输入节假日编号有误!

请输入节假日编号

代码如下:

fi = open("PY301-vacations.csv","r")
ls = []
for line in fi:
      ls.append(line.strip("\n").split(","))
s = input("请输入节假日序号:").split(" ")
while True:
      for i in s:
            flag = False
            for line in ls:
                  if i == line[0]:
                        print("{}({})假期是{}月{}日至{}月{}日之间".format(line[1],line[0],line[2][:-2],line[2],line[-2:],line[3][:-2],line[3][-2:]))
                        flag = True
            if flag == False:
                  print("输入节假日编号有误!")
      s = input("请输入节假日序号:").split(" ")
fi.close()

PY301-vacations.csv

序号节日开始月日结束月日
1元旦1230101
2春节215221
3清明节405407
4劳动节501503
5端午节616618
6中秋节922924
7国庆节10011007

【解题思路】

(3)在问题2的基础上,加上一个标记,如果输入的序号正确,则标记为True,输入错误,标记为False,最后根据标记判断是否输出”输入节假日编号有误!”。分析题目要求可知,标记是在输入的序号在二维列表中可以查到时变为True,其他情况都为False,所以标记应该放在遍历序号序列的for循环内,遍历二维列表的for循环外。

推荐