还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
循环结构应用Python欢迎来到Python循环结构应用课程在编程世界中,循环结构是最强大的工具之一,它能够帮助我们高效地处理重复性任务和批量数据本课程将全面介绍Python中的循环类型、语法结构以及实际应用场景无论您是编程新手还是有经验的开发者,掌握循环结构都将显著提升您的编码效率和解决问题的能力让我们一起深入探索Python循环的奥秘,将理论知识转化为实用技能课程目标掌握循环基本概念熟练应用循环语法理解循环的工作原理与执行流熟悉for循环与while循环的语法程,掌握不同类型循环的适用场结构,能够灵活运用循环控制语景与区别句解决实际编程问题通过丰富的实例与项目实战,培养使用循环解决复杂问题的能力本课程旨在帮助学员全面掌握Python循环结构,从基础语法到高级应用通过系统学习,您将能够编写高效、简洁的循环代码,处理各类数据批量操作任务完成课程后,您将具备独立分析问题、选择合适循环结构并实现代码的能力,为进一步学习Python高级特性打下坚实基础循环结构的概念循环的基本思想重复执行代码块循环是编程中的一种控制流结构,允许代码重复执行直到满足特没有循环时,要执行多次相似操作需要编写重复代码,这不仅繁定条件它是编程中最强大的概念之一,能够帮助我们处理重复琐且难以维护循环结构允许我们仅编写一次代码,却能执行多性任务,大大提高代码效率次循环的核心思想是将需要重复执行的代码块放入循环体中,通在典型的循环中,程序会按顺序执行循环体内的所有语句,然后过控制循环条件决定执行的次数和终止时机返回循环起始处,重新评估条件并决定是否继续执行为什么需要循环批量处理数据自动化任务执行代码复用与简化当需要处理大量数据循环使程序能够持续执通过循环,可以将重复时,循环能够自动化整行特定任务,如监控系操作封装成简洁的代码个过程,无需手动重复统状态、等待用户输入块,提高代码可读性和编写相似代码,极大提或处理队列中的请求,可维护性,减少出错可高效率与代码简洁性是自动化的关键要素能性循环结构是编程中实现高效率、低冗余的核心机制想象一下,如果没有循环,处理一个包含1000条记录的数据集将需要编写1000行几乎相同的代码!循环让我们能够用简洁的方式表达复杂的重复操作模式中循环种类Pythonfor循环选择合适的循环for循环主要用于已知迭代次数的场景,如遍历列表、字符串等可迭代对象语法简洁明了,是Python中最常用的循环类型选择循环类型取决于应用场景已知迭代对象或次数时选择for循环;基于条件基本语法for变量in可迭代对象:判断时选择while循环;需要无限执行直到满足条件时使用while Truewhile循环while循环基于条件控制,当条件为真时持续执行适用于事先不知道具体迭代次数的场景,如用户输入验证、网络请求等基本语法while条件表达式:流程控制与循环break语句continue语句pass语句if-else与循环结合立即终止当前循环,跳出循环体跳过当前迭代的剩余部分,直接进空操作占位符,不影响循环流程通过条件判断控制循环行为入下一次迭代流程控制语句使循环结构更加灵活强大break语句通常用于在满足特定条件时提前退出循环,避免不必要的迭代而continue语句则可以帮助我们跳过不需要处理的情况,继续下一轮迭代这些控制语句与循环和条件语句结合,能够构建复杂的程序流程,处理各种边缘情况和特殊需求掌握这些控制机制,是编写高效、健壮代码的关键循环与列表的结合直接遍历元素for循环可以直接获取列表中的每个元素,无需关心索引,代码简洁直观这是Python中最常见的列表遍历方式使用索引遍历当需要同时获取元素位置和值时,可以使用rangelen列表或enumerate函数结合循环获取索引和元素值修改列表内容通过索引遍历可以修改列表中的元素,而直接遍历只能读取值,无法修改原列表内容需要修改时应使用索引方式筛选与过滤结合if条件语句,循环可以实现列表元素的筛选、过滤和条件处理,创建满足特定条件的新列表函数基础rangerangestop rangestart,stop产生0到stop-1的整数序列从start开始到stop-1的整数序列例如range5生成[0,1,2,3,4]例如range2,7生成[2,3,4,5,6]惰性计算特性rangestart,stop,steprange对象不会立即创建所有值,而是按需生成从start开始,以step为步长的序列这使它非常适合处理大范围的数字例如range1,10,2生成[1,3,5,7,9]循环中的变量作用域全局作用域在所有代码中均可访问的变量函数作用域在定义的函数内可访问的变量循环作用域在Python中循环变量在循环后仍可访问在Python中,循环并不创建新的作用域这意味着在循环中定义的变量在循环结束后仍然存在并可访问这与一些其他编程语言不同,如C++或Java,它们的循环变量仅在循环体内有效这种特性既有优点也有潜在问题好处是可以在循环后继续使用循环变量;但缺点是可能导致变量名冲突或逻辑错误因此,了解Python的作用域规则对编写正确的循环代码至关重要循环常见错误与调试死循环循环条件始终为真,程序无法退出索引越界访问超出列表范围的索引位置逻辑错误循环条件或更新逻辑不正确循环是程序中容易出现问题的地方,特别是对初学者而言死循环通常由忘记更新循环变量或条件始终为真导致,解决方法是确保循环条件最终会变为假,或使用break语句提供退出机制索引越界错误常见于使用索引遍历列表时,可以通过确保索引范围正确或使用更安全的直接遍历方式来避免调试循环时,可以添加print语句输出关键变量值,或使用断点逐步执行,观察循环行为循环语法结构for基本语法格式缩进要求for变量in可迭代对象:循环循环体必须缩进,建议使用4体语句个空格,保持一致的缩进风格可迭代对象任何实现了__iter__方法的对象都可用于for循环,如列表、元组、字符串、字典、集合等for循环是Python中最常用的循环结构,其语法简洁易读循环过程中,变量会依次获取可迭代对象中的每个元素值,然后执行循环体代码循环会持续到所有元素都被处理完毕与其他语言相比,Python的for循环更接近于foreach循环,直接处理元素而非索引这种设计使代码更简洁、更不易出错,尤其适合处理集合数据类型循环遍历列表for#基本列表遍历fruits=[苹果,香蕉,橙子,草莓]for fruit in fruits:printf我喜欢吃{fruit}#带索引的列表遍历for indexin rangelenfruits:printf第{index+1}个水果是{fruits[index]}#使用enumerate同时获取索引和值for i,fruitinenumeratefruits:printf索引{i}:{fruit}循环遍历字符串for字符串的可迭代特性字符串处理应用在Python中,字符串是由字符组成的序列,是一种可迭代对象遍历字符串的能力在文本处理中非常有用我们可以统计特定字因此,for循环可以直接遍历字符串中的每个字符这使得字符符出现次数、转换大小写、验证输入格式或构建新的字符串级操作变得简单直观message=Python#统计元音字母for charin message:text=Hello,World!printchar vowels=aeiouAEIOUcount=0for charin text:if charin vowels:count+=1printf元音字母数量:{count}循环配合for range使用range指定次数当需要循环执行特定次数时,range函数是最佳选择例如,想要打印5次Hello,可以使用for iin range5:这种情况下,循环变量i的值并不重要,仅用于控制循环次数自定义范围循环range函数允许指定起始值、结束值和步长,使循环更加灵活例如,遍历5到15之间的偶数for iin range6,16,2:这在数值计算、索引操作等场景中特别有用反向循环使用负步长可以实现反向循环例如,从10倒数到1for iinrange10,0,-1:这在需要逆序处理数据或实现倒计时等功能时非常实用循环嵌套for2On²嵌套层级时间复杂度基本的嵌套循环结构,外层和内层两层循环的典型复杂度3+多层嵌套可实现更复杂的多维数据处理#基本的嵌套循环for iin range3:#外层循环for jin range4:#内层循环printf{i},{j},end=print#每完成一次外层循环换行#输出:#0,00,10,20,3#1,01,11,21,3#2,02,12,22,3循环嵌套是处理多维数据结构(如矩阵、表格数据)的关键技术外层循环每执行一次,内层循环会完整执行一遍注意嵌套层数越多,执行时间呈指数增长,应谨慎设计算法避免性能问题循环与字典for遍历键keys遍历值valuesfor keyin dict.keys:for value in dict.values:直接遍历字典遍历键值对itemsfor keyin dict:for key,value indict.items:字典是Python中重要的数据结构,提供了多种遍历方式默认情况下,直接遍历字典会获取所有键;使用.keys方法可显式获取键集合;.values方法获取所有值;而.items方法则同时获取键和值的对,特别适合需要同时处理键值的场景字典的遍历顺序在Python
3.7+版本中保证与插入顺序一致,这是一个重要的特性变化理解这些遍历方式对高效处理字典数据至关重要循环与集合for集合的特性集合遍历集合set是无序的、不重复元素的集合,主要用于去重和成员关遍历集合的语法与列表相同,但由于集合是无序的,元素的遍历系测试集合是可迭代的,因此可以直接用for循环遍历顺序不能保证,且在不同运行之间可能变化#创建集合#遍历集合元素fruits={苹果,香蕉,橙子,苹果}fruits={苹果,香蕉,橙子}#自动去重,结果只有一个苹果for fruitin fruits:printfruits#{香蕉,橙子,苹果}printf水果:{fruit}#集合推导式numbers={1,2,3,4,5}squares={x**2for xin numbers}printsquares#{1,4,9,16,25}循环的枚举for enumerate枚举的作用enumerate函数能同时返回元素的索引和值,是遍历序列最优雅的方式之一基本语法for index,valueinenumeratesequence:自定义起始索引可指定起始索引值enumeratesequence,start=1实际应用在需要同时获取元素位置和值的场景中特别有用,如序号标记、位置查找等循环列表推导式for基本语法对比传统循环实际应用列表推导式的一般形式为[表达式for变量in可迭代对象if相比传统的for循环和append方法,列表推导式代码更简列表推导式在数据转换、过滤和映射等场景中特别有用,可条件]它将for循环和条件判断压缩为一行代码,创建新列洁、执行更快,可读性也更高(当不过于复杂时)以将复杂的数据处理逻辑简化为一行代码表#基本列表推导式numbers=[1,2,3,4,5]squares=[x**2for xin numbers]printsquares#[1,4,9,16,25]#带条件过滤的列表推导式even_squares=[x**2for xin numbersif x%2==0]printeven_squares#[4,16]循环中的与for breakcontinuebreak语句当满足特定条件时,立即终止并跳出整个循环,不再执行后续迭代•常用于找到第一个匹配项后结束搜索•避免不必要的计算,提高效率continue语句跳过当前迭代中的剩余代码,直接进入下一次迭代•用于跳过不符合条件的情况•保持循环继续执行其他项实际应用这两个控制语句使循环更加灵活,能够处理特殊情况和例外•break用于提前退出成功场景•continue用于跳过异常或不需处理项循环语法结构while基本语法循环变量更新while条件表达式:循环体语句必须在循环体内更新影响条件表达式的变量,否则可能导致死循环只要条件表达式计算结果为True,循环体就会一直执行例如counter+=1或修改判断条件中使用的值初始条件在while循环前,需要正确初始化循环变量确保初始状态下条件表达式能够正确评估while循环是一种基于条件控制的循环结构,它会在每次迭代前检查条件只要条件为真,循环体就会继续执行;一旦条件变为假,循环就会终止这使得while循环特别适合那些需要基于条件而非固定次数的迭代场景循环条件控制while条件表达式类型条件控制技巧while循环的条件可以是任何能够评估为布尔值的表达式,包有效控制循环条件是避免死循环的关键括•确保条件变量在循环内得到适当更新•比较表达式x10•设置适当的边界条件,避免无限循环•逻辑表达式a andb•使用复合条件时注意逻辑关系•函数调用is_validdata•必要时使用break作为备用退出机制•布尔变量is_running在复杂循环中,可考虑添加最大迭代次数限制作为保障复杂条件可以使用逻辑运算符and,or,not组合死循环while死循环的定义常见死循环原因当while循环的条件表达式始终忘记更新循环变量、逻辑错误为True,且没有任何break语句导致条件无法变为False、条件提供退出机制时,就会形成死表达式直接使用True,都是导循环,程序将一直执行循环致死循环的常见原因体,无法继续后续代码有意设计的死循环在某些场景下,我们会故意设计死循环,如服务器程序、事件监听器等需要持续运行的应用,通常会配合内部的退出机制死循环是编程中常见的错误,但有时也是有意为之的设计在编写含有while循环的代码时,务必确认循环条件最终能够变为False,或者提供明确的break退出机制对于有意设计的死循环,一定要包含适当的内部退出逻辑while循环输入与终止#基于用户输入的while循环while True:user_input=input请输入一个命令输入quit退出:if user_input.lower==quit:print程序退出break#处理用户输入printf您输入的是:{user_input}#可以在这里添加其他命令处理逻辑if user_input.lower==help:print可用命令:help,status,reset,quit循环中应用while break提前终止不必要的迭代作为安全退出机制当找到满足条件的元素后,使用break立即退出循环,避免不必要的计算这在搜索操作中在不确定何时会满足终止条件的循环中,break提供了一种安全退出的方式,防止程序陷入特别有用,能够提高程序效率无限循环#在列表中查找元素#设置最大尝试次数防止死循环numbers=[4,7,2,9,13,8,3]attempts=0target=9max_attempts=100i=0while True:while ilennumbers:attempts+=1if numbers[i]==target:printf找到目标值,位置为{i}#某些可能永远不会结束的操作break#找到后立即退出result=perform_operationi+=1else:if is_successfulresult:print未找到目标值print操作成功!breakif attempts=max_attempts:print达到最大尝试次数,退出break循环中应用while continue跳过不满足条件的情况错误处理与异常跳过当某次迭代不满足处理条件时,使用在可能出错的操作中,可以使用try-continue跳到下一次迭代,避免执行不必except捕获异常,然后使用continue跳过要的代码当前迭代,保证循环继续执行优化循环执行路径通过提前检查条件并使用continue,可以减少循环体内的嵌套层级,使代码更清晰#处理偶数,跳过奇数i=0while i10:i+=1if i%2!=0:#如果是奇数continue#跳过当前迭代printf处理偶数:{i}#输出:处理偶数:246810结构while-else循环正常完成循环条件变为False时执行else语句块break终止如果循环被break终止,else语句块不会执行应用场景用于区分循环是正常结束还是提前终止#使用while-else查找素数num=17i=2while inum:if num%i==0:printf{num}不是素数,可被{i}整除breaki+=1else:#只有当循环正常完成没有执行break时才执行printf{num}是素数while-else结构是Python中独特的语法特性,提供了区分循环正常完成和提前终止的机制else子句只在循环条件变为False时执行,如果循环被break语句终止,则跳过else子句循环与计数器while条件检查更新计数器将计数器用于循环条件循环体内增加或减少计数while countermax_count:counter+=1初始化计数器计数结果使用循环前设置初始值循环后利用计数值counter=0printf共循环{counter}次与的异同while for特性while循环for循环控制机制基于条件表达式基于可迭代对象适用场景未知迭代次数已知集合或次数变量更新需手动更新自动更新无限循环风险较高较低代码简洁性相对较长更简洁性能差异略慢条件判断略快优化迭代选择合适的循环类型是编程中的重要决策for循环在处理已知集合或固定次数迭代时更简洁高效;而while循环在迭代次数不确定、基于条件控制的场景中更灵活无限循环场景网络服务端监听游戏主循环自动化系统服务器程序需要持续监游戏开发中的游戏循环监控系统、物联网设备听连接请求,处理客户需要连续不断地更新游和自动化控制程序通常端连接,然后继续等待戏状态、处理用户输入需要无限循环来持续检新的连接这类应用通和渲染画面,直到游戏查状态、响应事件或执常使用while True循环结束或用户退出行周期性任务作为主体架构无限循环在设计长期运行的程序中是一种常见且有效的模式这类程序通常会在循环内部处理各种事件和信号,实现对系统状态的持续监控和响应尽管无限循环在设计上是有意为之,但良好的无限循环实现必须包含适当的退出机制,如信号处理、特定条件检测或异常处理,以确保程序能够在需要时优雅地终止循环嵌套应用#九九乘法表的实现#使用for循环嵌套print九九乘法表:for iin range1,10:for jin range1,i+1:printf{j}×{i}={i*j}\t,end=print#换行#使用while循环嵌套实现i=1while i10:j=1while j=i:printf{j}×{i}={i*j}\t,end=j+=1print#换行i+=1多层嵌套循环注意事项性能考虑每增加一层循环,时间复杂度成倍增加代码可读性适当添加注释和空行增强嵌套代码可读性变量命名规范使用有意义的变量名区分不同循环层级多层嵌套循环是编程中的高级技术,但也容易造成性能瓶颈和代码复杂性在实际应用中,应尽量控制嵌套层数,通常不超过3层对于超过3层的嵌套,考虑重构代码结构或采用其他算法策略在嵌套循环中,变量命名尤为重要应避免使用单字母变量名(除非是数学公式中的常用符号),而应使用能表达其在算法中作用的描述性名称针对不同层级,可以使用如row/col、outer/inner等配对变量名增强可读性实际案例求到累加和1100for循环实现while循环实现#使用for循环计算1到100的和#使用while循环计算1到100的和total=0total=0for numin range1,101:num=1total+=num whilenum=100:printf1到100的和为:{total}total+=num#输出:1到100的和为:5050num+=1printf1到100的和为:{total}#输出:1到100的和为:5050for循环方法直接利用range生成1到100的序列,逐个累加到total变量代码简洁明了,是处理确定范围数字累加的理想选择while循环方法需要手动初始化和更新计数器,适合于需要更复杂控制逻辑的场景,如在累加过程中需要附加条件判断实际案例遍历文件内容文件作为可迭代对象逐行处理技术文本分析应用在Python中,文件对象本身就是可迭代的,每次迭代返回一行内使用for循环逐行读取文件是处理大文件的高效方式,因为它不会结合字符串处理和条件判断,循环遍历文件可以实现文本分析、容这使得for循环能够自然地遍历文件的每一行一次性将整个文件加载到内存中数据提取和内容转换等功能#逐行读取并处理文件内容with openexample.txt,r,encoding=utf-8as file:line_count=0word_count=0for linein file:line_count+=1words=line.splitword_count+=lenwords#输出包含特定关键词的行if Pythonin line:printfLine{line_count}:{line.strip}printf文件共有{line_count}行,{word_count}个单词实际案例查找列表最大值完成查找并返回结果循环比较每个元素循环结束后,max_value变量中保存的就是整个列表的最大值通过一初始化比较变量遍历列表中的每个元素,将其与当前记录的最大值进行比较如果发现次遍历,我们完成了最大值的查找也可以使用Python内置的max函首先假设列表的第一个元素是最大值,将其赋值给max_value变量作为更大的值,则更新max_value变量这一过程可以使用for循环或while循数一步完成初始比较基准这种方法避免了使用可能不适合的预设值(如0)环实现#手动实现查找最大值numbers=[42,17,8,94,23,61,33]#方法1:for循环实现max_value=numbers
[0]#假设第一个元素是最大值for numin numbers:if nummax_value:max_value=numprintf最大值是:{max_value}#方法2:使用Python内置函数printf使用max函数:{maxnumbers}实际案例统计字符串中字符出现次数#统计字符串中各字符出现的次数text=Hello,welcome toPython programming!char_count={}#遍历字符串中的每个字符for charin text:#转换为小写以不区分大小写char=char.lower#如果是字母或数字(忽略标点和空格)if char.isalnum:#如果字符已在字典中,将其计数加1if charin char_count:char_count[char]+=1#否则,将字符添加到字典并设置计数为1else:char_count[char]=1#按计数从大到小排序并显示结果sorted_chars=sortedchar_count.items,key=lambda x:x
[1],reverse=Truefor char,count insorted_chars:printf字符{char}出现了{count}次实际案例数据批量处理100+90%3文件批处理效率提升核心步骤自动处理大量文件的常见任务相比手动操作的时间节省获取文件列表、循环处理、保存结果import os#批量重命名文件示例directory=images/new_prefix=vacation_photo_#确保目录存在if notos.path.existsdirectory:printf目录{directory}不存在!else:#获取目录中所有文件files=os.listdirdirectory#只处理图片文件image_files=[f forf infiles iff.lower.endswith.jpg,.jpeg,.png,.gif]#循环处理每个文件for i,filename inenumerateimage_files:#构建新文件名new_name=f{new_prefix}{i+1:03d}{os.path.splitextfilename
[1]}#重命名文件os.renameos.path.joindirectory,filename,os.path.joindirectory,new_nameprintf已重命名:{filename}-{new_name}printf共处理了{lenimage_files}个文件实际案例生成九九乘法表九九乘法表结构格式化输出技巧循环嵌套实现九九乘法表是一种传统的数学学习工具,包含1到9的乘实现九九乘法表的关键是正确控制每行的输出格式使九九乘法表的生成是循环嵌套的经典应用外层循环控法组合,呈三角形排列格式上,每一行的乘法式子数用end=参数可以防止print自动换行,只在外层循环结制行数1到9,内层循环生成每行中的乘法式子,其中量等于行号,体现了循环嵌套的应用束时添加换行通过制表符\t可以保持输出对齐美观内层循环的范围依赖于外层循环的变量,体现了动态控制的特点#使用循环嵌套生成九九乘法表for iin range1,10:for jin range1,i+1:printf{j}×{i}={i*j:4},end=print#每行结束后换行实际案例斐波那契数列斐波那契数列定义循环实现方法斐波那契数列是一个经典的数学序列,前两个数是0和1,之后的每个数都是前两个数使用循环实现斐波那契数列生成是最直观的方法,避免了递归带来的性能问题的和即F0=0,F1=1,Fn=Fn-1+Fn-2n≥2#生成斐波那契数列前n项这个数列在自然界、艺术和金融等领域都有广泛应用,是编程学习中的经典案例def fibonaccin:#初始化前两个数fib_sequence=[0,1]#使用循环生成后续数字for iin range2,n:#每个新数是前两个数的和next_number=fib_sequence[i-1]+fib_sequence[i-2]fib_sequence.appendnext_numberreturn fib_sequence#生成并打印前10个斐波那契数result=fibonacci10print斐波那契数列前10项:,result实际案例用户登录尝试初始化尝试次数设置允许的最大尝试次数和当前已尝试次数循环验证输入在循环中获取用户输入并验证密码正确性成功登录处理验证成功使用break跳出循环,继续后续操作账户锁定逻辑多次失败后锁定账户,拒绝进一步访问#模拟用户登录逻辑#预设正确的用户名和密码correct_username=admincorrect_password=secure123#设置最大尝试次数max_attempts=3attempts=0while attemptsmax_attempts:#获取用户输入username=input请输入用户名:password=input请输入密码:#验证是否正确if username==correct_username andpassword==correct_password:print登录成功!欢迎回来#登录成功后执行相关操作...breakelse:attempts+=1remaining=max_attempts-attemptsif remaining0:printf用户名或密码错误,还有{remaining}次尝试机会else:print尝试次数过多,账户已锁定请联系管理员实际案例模拟简易菜单菜单显示功能用户输入处理设计一个函数显示所有可用选项,为用户提供清晰的操作指引包括选项编号、描使用循环持续接收用户输入,并根据输入调用相应功能加入输入验证机制,确保述和退出方式说明用户只能选择有效选项功能模块实现为每个菜单选项创建独立的功能函数,保持代码模块化通过分支结构if-elif-else将用户选择映射到对应函数#简易菜单系统def display_menu:显示菜单选项print\n=====任务管理系统=====print
1.查看所有任务print
2.添加新任务print
3.完成任务print
4.删除任务print
0.退出系统print========================#模拟功能函数def view_tasks:print显示所有任务...def add_task:print添加新任务...def complete_task:print标记任务为完成...def delete_task:print删除任务...#主循环while True:display_menuchoice=input请选择操作0-4:if choice==1:view_taskselif choice==2:add_taskelif choice==3:complete_taskelif choice==4:delete_taskelif choice==0:print感谢使用,再见!breakelse:print无效选择,请重试实际案例判断素数素数定义素数是指大于1且只能被1和自身整除的自然数例如
2、
3、
5、
7、11等判断一个数是否为素数,需要检查它是否有除了1和自身之外的其他因数判断算法基本思路是尝试用2到sqrtn之间的数去除以目标数,如果能整除则不是素数这一范围足够检测所有可能的因数,无需检查更大的数优化技巧只需检查到目标数的平方根即可;偶数除了2可直接排除;使用break在找到因数后立即终止循环,避免不必要的计算import mathdefis_primen:判断一个数是否为素数#处理特殊情况if n=1:return Falseif n==2:return Trueifn%2==0:#偶数除了2都不是素数return False#只需检查到平方根sqrt_n=intmath.sqrtn+1for iin range3,sqrt_n,2:#只检查奇数ifn%i==0:return FalsereturnTrue#打印1-50之间的所有素数print1到50之间的素数:for numin range1,51:if is_primenum:printnum,end=实际案例简单冒泡排序冒泡排序原理嵌套循环实现优化策略冒泡排序是一种简单直观的排序算法,其核心思想是重复比较相邻元素,如果顺序错误则交换冒泡排序需要两层嵌套循环外层循环控制排序轮数,内层循环进行元素比较和交换每完成冒泡排序可以通过设置标志位判断是否已排序完成来提前终止当某一轮比较没有发生交换操它们,使较大的元素逐渐浮到列表末端尽管效率不高,但它是理解排序算法的基础一轮外层循环,最大的元素就会沉到列表末尾的正确位置作时,说明列表已经有序,可以结束排序过程def bubble_sortarr:冒泡排序实现n=lenarr#外层循环控制排序轮数for iin rangen:#优化标志本轮是否发生交换swapped=False#内层循环比较相邻元素#每轮结束后,最大的i个元素已经就位,不需要再比较for jin range0,n-i-1:#如果当前元素大于下一个元素,则交换if arr[j]arr[j+1]:arr[j],arr[j+1]=arr[j+1],arr[j]swapped=True#如果本轮没有发生交换,说明已经排序完成if notswapped:breakreturn arr#测试示例numbers=[64,34,25,12,22,11,90]sorted_numbers=bubble_sortnumbers.copyprintf排序前:{numbers}printf排序后:{sorted_numbers}实际案例列表去重使用循环实现去重使用集合set辅助去重通过循环遍历原列表,将元素添加到新列表前检查是否已存在,从而实现去重这种方法直观利用Python集合的自动去重特性,可以更高效地实现列表去重这种方法简洁且性能更好,是但效率较低,尤其是当列表较大时实际项目中的推荐做法def remove_duplicatesoriginal_list:def remove_duplicates_using_setoriginal_list:unique_list=[]#方法1直接使用集合转换for itemin original_list:return listsetoriginal_listif itemnot inunique_list:unique_list.appenditem#方法2使用集合辅助,但保持原有顺序return unique_list seen=setunique_list=[]#测试for itemin original_list:data=[1,2,3,2,1,4,5,4,3]if itemnot inseen:result=remove_duplicatesdata seen.additemprintf原始列表:{data}unique_list.appenditemprintf去重后:{result}return unique_list#测试方法2(保持顺序)data=[1,2,3,2,1,4,5,4,3]result=remove_duplicates_using_setdataprintf原始列表:{data}printf去重后保持顺序:{result}实际案例批量数据分组批处理的必要性列表切片技术当处理大量数据时,将数据分成小批次进行处理可以降低内存使使用Python列表切片语法[start:end:step]可以轻松提取批次数用,提高效率,避免资源耗尽据,结合循环实现批量处理优化处理流程根据数据特性和硬件资源选择合适的批次大小,平衡处理效率和资源占用def process_in_batchesdata_list,batch_size=5:按批次处理数据列表total_items=lendata_list#计算需要多少批次num_batches=total_items+batch_size-1//batch_sizefor iin rangenum_batches:#计算当前批次的起始和结束索引start_idx=i*batch_sizeend_idx=mini+1*batch_size,total_items#获取当前批次的数据current_batch=data_list[start_idx:end_idx]#处理当前批次printf处理第{i+1}批,共{lencurrent_batch}项:{current_batch}#这里可以添加实际的处理逻辑#process_batchcurrent_batch#测试示例sample_data=listrange1,23#生成1到22的数字列表process_in_batchessample_data,batch_size=5实际案例二维列表处理项目实战学生成绩统计系统#学生成绩统计系统def display_menu:print\n=====学生成绩统计系统=====print
1.录入学生成绩print
2.显示所有成绩print
3.计算平均分print
4.查找最高分和最低分print
5.按成绩排序print
0.退出系统print============================#初始化学生成绩字典students={}while True:display_menuchoice=input请选择功能0-5:if choice==1:name=input请输入学生姓名:try:score=floatinput请输入学生成绩:students[name]=scoreprintf成功录入{name}的成绩:{score}except ValueError:print成绩必须是数字,请重试elif choice==2:if notstudents:print暂无学生成绩记录else:print\n所有学生成绩:for name,score instudents.items:printf{name}:{score}elif choice==3:if notstudents:print暂无学生成绩记录else:avg_score=sumstudents.values/lenstudentsprintf班级平均分:{avg_score:.2f}elif choice==4:if notstudents:print暂无学生成绩记录else:max_score=maxstudents.valuesmin_score=minstudents.valuesmax_students=[name forname,score instudents.items ifscore==max_score]min_students=[name forname,score instudents.items ifscore==min_score]printf最高分:{max_score},学生:{,.joinmax_students}printf最低分:{min_score},学生:{,.joinmin_students}elif choice==5:if notstudents:print暂无学生成绩记录else:sorted_students=sortedstudents.items,key=lambda x:x
[1],reverse=Trueprint\n按成绩排序从高到低:for rank,name,score inenumeratesorted_students,1:printf第{rank}名:{name},成绩:{score}elif choice==0:print感谢使用,再见!breakelse:print无效选择,请重试循环结构编程规范代码清晰度优先性能考量命名规范循环结构应当清晰易读,在循环内避免不必要的计使用有意义的变量名,避避免过于复杂的条件判断算,特别是重复计算将免单字母变量除非是标准和深层嵌套如果一个循与循环无关的操作移到循约定如i、j循环变量名环难以理解,考虑将其拆环外,减少每次迭代的计应反映其在循环中的作分为多个简单循环或提取算量对于大数据集,考用,如index、item、为独立函数虑使用生成器和迭代器减count等,增强代码可读少内存占用性良好的循环结构编程规范不仅提高代码可读性,也有助于减少错误避免在循环中修改正在迭代的集合,这可能导致意外行为如需修改,考虑创建一个新集合或使用列表推导式循环中应设置适当的退出条件和边界检查,防止无限循环或索引越界在复杂逻辑中,添加注释解释循环的目的和工作方式,帮助其他开发者理解代码意图坚持这些规范将使您的代码更加健壮和可维护进阶拓展生成器与迭代器迭代器Iterator基础生成器Generator简介迭代器是实现了__iter__和__next__方法的对象,支持for循环遍历迭代器的核心特点生成器是一种特殊的迭代器,通过yield关键字实现它能够在函数中暂停执行并保存当前是惰性求值,即按需生成元素,不会一次性在内存中创建所有值状态,稍后再恢复执行生成器使创建迭代器变得简单直观#创建自定义迭代器#创建生成器函数class CountDown:def count_downstart:def__init__self,start:while start0:self.start=start yieldstart#生成一个值并暂停start-=1def__iter__self:return self#使用生成器for numin count_down5:def__next__self:printnum#输出5,4,3,2,1if self.start=0:raise StopIteration#生成器表达式self.start-=1squares=x**2for xin range10return self.start+1for squarein squares:printsquare#使用迭代器for numin CountDown5:printnum#输出5,4,3,2,1总结与答疑知识点回顾循环结构类型与应用场景掌握技能使用循环解决实际编程问题实践应用通过项目案例巩固循环知识在本课程中,我们系统地学习了Python循环结构的基础知识和高级应用从for循环和while循环的基本语法,到循环嵌套、流程控制和各种实际应用案例,全面掌握了循环结构在Python编程中的核心地位和作用循环是编程中最强大的工具之一,通过本课程的学习,您已经具备了使用循环解决各类编程问题的能力接下来,建议您通过更多的实践和项目来巩固这些知识,尝试将循环与其他Python特性结合,创建更复杂、更高效的程序。
个人认证
优秀文档
获得点赞 0