Python小题目4:CSV文件遍历与查询的简单应用


存在一个CSV文件,内容如图:

 可见,是一个简单的二维数据,以第一行为例,120表示1月20日,218表示2月18日,9810时Unicode码。

现给出三个要求进行操作。

目录

??????

前言

一、思路

二、步骤

1.要求一:根据用户输入的星座名称,输出此星座的出生日期范围

2.要求2:输入一组整数,输出这些序号对应的星座名称等等

3.要求3:对键盘输入的每个序号做合法性处理,如不合法则提示,继续输出后续信息,然后重新回到输入序号的状态。

总结


??????

前言

由于python适合后端开发,加上我并没有学到前端,所以只能给出简单的程序概念,大概就是比如输入你的星座然后给出生日的范围等等简单应用。以作自己学习过的证据吧,希望以后能开发出来一个类似的程序(希望这个以后很快到来)。


一、思路

一般来说首先想到的就是文件的遍历,再通过索引的方式进行输出。但在此题有了多个输入值,那么就需要用到for循环,在循环遍历的时候,是先遍历文件还是先遍历输入值,这是一个值得思考的问题。

二、步骤

1.要求一:根据用户输入的星座名称,输出此星座的出生日期范围

代码如下(示例):

f=open('PY301-SunSign.csv','r')
ls=f.readlines()
n=input("请输入星座名:")
for i in ls:
    lt=i.strip('\n').split(',')#这些都没什么好说的,要注意的就是split前面是字符串
    if n==lt[1]:
        print('{}的生日位于{}-{}之间'.format(lt[1],lt[2],lt[3]))
f.close()
for i in f.readlines()#新的遍历方法,可以用在变量较多的时候


2.要求2:输入一组整数,输出这些序号对应的星座名称等等

代码如下(示例):

代码1:

f=open('PY301-SunSign.csv','r')
n=input('请输入一组整数,空格隔开:')
ls = []
for line in f.readlines():#遍历所有星座,比如现在是水瓶座
    ls=line.strip('\n').split(',')#将水瓶座的编号,范围等存成列表,此时编号为1
    lt=n.split()#将输入的数分开成列表lt
    for k in lt:#遍历lt里的数字,比如现在是1
        if k in ls:   #将k与ls比对,如果成功则输出
          print("{}({})的生日是{}月{}日至{}月{}日之间".format(ls[1],ls[4],ls[2][0:1],ls[2][1:],ls[3][0:1],ls[3][1:]))

也可以换一种思路,但是换汤不换药,这取决于题目的终极目标是什么

代码2:


f = open('PY301-SunSign.csv','r')
ls = []
ls = f.readlines()
while True:
    s = input('请输入星座序号(例如,5):')
    for i in s.split():
        for line in ls:
            lt = line.strip('\n').split(',')
            if i == lt[0]:
                print("{}({})的生日是{}月{}日至{}月{}日之间".format(lt[1],lt[4],lt[2][:-2],lt[2][-2:],lt[3][:-2],lt[3][-2:]))
f.close()

先循环输入,再循环表中的数据。这里虽然看起来很简单,只是换了两个循环,但是计算程度上再第三要求有了巨大的改变。

3.要求3:对键盘输入的每个序号做合法性处理,如不合法则提示,继续输出后续信息,然后重新回到输入序号的状态。

代码1:

f=open('PY301-SunSign.csv','r')
n=input('请输入一组整数,空格隔开:')
ls = []
flag=False

for line in f.readlines():#遍历所有星座,比如现在是水瓶座
    ls=line.strip('\n').split(',')#将水瓶座的编号,范围等存成列表,此时编号为1
    lt=n.split()#将输入的数分开成列表lt
    for k in lt:#遍历lt里的数字,比如现在是1
        if 0

这个代码是根据代码1修改的会出现严重的循环错误

 而使用代码2的循环,则会改变输出,运算程度减少:

f = open('PY301-SunSign.csv','r')
ls = f.readlines()
while True: 
    s = input('请输入星座序号(例如,5):')
    for i in s.split():
        if 0

要想改变代码1的循环结果,其实也可以结合第二种循环的FLAG用法:

f=open('PY301-SunSign.csv','r')
n=input('请输入一组整数,空格隔开:')
ls = []
flag=False

for line in f.readlines():#遍历所有星座,比如现在是水瓶座
    ls=line.strip('\n').split(',')#将水瓶座的编号,范围等存成列表,此时编号为1
    lt=n.split()#将输入的数分开成列表lt
    for k in lt:#遍历lt里的数字,比如现在是1
        if 0

总结

本题所考的是在基础的遍历与索引、切片上,加上了循环,尤其是循环的妙用,例如while,for循环的用法,有时候也许改变一下缩进进而改变代码所属块的方式就可以正常运行了。

相关