注意:所有题目均在一个博客中
嘿嘿😎
任务描述
程序的第三大结构是循环结构。在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环。循环语句分为while循环、for循环、循环嵌套和迭代器。循环语句中有一个语句break,通过这个语句可以跳出整个循环。
以下场景便模拟了循环结构与跳出循环的现实场景:
在一个工厂的流水线上每天需要加工零件100件,且每件零件所做的加工都是一样的,也就是说流水线每天要循环做相同的工作100次。但是如果在加工时突然停电,则流水线停止对后面所有零件的加工,跳出循环。
本关的任务是让学习者学会使用while循环与break语句。
相关知识
while循环和break的结构如下图1所示:
图1
图 1
while语句
while语句的基本形式为:
while 判断条件1:
循环语句
当判断条件1为true时,执行循环语句,直到判断条件1为假。例如:
count = 0
while(count <&#61; 10):
print(“现在计数为:”,count)
count &#43;&#61; 1
break语句
break语句的基本形式为&#xff1a;
while 判断条件1&#xff1a;
循环语句
判断条件2&#xff1a;
break
当判断条件1为true时执行循环语句。若此时判断条件2为true&#xff0c;执行break跳出while循环&#xff0c;若判断条件2一直为false&#xff0c;则执行while循环&#xff0c;一直到判断条件1为false。
例如&#xff1a;
count &#61; 0
while(count <&#61; 10):
print(“现在计数为:”,count)
count &#43;&#61; 1
if(count > 5):
break
如果您想了解更多循环结构的相关知识&#xff0c;请参考&#xff1a;[美] Katie Cunningham 著《 Python 入门经典》第三章。
编程要求
本关的编程任务是补全line.py文件中的判断语句部分&#xff0c;具体要求如下&#xff1a;
填入当已处理零件数小于总零件数count 在停电时填入break语句跳出循环。 本关涉及的代码文件line.py的代码框架如下: partcount &#61; int(input()) 平台自动编译生成line.exe&#xff1b; 平台运行line.exe&#xff0c;并以标准输入方式提供测试输入&#xff1b; 平台获取line.exe输出&#xff0c;并将其输出与预期输出对比。如果一致则测试通过&#xff0c;否则测试失败。 以下是平台对src/step1/line.py的样例测试集&#xff1a; 3 已加工零件个数: 1 任务描述 以下场景便模拟了for循环结构与跳出当前循环的现实场景&#xff1a; 本关的任务是让学习者学会使用for循环与continue语句。 相关知识 图1 for iteration_var in sequence: list &#61; [‘python’,‘java’,‘c’,‘c&#43;&#43;’] for iteration_var in sequence: list &#61; [‘python’,‘java’,‘c’,‘c&#43;&#43;’] 编程要求 填入循环遍历studentname列表的代码&#xff1b; 当遍历到缺席学生时&#xff0c;填入continue语句跳过此次循环。 本关涉及的代码文件checkWork.py的代码框架如下: absencenum &#61; int(input()) 平台自动编译生成checkWork.exe&#xff1b; 平台运行checkWork.exe&#xff0c;并以标准输入方式提供测试输入&#xff1b; 平台获取checkWork.exe输出&#xff0c;并将其输出与预期输出对比。如果一致则测试通过&#xff0c;否则测试失败。 以下是平台对src/step2/checkWork.py的样例测试集&#xff1a; 2 zhangsan 的试卷已阅 任务描述 本关的任务是让学习者学会使用循环嵌套。 相关知识 for循环嵌套 for iteration_var in sequence: for x in range(1,10): while 判断条件&#xff1a; x &#61; 1 编程要求 当输入学生人数后&#xff0c;填入在for循环遍历学生的代码&#xff1b; 当输入各科目的分数后的列表后&#xff0c;填入for循环遍历学生分数的代码。 本关涉及的代码文件sumScore.py的代码框架如下: studentnum &#61; int(input()) 平台自动编译生成sumScore.exe&#xff1b; 平台运行sumScore.exe&#xff0c;并以标准输入方式提供测试输入&#xff1b; 平台获取sumScore.exe输出&#xff0c;并将其输出与预期输出对比。如果一致则测试通过&#xff0c;否则测试失败。 以下是平台对src/step3/sumScore.py的样例测试集&#xff1a; 2 第0位同学的总分为:247 任务描述 相关知识 迭代器仅仅在访问到某个元素时才使用该元素。在这之前&#xff0c;元素可以不存在&#xff0c;所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合&#xff1b; 迭代器提供了一个统一的访问集合的接口&#xff0c;定义iter()方法对象&#xff0c;就可以使用迭代器访问。 理解迭代器 from collections import Iterable True from collections import Iterator False 定义迭代器 class MyIterable: 如果您想了解更多迭代器的相关知识&#xff0c;请参考&#xff1a;[美] Wesley J.Chun 著《 Python 核心编程》第八章。 编程要求 当输入一个列表时&#xff0c;填入将列表List转换为迭代器的代码&#xff1b; 填入用next()函数遍历迭代器IterList的代码。 本关涉及的代码文件ListCalculate.py的代码框架如下: List &#61; [] 平台自动编译生成ListCalculate.exe&#xff1b; 平台运行ListCalculate.exe&#xff0c;并以标准输入方式提供测试输入&#xff1b; 平台获取ListCalculate.exe输出&#xff0c;并将其输出与预期输出对比。如果一致则测试通过&#xff0c;否则测试失败。 以下是平台对src/step4/ListCalculate.py的样例测试集&#xff1a; 5,6,7,8,9 10
electric &#61; int(input())
count &#61; 0
请在此添加代码&#xff0c;当count
########## End ##########
count &#43;&#61; 1
print(“已加工零件个数:”,count)
if(electric):
print(“停电了&#xff0c;停止加工”)
# 请在此添加代码&#xff0c;填入break语句
########## Begin ##########
########## End ##########
测试说明
本文的测试文件是line.py&#xff0c;具体测试过程如下&#xff1a;
测试输入&#xff1a;
0
预期输出&#xff1a;
已加工零件个数: 2
已加工零件个数: 3partcount &#61; int(input())
electric &#61; int(input())
count &#61; 0
#请在此添加代码&#xff0c;当count
#********** Begin *********#
while count < partcount:
#********** End **********#count &#43;&#61; 1print("已加工零件个数:",count)if(electric):print("停电了&#xff0c;停止加工")#请在此添加代码&#xff0c;填入break语句#********** Begin *********#break#********** End **********#
第2关&#xff1a;for 循环与 continue 语句
Python 中还为我们提供了一种循环结构&#xff1a;for循环。for循环可以遍历序列成员&#xff0c;直到序列中的成员全部都遍历完后才跳出循环。循环语句中有一个continue语句&#xff0c;这个语句的作用是跳出当前循环。
全班同学的试卷为一个序列&#xff0c;老师在批阅一个班同学的试卷时&#xff0c;需要从第一个同学开始一个一个批阅&#xff0c;然后根据每个同学的具体答卷情况给出最后得分。如果评阅到某张试卷时发现这位同学缺考&#xff0c;为空白卷&#xff0c;那么就不评阅这张试卷&#xff0c;直接评阅下一张。当全部同学的试卷都评阅完毕时&#xff0c;结束评阅&#xff0c;跳出循环。
for循环和continue结构如下图1所示&#xff1a;
图 1
for语句
for语句的基本形式为&#xff1a;
循环语句
依次遍历序列中的成员&#xff0c;执行循环语句。例如&#xff1a;
for book in list:
print(“当前书籍为:”,book)
continue语句
continue语句的基本形式为&#xff1a;
循环语句
if 判断语句1&#xff1a;
continue
当遍历序列时&#xff0c;如果判断语句1为真&#xff0c;则执行continue语句&#xff0c;跳出当前循环&#xff0c;直接进入下一次循环。例如&#xff1a;
count &#61; 0
for book in list:
count &#43;&#61; 1
if count &#61;&#61; 3:
continue
print(“当前书籍为:”,book)
如果您想了解更多循环结构的相关知识&#xff0c;请参考&#xff1a;[美] Katie Cunningham 著《 Python 入门经典》第三章。
本关的编程任务是补全checkWork.py文件中的部分代码&#xff0c;具体要求如下&#xff1a;
studentname &#61; []
inputlist &#61; input()
for i in inputlist.split(’,’):
result &#61; i
studentname.append(result)
count &#61; 0
请在此添加代码&#xff0c;填入循环遍历studentname列表的代码
########## Begin ##########
########## End ##########
count &#43;&#61; 1
if(count &#61;&#61; absencenum):
# 请在下面填入continue语句
########## Begin ##########
########## End ##########
print(student,“的试卷已阅”)
测试说明
本文的测试文件是checkWork.py&#xff0c;具体测试过程如下&#xff1a;
测试输入&#xff1a;
zhangsan,lisi,wangwu,zhaoliu,qianqi
预期输出&#xff1a;
wangwu 的试卷已阅
zhaoliu 的试卷已阅
qianqi 的试卷已阅absencenum &#61; int(input())
studentname &#61; []
inputlist &#61; input()
for i in inputlist.split(&#39;,&#39;):result &#61; istudentname.append(result)
count &#61; 0
#请在此添加代码&#xff0c;填入循环遍历studentname列表的代码
#********** Begin *********#
for student in studentname:
#********** End **********#count &#43;&#61; 1if(count &#61;&#61; absencenum):#在下面填入continue语句#********** Begin *********#continue#********** End **********#print(student,"的试卷已阅")
第3关&#xff1a;循环嵌套
在Python 中&#xff0c;除了while循环与for循环&#xff0c;还有循环嵌套。循环嵌套就是在一个循环体里嵌入另一个循环。以下场景便模拟了循环嵌套与跳出循环的现实场景&#xff1a;
在一次考试结束后&#xff0c;学校需要统计每位同学的考试总成绩。在这个场景中&#xff0c;我们先将所有同学组成一个序列&#xff0c;然后遍历每位同学。在遍历到每位同学时还要遍历每位同学的每门分数并进行计算&#xff0c;最后得出每位同学的总成绩。
循环嵌套分为for循环嵌套和while循环嵌套。
for循环嵌套的基本形式为&#xff1a;
for iteration_var in sequence:
循环语句
例如&#xff1a;
for y in range(0,x):
result &#61; x &#43; y
print(result)
while循环嵌套
while循环嵌套的基本形式为&#xff1a;
while 判断条件&#xff1a;
循环语句
例如&#xff1a;
y &#61; 0
while x <10:
while y
print(result)
y &#43;&#61; 1
x &#43;&#61; 1
y &#61; 0
如果您想了解更多循环嵌套的相关知识&#xff0c;请参考&#xff1a;[美] Katie Cunningham 著《 Python 入门经典》第三章。
本关的编程任务是补全sumScore.py文件中的部分代码&#xff0c;具体要求如下&#xff1a;
请在此添加代码&#xff0c;填入for循环遍历学生人数的代码
########## Begin ##########
########## End ##########
sum &#61; 0
subjectscore &#61; []
inputlist &#61; input()
for i in inputlist.split(’,’):
result &#61; i
subjectscore.append(result)
# 请在此添加代码&#xff0c;填入for循环遍历学生分数的代码
########## Begin ##########
########## End ##########
score &#61; int(score)
sum &#61; sum &#43; score
print(“第%d位同学的总分为:%d” %(student,sum))
测试说明
本文的测试文件是sumScore.py&#xff0c;具体测试过程如下&#xff1a;
测试输入&#xff1a;
23,56,78,90
21,56,78,76,91
预期输出&#xff1a;
第1位同学的总分为:322studentnum &#61; int(input())
#请在此添加代码&#xff0c;填入for循环遍历学生人数的代码
#********** Begin *********#
for student in range(studentnum):
#********** End **********#sum &#61; 0subjectscore &#61; []inputlist &#61; input()for i in inputlist.split(&#39;,&#39;):result &#61; isubjectscore.append(result)#请在此添加代码&#xff0c;填入for循环遍历学生分数的代码#********** Begin *********#for score in subjectscore:#********** End **********#score &#61; int(score)sum &#61; sum &#43; scoreprint("第%d位同学的总分为:%d" %(student,sum))
第4关&#xff1a;迭代器
迭代器用来循环访问一系列元素&#xff0c;它不仅可以迭代序列&#xff0c;也可以迭代不是序列但是表现出序列行为的对象。本关的任务是让学习者理解与学会使用迭代器。
迭代器的优点
迭代器访问与for循环访问非常相似&#xff0c;但是也有不同之处。对于支持随机访问的数据结构如元组和列表&#xff0c;迭代器并无优势。因为迭代器在访问的时候会丢失数据索引值&#xff0c;但是如果遇到无法随机访问的数据结构如集合时&#xff0c;迭代器是唯一访问元素的方式&#xff1b;
可直接作用于for循环的数据类型如list、tuple、dict等统称为可迭代对象:Iterable。使用isinstance()可以判断一个对象是否是可迭代对象。例如&#xff1a;
result &#61; isinstance([],Iterable)
print(result)
result &#61; isinstance((),Iterable)
print(result)
result &#61; isinstance(‘python’,Iterable)
print(result)
result &#61; isinstance(213,Iterable)
print(result)
结果为&#xff1a;
True
True
False
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。next()函数访问每一个对象&#xff0c;直到对象访问完毕&#xff0c;返回一个StopIteration异常。使用isinstance()可以判断一个对象是否是Iterator对象。例如&#xff1a;
result &#61; isinstance([],Iterator)
print(result)
result &#61; isinstance((),Iterator)
print(result)
result &#61; isinstance((x for x in range(10)),Iterator)
print(result)
结果为&#xff1a;
False
True
所有的Iterable都可以通过iter()函数转化为Iterator。
当自己定义迭代器时&#xff0c;需要定义一个类。类里面包含一个iter()函数&#xff0c;这个函数能够返回一个带next()方法的对象。例如&#xff1a;
def iter(self):
return MyIterator()
class MyIterator:
def init(self):
self.num &#61; 0
def next(self):
self.num &#43;&#61; 1
if self.num >&#61; 10:
raise StopIteration
return self.num
复制迭代器
迭代器当一次迭代完毕后就结束了&#xff0c;在此调用便会引发StopIteration异常。如果想要将迭代器保存起来&#xff0c;可以使用复制的方法:copy.deepcopy():x &#61; copy.deepcopy(y)&#xff0c;不可使用赋值的方法&#xff0c;这样是不起作用的。
本关的编程任务是补全ListCalculate.py文件中的部分代码&#xff0c;具体要求如下&#xff1a;
member &#61; input()
for i in member.split(’,’):
result &#61; i
List.append(result)
请在此添加代码&#xff0c;将List转换为迭代器的代码
########## Begin ##########
########## End ##########
while True:
try:
# 请在此添加代码&#xff0c;用next()函数遍历IterList的代码
########## Begin ##########
########## End ##########
result &#61; int(num) * 2
print(result)
except StopIteration:
break
测试说明
本文的测试文件是ListCalculate.py&#xff0c;具体测试过程如下&#xff1a;
预期输入&#xff1a;
预期输出&#xff1a;
12
14
16
18List &#61; []
member &#61; input()
for i in member.split(&#39;,&#39;):result &#61; iList.append(result)
#请在此添加代码&#xff0c;将List转换为迭代器的代码
#********** Begin *********#
IterList &#61; iter(List)
#********** End **********#
while True:try:#请在此添加代码&#xff0c;用next()函数遍历IterList的代码#********** Begin *********#num &#61; next(IterList)#********** End **********#result &#61; int(num) * 2print(result)except StopIteration:break