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并列使用并不是一个明智的选择

posted @ 2021-12-03 18:30  薛定谔的恐龙  阅读(136)  评论(0)    收藏  举报
{ 好好学习 ❤️ 天天向上 }