Python从菜鸟到高手(10):循环

您所在的位置:网站首页 伪代码while循环 Python从菜鸟到高手(10):循环

Python从菜鸟到高手(10):循环

#Python从菜鸟到高手(10):循环| 来源: 网络整理| 查看: 265

  我们现在已经知道了如何使用if语句让程序沿着不同的路径执行,不过程序最大的用处就是利用CPU和GPU强大的执行能力不断重复执行某段代码,想想Google的AlphaGo与柯洁的那场人机大战,尽管表面上是人工智能的胜利,其实人工智能只是算法,人工只能算法之所以会快速完成海量的数据分享,循环在其中的作用功不可没。

  对于初次接触程序设计的读者,可能还不太理解循环到底什么东西。下面先看一下循环的伪代码。

查看银行卡余额 没有发工资,等待1分钟,继续执行1 Oh,yeah,已经发工资了,继续执行4. 去消费

  我们可以看到,这段伪代码重复展示了一个循环到底是怎样的。对于一个循环来说,首先要有一个循环条件。如果条件为True,继续执行循环,如果条件为False,则退出循环,继续执行循环后面的语句。对于这段伪代码来说,循环条件就是“是否已经将工资打到银行卡中”,如果银行卡中没有工资,那么循环条件为True,继续执行第1步(继续查看银行卡余额),期间会要求等待1分钟,其实这个过程可以理解为循环要执行的时间。如果发现工资已经打到银行卡上了,那么循环条件就为False,这时就退出循环,去消费。

  在Python语言中,有两类语句可以实现这个循环操作,这就是while循环和for循环,本文将详细讲解这两类循环的使用方法。

1. while循环

  为了更方便理解while循环,下面先用“笨”方法实现在Python控制台输出1到10共10个数字。

print(1)

print(2)

print(3)

print(4)

print(5)

print(6)

print(7)

print(8)

print(9)

print(10)

  我们可以看到,在上面这段代码中,调用了10次print函数输出了1到10共10个数字,不过这只是输出了10个数字,如果要输出10000个或更多数字呢?显然用这种一行一行写代码的方式实现显得相当笨重,下面就该我们的主角while循环出场了。

  现在就直接用Python代码解释一下while循环的用法。

x = 1 while x keywords = ['this', 'is', 'while', 'for','if'] # 定义一个字符串列表 >>> for keyword in keywords: # 用for循环输出列表中的元素 ... print(keyword) ... this is while for if

  上面这段for循环的代码非常号理解,for语句中将保存集合元素的变量和集合变量用in关键字分隔。在本例中,keywords是集合,当for循环执行时,没执行一次循环,就会依次从keywords列表中获取一个元素值,直到迭代(循环的另一种说法)到列表中的最后一个元素“if”为止。  可能有的读者会发现,for循环尽管迭代集合很方便,但可以实现while循环对一个变量进行循环吗?也就是说,变量在循环外部设置一个初始值,在循环内部,通过对变量的值不断改变来控制循环的执行。其实for循环可以用变通的方式来实现这个功能,我们可以想象,如果定义一个数值类型的列表,列表的元素值就是1到10,那么不就相当于变量x从1变到10了吗!

>>> numbers = [1,2,3,4,5,6,7,8,9,10] >>> for number in numbers: ... print(number, end=" ") # 输出1到10共10个数字 ... 1 2 3 4 5 6 7 8 9 10 >>>

  如果使用这种方式,从技术上说是可以实现这个功能的,不过需要手工填写所有的数字太麻烦了,因此,我们可以使用一个range函数来完成这个工作。range函数有两个参数,分别是数值范围的最小值和最大值加1,要注意,range函数会返回一个半开半闭区间的列表,如果要生成1到10的列表,应该使用range(1, 11)。

>>> for num in range(1,11): # 用range函数生成元素值为1到10的列表,并对这个列表进行迭代 ... print(num, end=" ") ... 1 2 3 4 5 6 7 8 9 10 >>>

  本例演示了使用顺序结构,while循环和for循环输出相邻数字的方法,其中for循环使用了range函数快速生成一个包含大量相邻数字的列表,并对这些列表进行迭代。

