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

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

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

  1. 查看银行卡余额
  2. 没有发工资,等待1分钟,继续执行1
  3. Oh,yeah,已经发工资了,继续执行4.
  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 <= 10:
    print(x)
    x += 1

  我们可以看到,while关键字的后面是条件表达式,最后用冒号(:)结尾,这说明while循环也是一个代码块,因此,在while循环内部的语句需要用缩进的写法。

  在上面的代码中,首先在while循环的前面定义一个x变量,初始值为1。然后开始进入while循环。在第1次执行while循环中的语句时,会用print函数输出x变量的值,然后x变量的值加1,最后while循环中的语句第1次执行完毕,然后会重新判断while后面的条件,这时x变量的值是2,x <= 10的条件仍然满足,所以while循环将继续执行(第2次执行),直到while循环执行了10次,这时x变量的值是11,x <= 10不再满足,所以while循环结束,继续执行while后面的语句。

  while循环是不是很简单呢?其实下一节要介绍的for循环也并不复杂,只是用法与while循环有一些差异。

2. for循环

  while循环的功能非常强大,它可以完成任何形式的循环,从技术上说,有while循环就足够了,那么为什么还要加一个for循环呢?其实对于某些循环,while仍然需要多写一些代码,为了更进一步简化循环的代码,Python语句推出了for循环。

  for循环主要用于对一个集合进行循环(序列和其他可迭代的对象),每次循环,会从集合中取得一个元素,并执行一次代码块。直到集合中所有的元素都被枚举(获得集合中的每一个元素的过程称为枚举)了,for循环才结束(退出循环)。

  在使用for循环时需要使用到集合的概念,由于现在还没有讲到集合,所以本节会给出最简单的集合(列表)作为例子,在后面的章节中,会详细介绍集合与for循环的使用方法。

  在使用for循环之前,先定义一个keywords列表,该列表的元素是字符串。然后使用for循环输出keywords列表中的所有元素值。

>>> 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 <= 10:
    print(x,end=" ")
    x += 1

#  定义一个列表
numbers = [1,2,3,4,5,6,7,8,9,10]
print("\n用for循环输出列表中的值(1到10)")
for num in numbers:
    print(num, end= " ")
# 用range函数生成一个元素值从1到9999的列表
numbers = range(1,10000)
print("\n用for循环输出列表中的值(1到9999)")
for num in numbers:
    print(num, end= " ")
print("\n用for循环输出列表中的值的乘积(1到99)")
# 用range函数生成一个元素值为0到99的的列表,并对该列表进行迭代
for num in range(100):          # range函数如果只指定一个参数,产生的列表元素值从0开始
    print(num * num, end= " ")

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

《Python从菜鸟到高手》开始转载了,敬请关注

3. 跳出循环

  在前面介绍的while循环中,是通过while后面的条件表达式的值确定是否结束循环的,不过在很多时候,需要在循环体内部之间跳出循环,这就要使用到break语句。

>>> 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()

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

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

原文地址:http://blog.51cto.com/androidguy/2171898

时间: 2024-11-05 15:52:23

Python从菜鸟到高手(10):循环的相关文章

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

好消息,<Python从菜鸟到高手>已经出版!!! ??JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送2400分钟同步视频课程!500个案例,400道Python练习题,电子书,10万行源代码,6个实战项目! 本书完整目录 购买地址: 当当 京东 ??在2018-10-15之前在以上地址购买本书,并5分好评以及20字以上评论.除了赠送40小时Python同步视频课程外,还赠送李宁老师任意200元以内的课程或套餐,如果课程或套餐超过200元,直接不差价即可.

Python从菜鸟到高手(5):数字

1 基础知识 ??Python语言与其他编程语言一样,也支持四则运算(加.减.乘.除),以及圆括号运算符.在Python语言中,数字分为整数和浮点数.整数就是无小数部分的数,浮点数就是有小数部分的数.例如,下面的代码是标准的四则运算表达式. 2 + 4 4 * 5 + 20 5.3 / 7 (30 + 2) * 12 ??如果要计算两个数的除法,不管分子和分母是整数还是浮点数,使用除法运算符(/)的计算结果都是浮点数.例如1/2的计算结果是0.5,2/2的计算结果是1.0.要想让Python解释

