Python小题目7:利用循环中的continue与break筛选并输出
给出一个存有学生信息的文本文件,如图:
要求对文件内的信息进行处理,从而对成绩进行一些筛选或者排序之类的操作
前言
for循环中可以嵌套其他循环,这是之前几章有所体现的,而for循环中得加入if二分支多分支顺序结构。关于if后else的位置,continue和break的用法,也是十分考究的,虽然这些控制字符的意思很简单,但想用好并不难
一、题目
从给出的文件中选出奖学金候选人,条件是(1)总成绩排名在前十名;(2)全部课程及格(成绩大于等于60)。
我们可以分两步进行:
二、步骤
1.按总成绩从高到低排序
代码如下(示例):
fi=open('score.txt','r')
fo=open('candidate0.txt','w')
data=fi.readlines()
L=[]#L中的元素是学生原始成绩和总成绩
for line in data:#遍历每一个学生数据
line=line.strip('\n').split(' ')
s=0
for i in line[2:]:
s+=int(i)
line.append(s)
L.append(line)
L.sort(key=lambda x:x[-1],reverse=True) #按学生总成绩从大到小排序
for k in range(10):
fo.write(' '.join(L[k][:-1])+'\n')
fi.close()
fo.close()
很清晰明了的循环+条件利用总成绩进行排序
2.从前十名中选取候选人(单门分数不可
小于60)
代码如下(示例):
fi = open('candidate0.txt','r')
fo = open('candidate.txt','w')
ls = fi.readlines()
for line in ls:
lt = line.split()
for i in lt[2:]:
if int(i)<60: #遍历每个分数是否大于60
break
else: #else加的位置很考究
fo.write(' '.join(lt[:2])+'\n')
fi.close()
fo.close()
这里唯一一个else并没有和if并列,原因是for i in lt[2:]循环只是为了检查分数是否大于60的,else和if并列只会造成如果大于60就导致如果没有60分以下的科目,就直接遍历10次(即科目数),且不能筛选出候选人是否60分以下,如果前几个科目及格,那么仍然会造成输出。如图:
所以else加在for循环后面,必选全部合格才可输出
总结
在我们使用for循环和if条件分支结构时,一定要了解某段程序的功用,贸然将if与else并列使用并不是一个明智的选择