首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

0基础学Python之九:循环语句(下)

Hi 大家好,我是王可乐。上一节课里,可乐为大家介绍了 WHILE 循环语句,并且演示了如何使用 BREAK 和 CONTINUE 来控制循环语句的执行逻辑。

通过循环来重复执行一段逻辑是程序设计里面最常见的流程之一,在今天的课程里,可乐再为大家介绍一下另一个循环语句,FOR 语句。FOR 循环语句很多时候更加简洁,而且可以很优美地用在我们后面要为大家介绍的数组、字典以及可遍历对象上。今天我们只为大家简单介绍 FOR 循环语句的用法,在后面的课程中,可乐还会再为大家补充它的更多用法。

我们先来看一下结果,输入 print(largest),可以看到,程序正确找出了最大值 9。在上面这段程序里,for x in counts 这句话的意思是,依次取出 counts 里面的数字,赋予给 x,然后以这个 x 值来执行 for 的循环体,直至取完所有 counts 数组里的数字。在循环体里,我们判断当前 x 的值是否大于当前的 largest,如果 x 更大,那就把 largest 更新成当前的最大值,否则就什么也不做。最终,程序一一检查了所有 counts 里的数字,找到了最大值 9。

下面再来看一个例子。这次我们重新实现一次前面从 1 加到 100 的代码,只是换成 FOR 语句:

我们先来看一下结果,输入 print(total) 回车,答案是 5050。

在这个 FOR 循环里有一个新东西,range。这个看起来像是函数的东西,其实是一个对象。不过大家不用担心对象这个新名词,后面的课程中可乐还会为大家介绍。现在大家只需要知道,range(1, 101) 定义了一个 range 对象,而这个对象是可遍历的。也就是说,当我们用 for x in 去访问这个 range 时,range 对象会依次为我们提供 1,2,3 直到 100 总共 100 个数字,就像是我们在访问一个超长的,从 1 到 100 的数组一样。

range 还有很多其他的用法,这里大家只需要先学会这一种,使用两个参数来定义 range()。要注意,range(1, 101) 的第一个参数 1 是起始值,它包含在最终的序列里,而后一个参数结束值则不包含在最终的序列里。

这种 for x in 的循环定义看起来更加简洁清晰,对于访问数组、range 以及后面我们会讲到的字典以及其他可遍历对象来说,for x in 是一个很好的选择。

和 WHILE 循环类似,FOR 循环语句也支持后面添加一个 ELSE 子句,在 FOR 循环执行结束之后运行。同样地,FOR 循环也可以使用 break 和 continue 来控制循环的执行,而 for 循环被 break 终端执行时,如果有还有 else 语句,那么 else 语句也不会被执行,和 while 循环行为一样。

此外,就像循环体里面可以使用 IF 条件语句一样,循环体里面也可以再使用循环语句,并且内部循环的循环体里面还可以使用循环。这种代码称作多重循环,或者循环嵌套。我们再来看一个例子,这个例子中我们要找出一个字符串里是否有重复字符。例如字符串 'Hello' 里,l 就是里面的重复字符,因为它总共出现了两次。

我们先来想一下思路。给你任意一个字符串,该怎么判断里面是否有重复字符呢?最简单的想法,那就是一个字符一个字符的去找咯。

首先我们考虑第一个字符,去找整个字符串里除了它自己还有没有跟它一样的字符;如果有,那就得到结论字符串里有重复字符,如果没有那就继续考虑第二个字符,还是到整个字符串里面找是否有和它重复的字符;如果还没找到,那就一直重复下去;如果我们一直找到最后一个字符,也没有发现哪个字符在字符串里有重复字符,那就得出结论,整个字符串里都没有重复字符。思路有了,那么来写代码吧。

第一次看到这样的代码,不要慌张,我们来人工推演一下:

在第一层循环里,我们使用下标 i 从头到尾依次遍历所有字符,代码开始运行是,i 的值是 0,指向字符 D

然后我们进入循环体,这时我们使用下标 j,从 i + 1,也就是下标 1 的第二个字符开始直到最后一个字符,最开始我们的 j 值为 1,也就是第二个字符 o

然后我们对比 D 和 o 是否相等,发现他们不相等,IF 语句里面的语句不执行,内层循环进入第二次运行,此时 j 值为 2,也就是字符 n

然后我们对比发现 D 和 n 也不相等,如此 j 从 1 增加到 11,因为所有字符和 D 都不相同,所以循环里的 IF 语句一直不成立

内层循环执行一遍之后,外层循环执行一步,此时 i 为 1,也就是字母 o

此时内层循环 j 从 o 的后一个字符开始向后一一比较,为什么前面的不比较了呢,因为在上一次循环时候,我们已经比较过 D 和 o 了

字符 o 向后一一比较的结果我们很容易能看出来,仍然是没有和 o 重复的字符,于是外层循环继续执行一步,对比字符 n 和后面的所有字符是否有相同

我们来查看一下执行结果,发现重复字符下标 2 和 8。确实是发现了上述字符串的第三个字符和第九个字符都是 n。

我们可以很容易看到,在这个双重循环里,对于外层循环的每一步,内层循环都要执行许多步。如果内层循环再嵌套一层循环,循环深度继续增加,程序执行的总步数也会飞快的增长。程序需要运行的步数显然直接影响了程序运行的速度,大部分时候我们都希望设计运行速度快的程序,因此就要非常慎重的考虑多重循环。

解决同一个问题可能会存在很多方法,不同的方法写出程序运行速度不同,在计算机领域我们使用复杂度来描述一个算法的效率,这是一个非常深刻的问题,我们会在后面的课程来介绍。

好了,今天的内容就到这里。学习完今天的内容,大家就已经掌握了 Python 编程中的全部主要流程控制方法。使用这些流程控制,你可以实现非常丰富的计算逻辑,让计算机帮你完成更加复杂的任务。

在下一节课程里,可乐会开始为大家介绍 Python 中的一些重要的内置数据结构,让你可以更加自由的表示和使用数据。那么,下期再见咯。

往期课程:

《0基础学Python之六:字符串(下)》

《0基础学Python之七:条件语句》

《0基础学Python之八:循环语句(上)》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180331G0NI0X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券