Python从菜鸟到高手(7):字符串

1. 单引号字符串和转义符   字符串与数字一样,都是值,可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了起来. >>> "Hello World" 'Hello World'   那么用双引号和单引号括起来的字符串有什么区别呢?其实没有任何区别.只不过在输出单引号或双引号时方便而已.例如,在Python控制台输入'Let's go!',会抛出如下的错误. >>&

Python从菜鸟到高手(8):print函数、赋值与代码块

1.神奇的print函数 ??print函数相信读者一定对它不陌生,因为在前面的章节,几乎每个例子都使用了print函数,这个函数的功能就是在控制台输出文本.不过print在输出文本时还可以进行一些设置,以及输出多参数字符串. ??如果为print函数传入多个参数值,那么print函数会将所有的参数值首尾相接输出. # 输出结果:a b c d e print("a","b","c","d","e"); ?

Python从菜鸟到高手(9):条件和条件语句

1.布尔(Boolean)值和布尔变量 ??在讲条件语句之前,首先应该了解一下布尔类型.条件语句(if)需要为其指定布尔值或布尔类型的变量,才能根据条件判断是否要指定代码块中的语句.布尔值只有两个值:True和False,可以将这两个值翻译成"真"和"假". ??现在我们已经了解了布尔值是用来做什么的,但Python语言会将哪些值看做布尔值呢?其实在Python语言中,每一种类型的值都可以被解释成布尔类型的值.例如,下面的值都会被解释成布尔值中的False. Non

Python从菜鸟到高手(14):序列的加法和乘法

1 序列的加法   序列也可以相加,但要注意,这里的相加,并不是相对应的序列元素值相加,而是序列首尾相接.由于字符串属于字符序列,所以字符串相加也可以看做是序列相加.但一个字符串不能和一个序列相加,否则会抛出异常.   本例演示了两个序列之间的加法,以及序列和字符串之间相加后会抛出异常. print([1,2,3] + [6,7,8]) # 运行结果:[1,2,3,6,7,8] print("Hello" + " world") # 运行结果:Hello world

Python从菜鸟到高手(2):清空Python控制台

执行python命令会进入Python控制台.在Python控制台中可以用交互的方式执行Python语句.也就是执行一行Python语句,会立刻返回执行结果. ??当Python控制台输入过多的Python语句时,有时需要将这些已经输入的语句和执行结果清空,并重新开始输入Python语句.例如,下图就是一个输入了多条Python语句,并输出相应结果的Python控制台. . ??当然,如果不想看到这些Python语句和输出结果,可以一直按"回车" 键,直到Python控制台中所有的内容

Python从菜鸟到高手(4):导入Python模块

在Python代码中导入模块需要使用import语句,语法结构如下: import module_name ??引用模块中函数的语法如下: module_name.function_name ??如果在Python程序中大量使用模块中的某些函数,那么每次在调用函数时都要加上"模块名"显得有些麻烦,所以在这种情况下,可以使用from-import-语句将模块中的函数直接暴露出来.该语句的语法结构如下: from module_name import function_name ??如果要

Python从菜鸟到高手(6):获取用户输入、函数与注释

1. 获取用户输入   要编写一个有实际价值的程序,就需要与用户交互.当然,与用户交互有很多方法,例如,GUI(图形用户接口)就是一种非常好的与用户交互的方式,不过我们先不讨论GUI的交互方式,本节会采用一种原始,但很有效的方式与用户交互,这就是命令行交互方式,也就是说,用户通过命令行方式输入数据,程序会读取这些数据,并做进一步的处理.   从命令行接收用户的输入数据,需要使用input函数.input函数接收一个字符串类型的参数,用于作为输入的提示.input函数的返回值就是用户在命令行中录入