Python基础语法函数——循环结构

第1关:While 循环与 break 语句

任务描述

程序的第三大结构是循环结构。在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环。循环语句分为while循环、for循环、循环嵌套和迭代器。循环语句中有一个语句break,通过这个语句可以跳出整个循环。

以下场景便模拟了循环结构与跳出循环的现实场景: 在一个工厂的流水线上每天需要加工零件100件,且每件零件所做的加工都是一样的,也就是说流水线每天要循环做相同的工作100次。但是如果在加工时突然停电,则流水线停止对后面所有零件的加工,跳出循环。

本关的任务是让学习者学会使用while循环与break语句。

相关知识

while循环和break的结构如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O04T4nNI-1665416758996)(https://data.educoder.net/api/attachments/170038)]

while语句

while语句的基本形式为:

while 判断条件1:
	循环语句

判断条件1true时,执行循环语句,直到判断条件1为假。例如:

count = 0
while(count <= 10):
	print("现在计数为:",count)
	count += 1
break语句

break语句的基本形式为:

while 判断条件1:
	循环语句
	判断条件2break

判断条件1true时执行循环语句。若此时判断条件2true,执行break跳出while循环,若判断条件2一直为false,则执行while循环,一直到判断条件1false。 例如:

count = 0
while(count <= 10):
	print("现在计数为:",count)
	count += 1
	if(count > 5):
		break

如果您想了解更多循环结构的相关知识,请参考:[美] Katie Cunningham 著《 Python 入门经典》第三章。

编程要求

本关的编程任务是补全line.py文件中的判断语句部分,具体要求如下:

  • 填入当已处理零件数小于总零件数count < partcount时的while循环判断语句;
  • 在停电时填入break语句跳出循环。

本关涉及的代码文件line.py的代码框架如下:

partcount = int(input())
electric = int(input())
count = 0
# 请在此添加代码,当count < partcount时的while循环判断语句
########## Begin ###########

######### End ##########
	count += 1
	print("已加工零件个数:",count)
	if(electric):
		print("停电了,停止加工")
# 请在此添加代码,填入break语句
########## Begin ##########

########## End ##########
测试说明

本文的测试文件是line.py,具体测试过程如下:

  1. 平台自动编译生成line.exe
  2. 平台运行line.exe,并以标准输入方式提供测试输入;
  3. 平台获取line.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step1/line.py的样例测试集: 测试输入:

30

预期输出:

已加工零件个数: 1
已加工零件个数: 2
已加工零件个数: 3
partcount = int(input())
electric = int(input())
count = 0
#请在此添加代码,当count < partcount时的while循环判断语句
#********** Begin *********#
while(count < partcount):
#********** End **********#
    count += 1
    print("已加工零件个数:",count)
    if(electric):
        print("停电了,停止加工")
        #请在此添加代码,填入break语句
        #********** Begin *********#
        break
        #********** End **********#

第2关:for 循环与 continue 语句

任务描述

Python 中还为我们提供了一种循环结构:for循环。for循环可以遍历序列成员,直到序列中的成员全部都遍历完后才跳出循环。循环语句中有一个continue语句,这个语句的作用是跳出当前循环。

以下场景便模拟了for循环结构与跳出当前循环的现实场景: 全班同学的试卷为一个序列,老师在批阅一个班同学的试卷时,需要从第一个同学开始一个一个批阅,然后根据每个同学的具体答卷情况给出最后得分。如果评阅到某张试卷时发现这位同学缺考,为空白卷,那么就不评阅这张试卷,直接评阅下一张。当全部同学的试卷都评阅完毕时,结束评阅,跳出循环。

本关的任务是让学习者学会使用for循环与continue语句。

相关知识

for循环和continue结构如下图1所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feW335aI-1665416758997)(https://data.educoder.net/api/attachments/170039)]
图 1

for语句

for语句的基本形式为:

for iteration_var in sequence:
	循环语句

依次遍历序列中的成员,执行循环语句。例如:

list = ['python','java','c','c++']
for book in list:
	print("当前书籍为:",book)
continue语句

continue语句的基本形式为:

for iteration_var in sequence:
	循环语句
	if 判断语句1continue

当遍历序列时,如果判断语句1为真,则执行continue语句,跳出当前循环,直接进入下一次循环。例如:

list = ['python','java','c','c++']
count = 0
for book in list:
	count += 1
	if count == 3:
		continue
    print("当前书籍为:",book)

如果您想了解更多循环结构的相关知识,请参考:[美] Katie Cunningham 著《 Python 入门经典》第三章。

编程要求

本关的编程任务是补全checkWork.py文件中的部分代码,具体要求如下:

  • 填入循环遍历studentname列表的代码;
  • 当遍历到缺席学生时,填入continue语句跳过此次循环。

本关涉及的代码文件checkWork.py的代码框架如下:

absencenum = int(input())
studentname = []
inputlist = input()
for i in inputlist.split(','):
	result = i   	
	studentname.append(result)
	count = 0
# 请在此添加代码,填入循环遍历studentname列表的代码########## Begin #########

########### End ##########
count += 1
if(count == absencenum):
# 请在下面填入continue语句
########## Begin ##########

########## End ##########
print(student,"的试卷已阅")
测试说明

本文的测试文件是checkWork.py,具体测试过程如下:

  1. 平台自动编译生成checkWork.exe
  2. 平台运行checkWork.exe,并以标准输入方式提供测试输入;
  3. 平台获取checkWork.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step2/checkWork.py的样例测试集: 测试输入:

2
zhangsan,lisi,wangwu,zhaoliu,qianqi

预期输出:

zhangsan 的试卷已阅
wangwu 的试卷已阅
zhaoliu 的试卷已阅
qianqi 的试卷已阅
参考答案
absencenum = int(input())
studentname = []
inputlist = input()
for i in inputlist.split(','):
   result = i
   studentname.append(result)
count = 0
#请在此添加代码,填入循环遍历studentname列表的代码
#********** Begin *********#
for i in studentname:
#********** End **********#
    count += 1
    if(count == absencenum):
        #在下面填入continue语句
        #********** Begin *********#
        continue
        #********** End **********#
    print(i,"的试卷已阅")

第3关:循环嵌套

任务描述

在Python 中,除了while循环与for循环,还有循环嵌套。循环嵌套就是在一个循环体里嵌入另一个循环。以下场景便模拟了循环嵌套与跳出循环的现实场景: 在一次考试结束后,学校需要统计每位同学的考试总成绩。在这个场景中,我们先将所有同学组成一个序列,然后遍历每位同学。在遍历到每位同学时还要遍历每位同学的每门分数并进行计算,最后得出每位同学的总成绩。

本关的任务是让学习者学会使用循环嵌套。

相关知识

循环嵌套分为for循环嵌套和while循环嵌套。

for循环嵌套

for循环嵌套的基本形式为:

for iteration_var in sequence:
	for iteration_var in sequence:
		循环语句

例如:

for x in range(1,10):
	for y in range(0,x):
		result = x + y
		print(result)
while循环嵌套

while循环嵌套的基本形式为:

while 判断条件:
	while 判断条件:
		循环语句

例如:

x = 1
y = 0
while x < 10:
	while y < x:
		result = x + y
		print(result)
        y += 1
    x += 1
    y = 0

如果您想了解更多循环嵌套的相关知识,请参考:[美] Katie Cunningham 著《 Python 入门经典》第三章。

编程要求

本关的编程任务是补全sumScore.py文件中的部分代码,具体要求如下:

  • 当输入学生人数后,填入在for循环遍历学生的代码;
  • 当输入各科目的分数后的列表后,填入for循环遍历学生分数的代码。

本关涉及的代码文件sumScore.py的代码框架如下:

studentnum = int(input())
# 请在此添加代码,填入for循环遍历学生人数的代码
########## Begin ##########

########## End ##########
sum = 0
subjectscore = []
inputlist = input()
for i in inputlist.split(','):
result = i
subjectscore.append(result)
# 请在此添加代码,填入for循环遍历学生分数的代码    ########## Begin ##########

########## End ##########
score = int(score)
sum = sum + scor
print("第%d位同学的总分为:%d" %(student,sum))
测试说明

本文的测试文件是sumScore.py,具体测试过程如下:

  1. 平台自动编译生成sumScore.exe
  2. 平台运行sumScore.exe,并以标准输入方式提供测试输入;
  3. 平台获取sumScore.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step3/sumScore.py的样例测试集: 测试输入:

223,56,78,9021,56,78,76,91

预期输出:

第0位同学的总分为:247第1位同学的总分为:322
参考答案
studentnum = int(input())
#请在此添加代码,填入for循环遍历学生人数的代码
#********** Begin *********#
for student in range(studentnum):
#********** End **********#
    sum = 0
    subjectscore = []
    inputlist = input()
    for i in inputlist.split(','):
        result = i
        subjectscore.append(result)
    #请在此添加代码,填入for循环遍历学生分数的代码
    #********** Begin *********#
    for score in subjectscore:
    #********** End **********#
        score = int(score)
        sum = sum + score
    print("第%d位同学的总分为:%d" %(student,sum))

第四关:迭代器

任务描述

迭代器用来循环访问一系列元素,它不仅可以迭代序列,也可以迭代不是序列但是表现出序列行为的对象。本关的任务是让学习者理解与学会使用迭代器。

相关知识
迭代器的优点
  • 迭代器访问与for循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势。因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式;
  • 迭代器仅仅在访问到某个元素时才使用该元素。在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合;
  • 迭代器提供了一个统一的访问集合的接口,定义iter()方法对象,就可以使用迭代器访问。
理解迭代器

可直接作用于for循环的数据类型如listtupledict等统称为可迭代对象:Iterable。使用isinstance()可以判断一个对象是否是可迭代对象。例如:

from collections import Iterable
result =isinstance([],Iterable)
print(result)
result = isinstance((),Iterable)
print(result)
result = isinstance('python',Iterable)
print(result)
result = isinstance(213,Iterable)
print(result)

结果为:

True
True
True
False

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iteratornext()函数访问每一个对象,直到对象访问完毕,返回一个StopIteration异常。使用isinstance()可以判断一个对象是否是Iterator对象。例如:

from collections import Iteratorresult = isinstance([],Iterator)
print(result)
result = isinstance((),Iterator)
print(result)
result = isinstance((x for x in range(10)),Iterator)
print(result)

结果为:

False
False
True

所有的Iterable都可以通过iter()函数转化为Iterator

定义迭代器

当自己定义迭代器时,需要定义一个类。类里面包含一个iter()函数,这个函数能够返回一个带next()方法的对象。例如:

class MyIterable:
	def __iter__(self):
		return MyIterator()
class MyIterator:
	def __init__(self):
		self.num = 0
	def __next__(self):
		self.num += 1
		if self.num >= 10:
			raise StopIteration
		return self.num
复制迭代器

迭代器当一次迭代完毕后就结束了,在此调用便会引发StopIteration异常。如果想要将迭代器保存起来,可以使用复制的方法:copy.deepcopy():x = copy.deepcopy(y),不可使用赋值的方法,这样是不起作用的。

如果您想了解更多迭代器的相关知识,请参考:[美] Wesley J.Chun 著《 Python 核心编程》第八章。

编程要求

本关的编程任务是补全ListCalculate.py文件中的部分代码,具体要求如下:

  • 当输入一个列表时,填入将列表List转换为迭代器的代码;
  • 填入用next()函数遍历迭代器IterList的代码。

本关涉及的代码文件ListCalculate.py的代码框架如下:

List = []member = input()
for i in member.split(','):
	result = i
	List.append(result)
# 请在此添加代码,将List转换为迭代器的代码
########## Begin ##########

########## End ##########
while True:
	try:
# 请在此添加代码,用next()函数遍历IterList的代码   ########## Begin ##########

########## End ##########
		result = int(num) * 2
		print(result)
	except StopIteration:
		break
测试说明

本文的测试文件是ListCalculate.py,具体测试过程如下:

  1. 平台自动编译生成ListCalculate.exe
  2. 平台运行ListCalculate.exe,并以标准输入方式提供测试输入;
  3. 平台获取ListCalculate.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step4/ListCalculate.py的样例测试集: 预期输入:

5,6,7,8,9

预期输出:

10
12
14
16
18
参考答案
List = []
member = input()
for i in member.split(','):
    result = i
    List.append(result)
#请在此添加代码,将List转换为迭代器的代码
#********** Begin *********#
IterList = iter(List)
#********** End **********#
while True:
    try:
        #请在此添加代码,用next()函数遍历IterList的代码
        #********** Begin *********#
        num = next(IterList)
        #********** End **********#
        result = int(num) * 2
        print(result)
    except StopIteration:
        break
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值