print(1,end=" ") print(2,end=" ") print(3,end=" ") print(4,end=" ") print(5,end=" ") print(6,end=" ") print(7,end=" ") print(8,end=" ") print(9,end=" ") print(10) # 用while循环输出1到10 print("用while循环输出1到10") x = 1 while x >> x = 0 >>> while x < 100: ... if x == 5: ... break; ... print(x) ... x += 1 ... 0 1 2 3 4

  在上面的代码中,while循环的条件语句是x < 100,而x变量的初始值是0,因此,如果在while循环中,每次循环都对x变量值加1,那么while循环会循环100次。不过在while循环中通过if语句进行了判断,当x的值是5时,执行break语句退出循环。所以这个while循环只会执行6次(x从0到5),当执行到最后一次时,执行了break语句推出while循环,而后面的语句都不会调用,所以这段程序只会输出0到4共5个数字。

  与break语句对应的还有另外一个continue语句,与break语句不同的是,continue语句用来终止本次循环,而break语句用来彻底退出循环。continue语句终止本次循环后,会立刻开始执行下一次循环。

>>> x = 0 >>> while x < 3: ... if x == 1: ... continue; ... print(x) ... x += 1 ... 0

  在上面的代码中,当x等于1时执行了continue语句,因此,if条件语句后面的所有语句都不会执行,while循环会继续执行下一次循环。不过这里有个问题,当我们执行这段代码时,会发现进入死循环了。所谓死循环,是指while循环的条件表达式的值永远为True,也就是循环永远不会结束。死循环是在使用循环时经常容易犯的一个错误。

  现在让我们来分析一下这段代码。如果要让while循环正常结束的话,x必须大于等于3,但当x等于1时执行了continue语句,所以if语句后面的所有语句在本次循环中都不会被执行了,但while循环最后一条语句是x += 1,这条语句用于在每次循环中将x变量的值加1。但这次没有加1,所以下一次循环,x变量的值仍然是1,也就是说,if语句的条件永远满足,因此,continue语句将永远执行下去,所以x变量的值永远不可能大于等于3了。最终导致的后果是while循环中的语句会永远执行下去,也就是前面提到的死循环。

  解决的方法也很简单,只要保证执行continue语句之前让变量x加1即可。或者将x += 1放到if语句的前面,或放到if语句中。

>>> x = 0 >>> while x < 3: ... if x == 1: ... x += 1 # 需要在此处为x加1,否则将进入死循环 ... continue ... print(x) ... x += 1 ... 0 2

  break和continue语句同样支持for循环,而且支持嵌套循环。不过要注意,如果在嵌套循环中使用break语句,那么只能退出当前层的循环,不能退出最外层的循环。在实例3.8中会为读者演示循环更复杂的使用方法。

  本例除了演示while和for循环的基本用法以外,还在满足一定条件的前提下,通过break语句终止了整个while和for循环,以及使用continue语句终止了while和for语句的本次循环,最后在while循环中嵌套了一个for循环,从而形成一个嵌套循环,在这个嵌套循环中,输出了二维列表 中的所有元素值。在Python语句中,嵌套循环可以嵌套任意多成的循环。

x = 0 while x < 100: # 开始while循环 if x == 5: # 当x == 5时终止循环 break; print(x, end=" ") x += 1 names = ["Bill", "Mike", "Mary"] # 定义一个列表变量 print("\nbreak语句在for循环中的应用") for name in names: # 对names列表进行迭代 if not name.startswith("B"): # 遇到列表元素值不是以B开头的,就终止for循环 break; print(name) print("break语句在for循环中的应用") for name in names: # 对names列表进行迭代 # 遇到列表元素值以B开头的,会跳过本次循环,继续执行下一次循环 if name.startswith("B"): continue; print(name, end=" ") print("\n嵌套循环") arr1 = [1,2,3,4,5] arr2 = ["Bill", "Mary", "John"] arr = [arr1, arr2] # 定义一个二维列表变量 i = 0; while i < len(arr): # 使用嵌套循环枚举二维列表中的每一个元素值 for value in arr[i]: print(value, end = " ") # 输出二维列表中的元素值 i += 1 print()

程序运行结果如下图所示。

image.png

《Python从菜鸟到高手》已经出版,开始连载了,购买送视频课程



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3