• 数据挖掘与机器学习:循环结构


    目录

    第1关:While 循环与 break 语句

    任务描述:

    相关知识:

    一、while语句:

    二、break语句:

    编程要求:

    测试说明:

    第2关:for 循环与 continue 语句:

    任务描述:

    相关知识:

    一、for语句:

    二、continue语句:

    编程要求:

    测试说明:

    第3关:循环嵌套:

    任务描述:

    相关知识:

    一、for循环嵌套:

    二、while循环嵌套:

    编程要求:

    测试说明:

    第4关:迭代器:

    任务描述:

    相关知识:

    一、迭代器的优点:

    二、理解迭代器:

    三、定义迭代器:

    四、复制迭代器:

    编程要求:

    测试说明:


    第1关:While 循环与 break 语句

    任务描述:

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

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

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

    相关知识:

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

     

    一、while语句

    while语句的基本形式为:

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

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

    1. count = 0
    2. while(count <= 10):
    3. print("现在计数为:",count)
    4. count += 1

    二、break语句

    break语句的基本形式为:

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

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

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

    编程要求:

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

    • 填入当已处理零件数小于总零件数count < partcount时的while循环判断语句;

    • 在停电时填入break语句跳出循环。

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

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

    测试说明:

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

    1. 平台自动编译生成line.exe

    2. 平台运行line.exe,并以标准输入方式提供测试输入;

    3. 平台获取line.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

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

    1. 3
    2. 0

    预期输出:

    1. 已加工零件个数: 1
    2. 已加工零件个数: 2
    3. 已加工零件个数: 3

    开始你的任务吧,祝你成功!

     

     

     

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

    第2关:for 循环与 continue 语句:

    任务描述:

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

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

    相关知识:

     

     

     

    一、for语句:

     

    for语句的基本形式为:

    1. for iteration_var in sequence:
    2. 循环语句

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

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

    二、continue语句:

    continue语句的基本形式为:

    1. for iteration_var in sequence:
    2. 循环语句
    3. if 判断语句1:
    4. continue

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

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

     

    编程要求:

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

    • 填入循环遍历studentname列表的代码;

    • 当遍历到缺席学生时,填入continue语句跳过此次循环。

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

     

    1. absencenum = int(input())
    2. studentname = []
    3. inputlist = input()
    4. for i in inputlist.split(','):
    5. result = i
    6. studentname.append(result)
    7. count = 0
    8. # 请在此添加代码,填入循环遍历studentname列表的代码
    9. ########## Begin ##########
    10. ########## End ##########
    11. count += 1
    12. if(count == absencenum):
    13. # 请在下面填入continue语句
    14. ########## Begin ##########
    15. ########## End ##########
    16. print(student,"的试卷已阅")

    测试说明:

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

    1. 平台自动编译生成checkWork.exe

    2. 平台运行checkWork.exe,并以标准输入方式提供测试输入;

    3. 平台获取checkWork.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

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

    1. 2
    2. zhangsan,lisi,wangwu,zhaoliu,qianqi

    预期输出:

    1. zhangsan 的试卷已阅
    2. wangwu 的试卷已阅
    3. zhaoliu 的试卷已阅
    4. qianqi 的试卷已阅

    开始你的任务吧,祝你成功!

     

     

    1. absencenum = int(input())
    2. studentname = []
    3. inputlist = input()
    4. for i in inputlist.split(','):
    5. result = i
    6. studentname.append(result)
    7. count = 0
    8. #请在此添加代码,填入循环遍历studentname列表的代码
    9. #********** Begin *********#
    10. for student in studentname:
    11. #********** End **********#
    12. count += 1
    13. if(count == absencenum):
    14. #在下面填入continue语句
    15. #********** Begin *********#
    16. continue
    17. #********** End **********#
    18. print(student,"的试卷已阅")

    第3关:循环嵌套:

    任务描述:

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

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

    相关知识:

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

    一、for循环嵌套:

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

    1. for iteration_var in sequence:
    2. for iteration_var in sequence:
    3. 循环语句

    例如:

    1. for x in range(1,10):
    2. for y in range(0,x):
    3. result = x + y
    4. print(result)

    二、while循环嵌套:

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

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

    例如:

    1. x = 1
    2. y = 0
    3. while x < 10:
    4. while y < x:
    5. result = x + y
    6. print(result)
    7. y += 1
    8. x += 1
    9. y = 0

    编程要求:

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

    • 当输入学生人数后,填入在for循环遍历学生的代码;

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

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

     

    1. studentnum = int(input())
    2. # 请在此添加代码,填入for循环遍历学生人数的代码
    3. ########## Begin ##########
    4. ########## End ##########
    5. sum = 0
    6. subjectscore = []
    7. inputlist = input()
    8. for i in inputlist.split(','):
    9. result = i
    10. subjectscore.append(result)
    11. # 请在此添加代码,填入for循环遍历学生分数的代码
    12. ########## Begin ##########
    13. ########## End ##########
    14. score = int(score)
    15. sum = sum + score
    16. print("第%d位同学的总分为:%d" %(student,sum))

    测试说明:

     

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

    1. 平台自动编译生成sumScore.exe

    2. 平台运行sumScore.exe,并以标准输入方式提供测试输入;

    3. 平台获取sumScore.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

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

    1. 2
    2. 23,56,78,90
    3. 21,56,78,76,91

    预期输出:

    1. 第0位同学的总分为:247
    2. 第1位同学的总分为:322

    开始你的任务吧,祝你成功!

     

    1. studentnum = int(input())
    2. #请在此添加代码,填入for循环遍历学生人数的代码
    3. #********** Begin *********#
    4. for student in range (studentnum):
    5. #********** End **********#
    6. sum = 0
    7. subjectscore = []
    8. inputlist = input()
    9. for i in inputlist.split(','):
    10. result = i
    11. subjectscore.append(result)
    12. #请在此添加代码,填入for循环遍历学生分数的代码
    13. #********** Begin *********#
    14. for score in subjectscore:
    15. #********** End **********#
    16. score = int(score)
    17. sum = sum + score
    18. print("第%d位同学的总分为:%d" %(student,sum))

    第4关:迭代器:

    任务描述:

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

    相关知识:

    一、迭代器的优点:

    • 迭代器访问与for循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势。因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式;

    • 迭代器仅仅在访问到某个元素时才使用该元素。在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合;

    • 迭代器提供了一个统一的访问集合的接口,定义iter()方法对象,就可以使用迭代器访问。

    二、理解迭代器:

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

    1. from collections import Iterable
    2. result = isinstance([],Iterable)
    3. print(result)
    4. result = isinstance((),Iterable)
    5. print(result)
    6. result = isinstance('python',Iterable)
    7. print(result)
    8. result = isinstance(213,Iterable)
    9. print(result)

    结果为:

    1. True
    2. True
    3. True
    4. False

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

    1. from collections import Iterator
    2. result = isinstance([],Iterator)
    3. print(result)
    4. result = isinstance((),Iterator)
    5. print(result)
    6. result = isinstance((x for x in range(10)),Iterator)
    7. print(result)

    结果为:

    1. False
    2. False
    3. True

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

    三、定义迭代器:

     

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

    1. class MyIterable:
    2. def __iter__(self):
    3. return MyIterator()
    4. class MyIterator:
    5. def __init__(self):
    6. self.num = 0
    7. def __next__(self):
    8. self.num += 1
    9. if self.num >= 10:
    10. raise StopIteration
    11. return self.num

    四、复制迭代器:

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

    编程要求:

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

    • 当输入一个列表时,填入将列表List转换为迭代器的代码;

    • 填入用next()函数遍历迭代器IterList的代码。

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

    1. List = []
    2. member = input()
    3. for i in member.split(','):
    4. result = i
    5. List.append(result)
    6. # 请在此添加代码,将List转换为迭代器的代码
    7. ########## Begin ##########
    8. ########## End ##########
    9. while True:
    10. try:
    11. # 请在此添加代码,用next()函数遍历IterList的代码
    12. ########## Begin ##########
    13. ########## End ##########
    14. result = int(num) * 2
    15. print(result)
    16. except StopIteration:
    17. break

    测试说明:

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

    1. 平台自动编译生成ListCalculate.exe

    2. 平台运行ListCalculate.exe,并以标准输入方式提供测试输入;

    3. 平台获取ListCalculate.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

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

    1. 5,6,7,8,9

    预期输出:

    1. 10
    2. 12
    3. 14
    4. 16
    5. 18

    开始你的任务吧,祝你成功!

     

     

    1. List = []
    2. member = input()
    3. for i in member.split(','):
    4. result = i
    5. List.append(result)
    6. #请在此添加代码,将List转换为迭代器的代码
    7. #********** Begin *********#
    8. lterList=iter(List)
    9. #********** End **********#
    10. while True:
    11. try:
    12. #请在此添加代码,用next()函数遍历IterList的代码
    13. #********** Begin *********#
    14. num=next(lterList)
    15. #********** End **********#
    16. result = int(num) * 2
    17. print(result)
    18. except StopIteration:
    19. break

  • 相关阅读:
    行业追踪,2023-10-27
    力扣(LeetCode)323. 无向图中连通分量的数目(2022.11.20)
    Seata入门系列【9】Seata之SQL语句限制
    1372. Longest ZigZag Path in a Binary Tree
    软件产品测试的准入准出标准有哪些?
    Figma 是什么软件?为什么能被Adobe收购
    计算机毕业设计Java校园疫情信息管理系统(源码+系统+mysql数据库+Lw文档)
    批量打造怀旧风情:视频批量剪辑将现代视频打造成怀旧经典老视频效果
    自动化测试1
    VC++如何使用C++ STL标准模板库中的算法函数(附源码)
  • 原文地址:https://blog.csdn.net/m0_58153897/article/details/127758841