当前位置: 首页 > 科技观察

6个例子,8段代码,详解Python中的For循环

时间:2023-03-12 12:18:38 科技观察

Python支持for循环,其语法与其他语言(如JavaScript或Java)略有不同。下面的代码块演示了如何在Python中使用for循环来迭代列表中的元素:上面的代码段在不同的行上打印了三个字母。可以通过在print语句后加逗号“,”来限制输出显示在同一行(如果指定打印的字符很多,会“换行”),代码如下:一行显示而不是多行当内容为文本时,可以使用上面的代码形式。Python还提供了内置函数reversed(),可以反转循环的方向,例如:注意,反向遍历函数只有在确定了对象的大小,或者对象实现了_reversed_()时才有效方法。01使用tryexcept的For循环清单1的StringToNums.py显示了如何对从字符串转换而来的一组整数求和。清单1StringToNums.pyline='123410eabc'sum=0invalidStr=""print('Stringofnumbers:',line)forstrinline.split(""):try:sum=sum+eval(str)except:invalidStr=invalidStr+str+''print('sum:',sum)if(invalidStr!=""):print('Invalidstrings:',invalidStr)else:print('Allsubstringsarevalidnumbers')清单1首先初始化变量line、sum和invalidStr,然后显示行内容。接下来将行中的内容分词,然后通过try代码块将词的值逐一添加到变量sum中。如果发生异常,则将当前str的内容附加到变量invalidStr中。当循环完成执行时,清单1打印数字单词的总和,然后是非数字单词。其输出如下所示:02Exponentiation清单2的Nth_exponet.py展示了如何计算一组整数的幂。清单2Nth_exponet.pymaxPower=4maxCount=4defpwr(num):prod=1forninrange(1,maxPower+1):prod=prod*numprint(num,'tothepower',n,'equals',prod)print('---------')fornuminrange(1,maxCount+1):pwr(num)清单2有一个pwr()函数,其参数是一个数字。该函数中的循环可以打印出参数的1次方,n的取值范围在1到maxCount+1之间。代码的第二部分通过for循环从1到maxCount+1的值调用pwr()函数。它的输出看起来像这样:03NestedLoops清单3的Triangular1.py展示了如何打印一行连续的整数(从1开始),其中每行的长度比前一行长1。清单3Triangular1.pymax=8forxinrange(1,max+1):foryinrange(1,x+1):print(y,'',end='')print()清单3先初始化max变量为8,然后通过变量x执行从1到max+1的循环。内循环有一个循环变量y,取值从1到x+1,打印y的值。其输出如下:04在for循环中使用split()函数Python支持各种与字符串操作相关的便捷函数,包括split()函数和join()函数。当您需要将一行文本标记化(即“拆分”)为单词,然后使用for循环遍历这些单词时,split()函数很有用。join()函数与split()函数相反,因为它将两个或多个单词“连接”成一行。通过使用split()函数,您可以轻松去除句子中多余的空格,然后调用join()函数,使文本行中的每个单词之间只有一个空格。1.使用split()函数进行单词比较清单4的Compare2.py展示了如何使用split()函数将文本字符串中的每个单词与另一个单词进行比较。清单4Compare2.pyx='ThisastringthatcontainsabcandAbc'y='abc'identical=0casematch=0forwinx.split():if(w==y):identical=identical+1elif(w.lower()==y.lower()):casematch=casematch+1if(identical>0):print('foundidenticalmatches:',identical)if(casematch>0):print('foundcasematches:',casematch)if(casematch==0andidentical==0):print('nomatchesfound')清单4通过split()函数将字符串x中的每个单词与单词abc进行比较。如果单词完全匹配,则将identical变量递增1;否则否则,尝试不区分大小写的比较,如果匹配则递增casematch变量。清单4的输出如下:2.使用split()函数以指定格式打印文本。清单5中的FixedColumnCount1.py说明了如何打印一组固定宽度的字符串。清单5FixedColumnCount1.pyimportstringwordCount=0str1='thisisastringwithasetofwordsinit'print('Left-justifiedstrings:')print('--------------------')forwinstr1。split():print('%-10s'%w)wordCount=wordCount+1if(wordCount%2==0):print("")print("\n")print('右对齐字符串:')print('--------------------')wordCount=0forwinstr1.split():print('%10s'%w)wordCount=wordCount+1if(wordCount%2==0):print()清单5首先初始化变量wordCount和str1,然后执行两个for循环。第一个for循环打印str1的每个单词左对齐,第二个for循环打印str1的每个单词右对齐。在每次循环中,当wordCount为偶数时,输出一个换行符,这样连续打印两个单词后打印一个换行符。清单5的输出如下:3.使用split()函数打印固定宽度的文本清单6的FixedColumnWidth1.py说明了如何打印固定宽度的文本。清单6FixedColumnWidth1.pyimportstringleft=0right=0columnWidth=8str1='thisisastringwithasetofwordsinitanditwillbesplitintoafixedcolumnwidth'strLen=len(str1)print('Left-justifiedcolumn:')print('---------------------')rowCount=int(strLen/columnWidth)foriinrange(0,rowCount):left=i*columnWidthright=(i+1)*columnWidth-1word=str1[left:right]print("%-10s"%word)#checkfora'partialrow'if(rowCount*columnWidth=0):print('text1isasubstringoftext2')else:print('text1isnotasubstringoftext2')subStr=Trueforwintext1.split():if(text2.find(w)==-1):subStr=Falsebreakif(subStr==True):print('Everywordintext1isawordintext2')else:print('Noteverywordintext1isawordintext2')清单7首先初始化两个字符串变量text1和text2,然后使用条件逻辑判断字符串text2是否包含text1(并输出相应的打印信息)。清单7的后半部分遍历字符串text1中的每个单词并检查它是否出现在text2中。如果发现匹配失败,则将变量subStr设置为False,通过break语句跳出循环,提前终止for循环的执行。最后根据变量subStr的值打印相应的信息。清单7的输出如下:05使用基本的for循环显示字符串中的字符清单8的StringChars1.py显示了如何打印文本字符串中的字符。清单8StringChars1.pytext='abcdef'forchintext:print('char:',ch,'ordvalue:',ord(ch))print清单8中的代码简单直接地通过for循环遍历字符串文本并打印其每个字符及其ord值(ASCII码)。清单8的输出如下:06join()函数另一种去除多余空格的方法是使用join()函数,代码示例如下:split()函数将文本字符串“拆分”为一系列单词,同时删除多余的空格。接下来,join()函数使用空格作为分隔符来连接字符串text1中的单词。上述代码的最后一部分使用字符串XYZ替换空格作为分隔符执行相同的连接操作。以上代码的输出结果如下:作者简介:OswaldCampesato专攻深度学习、Java、Android、TensorFlow。他是25本书的作者/合著者。本文节选自《机器学习入门:Python语言实现》,经发布者授权发布。(书号:9787111695240)