【正确答案】(1) fi=open("PY301-vacations.csv","r")
ls=[]
for line in fi;
ls.append(line.strip("\n").split(","))
s=input("请输入节假日名称;")
for line in ls;
if s == line[1]
print(”{}的假期位于{}一{}之间”.format(line[1],line[2],line[3]))
(2) 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:
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]))
s=input("请输入节假日序号:").split(" ")
(3) fi=open("PY301-vacations.csv","r")
ls= []
for line in fi:
ls.append(line.strip("\n).split(",")
s=input("请输入节假日序号:“).split("")
while s !="":
for i in s:
flag = False
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]))
flag = True
if flag == False:
print(”输入节假日编号有误!”)
s=input(“请输入节假日序号:”).split(“”)
【答案解析】(1)对文件的读操作需要使用open()函数,模式为”r”;将文件读入后,需要把CSV格式文件的内容转化成二维数据,并将其转化成二维列表对象。首先定义一个列表ls,把读入的每行数据使用strip()函数清除掉换行符,再使用split()函数在元素之间以“,”分隔存储在列表ls中,split()函数返回的是一个列表,因此把CSV格式转化成二维列表对象。使用input()函数获取用户输入,再用for循环遍历二维列表,如果输入的节假日名称在列表中,则输出对应的时间段。
(2)用户可以输入多个节假日的序号,因此可以考虑使用split()函数把输入的序号放在一个列表中,然后使用两层for循环,一个用来遍历二维列表,一个用来遍历输入的序号列表,当输入的序号与二维列表中的一样时,输出结果。因为题目的示例输出在数字月和日期之间加入了汉字,此时分析存入二维列表中的数字,可以知道存入的是字符串,即在CSV文件中初始月日和结束月日都是长度为4的字符串,属于序列类型,因此可以使用索引访问。
(3)在问题2的基础上,加上一个标记,如果输入的序号正确,则标记为True;输入错误,标记为False,最后根据标记判断是否输出”输入节假日编号有误!”。分析题目要求可知,标记是在输入的序号在二维列表中可以查到时变为True,其他情况都为False,所以标记应该放在遍历序号列表的for循环内、遍历二维列表的for循环外。