Python基础教程5.5 循环

5.5 循环

至此,你知道了如何在条件为真(或假)时执行操作,但如何重复操作多次呢?例如,你可能想创建一个程序,每月都提醒支付房租。如果只使用已介绍过的工具,必须像下面这样编写这个程序(伪代码):

send mail

wait one month send mail

wait one month send mail

wait one month

(... and so on)

但是如果希望程序这样不断执行下去,直到人为停止,该如何办呢?基本上,你需要编写类似于下面的代码(也是伪代码):

while we aren't stopped:

send mail

wait one month

再来看一个更简单的例子,假设要打印1~100的所有数。同样,你可采用笨办法。

print(1)

print(2)

print(3)

...

print(99)

print(100)

但如果你愿意使用笨办法,就不会求助于Python了,不是吗?

5.5.1 while 循环

为避免前述示例所示的繁琐代码,能够像下面这样做很有帮助:

x = 1

while x

print(x)

x += 1

那么如何使用Python来实现的?你猜对了,就像上面那样做。不太复杂,不是吗?你还可以使用循环来确保用户输入名字,如下所示:

name = ''

while not name:

name = input('Please enter your name: ')

print('Hello, {}!'.format(name))

请尝试运行这些代码,并在要求你输入名字时直接按回车键。你会看到提示信息再次出现,因为name还是为空字符串,这相当于假。

提示 如果你只是输入一个空格字符(将其作为你的名字),结果将如何呢?试试看。程序将接受这个名字,因为包含一个空格字符的字符串不是空的,因此不会将name视为假。这无疑是这个小程序的一个瑕疵,但很容易修复:只需将while not name改为while not nameor name.isspace()或while not name.strip()即可。

5.5.2 for 循环

while语句非常灵活,可用于在条件为真时反复执行代码块。这在通常情况下很好,但有时候你可能想根据需要进行定制。一种这样的需求是为序列(或其他可迭代对象)中每个元素执行代码块。

注意 基本上, 可迭代对象是可使用for循环进行遍历的对象。第9章将详细介绍可迭代对象和迭代器。就目前而言,只需将可迭代对象视为序列即可。

为此,可使用for语句:

words = ['this', 'is', 'an', 'ex', 'parrot']

for word in words:

print(word)

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for number in numbers:

print(number)

鉴于迭代(也就是遍历)特定范围内的数是一种常见的任务, Python提供了一个创建范围的内置函数。

>>> range(0, 10)

range(0, 10)

>>> list(range(0, 10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

范围类似于切片。它们包含起始位置(这里为0),但不包含结束位置(这里为10)。在很多情况下,你都希望范围的起始位置为0。实际上,如果只提供了一个位置,将把这个位置视为结束位置,并假定起始位置为0。

>>> range(10)

range(0, 10)

下面的程序打印数1~100:

for number in range(1,101):

print(number)

注意,相比前面使用的while循环,这些代码要紧凑得多。

提示 只要能够使用for循环,就不要使用while循环。

5.5.3 迭代字典

要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句。

d = {'x': 1, 'y': 2, 'z': 3}

for key in d:

print(key, 'corresponds to', d[key])

也可使用keys等字典方法来获取所有的键。如果只对值感兴趣,可使用d.values。你可能还记得, d.items以元组的方式返回键值对。 for循环的优点之一是,可在其中使用序列解包。

for key, value in d.items():

print(key, 'corresponds to', value)

注意 字典元素的排列顺序是不确定的。换而言之,迭代字典的键或值时,一定会处理所有的键或值,但不知道处理的顺序。如果顺序很重要,可将键或值存储在一个列表中并对列表排序,再进行迭代。要让映射记住其项的插入顺序,可使用模块collections中的OrderedDict类。

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

扫码关注云+社区

领取腾讯云代金券