Python 基础(控制流)

再次说明:
下面是Python官方免费文档的中文翻译,为了促进练习,方便学习,我着重在意译上下功夫。如果需要英文材料,请移步到QQ群(Mark学编程)下载,或与我联系发送。

控制流

在程序里迄今我们看到的,总是一系列的语句以精确的从顶到底的顺序忠诚的执行。如果我们要变化这个顺序流,怎么办?例如,你需要程序做些决策根据不同的情景做些不同的东西,比如根据当天时间的不同而打印‘早上好’或者‘晚上好’?
你可能猜到了,这样可以用控制流来达成。Python有三种控制流语句,if, for 和 while。

If 语句
If 语句用于检查条件:如果条件为真,我们允许一块语句(叫做if语句块),否则,我们处理另外一块语句块(叫做else语句块)。else 语句是可选的。
举例:
number = 23
guess = int(input('Enter an integer : '))
if guess == number:

新语句块从这里开始,注意是有空格的;

print (‘Congratulations, you guessed it.’) print(’(but you do not win any prizes!)’) # 这块语句在这里结束
elif guess < number:

另外一个语句块

print(‘No, it is a little higher than that’) # 在语句块中,你可以做任何你想做的
else:
print(‘No, it is a little lower than that’) # 你应该猜得到, 当guessed > number时到了这里。
print(‘Done’)

最后这句语句总是执行,(注意其没有缩进)

在整个if语句执行后。

(补充说明: 在Word排版,缩进不容易对齐,请自行在编辑器练习,特别注意缩进,另外输出不展示了,自行运行或者到英文版对照)

代码运行原理
在程序里,我们接收用户输入的猜测,并且检查其是否与我们的数字相同。我们用变量“number”存储我们设置的数字,比如23,然后我们使用input()函数接收用户的猜测数字。函数就是能够重复利用的程序,我们会在下一章节学习它。
我们提供了一个字符串给予内置函数input,他会有闪烁光标等待用户输入。一旦我们输入些什么,按下enter键,input()函数以字符串类型返回我们输入的。然后在上面代码里,我们用int把字符串类型变成整型。然后存储在guess中(严格的说是绑定变量名guess—译者注),实际上,int 是个类,但现在你只需要知道,你可以使用它,将字符串转换成整型(假设字符串在文本中包含一个整型)
下一步,我们比较用户的猜测数字和我们已经有的数字,如果相同,我们打印成功信息。请注意,我们使用缩进水平来告诉Python哪些语句属于那一块代码。这就是为什么在Python里缩进这么重要。我希望你能坚持“一致的缩进”,能吗?
请注意,if语句在尾部带有一个冒号—用于向Python指出,一块语句跟着后面。
然后,查看这个猜测是不是小于我们的数字,如果是,通知用户应该猜一个大一点的数字。我们这里还使用了elif语句,它实际上是将两个if else-if else结合了。这使得程序很简易并且降低了缩进的数量。
elif 和else 语句一定也要有尾部的冒号,在其相应的语句块(当然要有恰当的缩进)。
你可以在if语句中有另外一个if语句块,这叫做嵌套if语句。
记住,elif 和 else 部分是可选的。一个迷你的有效的if语句如下:
if True:
print (‘Yes. It is true’)
python执行完毕完整的有关联的elif 和else的if语句后,它继续向下一个语句移动。在这个例子中,print(‘Done’)语句就是下一个语句。然后Python到了程序尽头结束了。
即使这是个简单程序,我已经指出了很多你需要注意的东西。所有这些都非常直接(对于有C/C++背景的人来说有点吃惊的简单)。你需要从开始就逐渐意识到这点,经过一些练习后,你就会从容接受,并且感到很“自然”了。

while语句
只要条件为真,while语句就允许你重复执行一块代码。while语句就是叫做循环语句的一个例子。while语句有一个可选的else语句。
举例见下图:

好像图片上传不成功。(请到微信公众号(Mark学编程)或者CSDN博客(Mark学编程)查看图片吧)

代码运行原理:
在这个程序里,我们仍然做猜测游戏,但这个while与if那个显著的不同在于,while的优势在于允许用户不停的猜测直到成功猜到。所以,不像if那个语句,要为每一个猜测不停的重复运行程序。

我们将input和if语句放到了while循环里面,在循环前,将变量running设置为True。进入while,首先检查running是否为True,如果是,进入循环内(while块),当这个块执行后,又开始检查条件,这个例子里就是检查running变量。如果是真,又开始进入while块执行。直到running为False,结束while块,向下进入else块,然后进入最后一句语句。
直到注意的是,如果你使用break,等执行break后,while循环可选的那个else就逃过不执行了,这个要注意。
True 和 False被称为Boolean 类型,你可以将它们分别看做和值1 和 0 相同的东西。

for 循环
for…in 语句是另一种循环语句,它遍历一个序列中的对象,也就是序列中每一个(元素)。我们在以后章节会详细学习序列。你现在需要知道的是,序列就是一个有序的元素集合。
举例:
For i in range(1, 5):
print(i)
else:
print(‘The for loop is over’)
照旧,不展示输出,请自行测试运行。

代码运行原理
程序中,我们打印数字序列。我们使用内置函数 range 产生数字序列。我们这里提供两个数字和range 返回一个从第一个数字开始一直到第二个数字前一个结束。比如:range(1,5)得出 [1,2,3,4] 默认下, range 采用1作为一个间隔,如果我们提供第三个数字给range,就成为间隔的大小,比如 range(1, 10,2)得 [1,3,5,7,9],记住,范围扩展到第二个数字,但不包含第二个数字。
请注意,range()每次只产生一个数字,如果你想一个完整的数字列表,对range()使用list(),比如:list(range(5))得出[0, 1, 2, 3, 4]。列表在数据结构章节讲解。
for循环遍历这个range- 等同于 for i in [1,2,3,4] 就像将序列中的每一个数字(对象)赋值给i;这样,我们只是打印i的值。
请记住else是可选的。如果包含此语句,for循环结束后总是执行一次,除非遇到有break语句。
记住for…in 循环用于所有序列。我们这里是用内置函数range产生的数字列表。但是一般的讲,循环可用于任何对象类型的任何序列。我们将在今后章节详细探索。

break 语句
此语句用于打断循环语句,停止执行循环语句。即使循环语句没有变成False,或者序列中的元素没有遍历完毕。
一个重要的注意点就是当break打断循环后,任何对应的循环else语句块都不再执行。
举例:
while True:
s = input(‘Enter sth: ‘)
if s == ‘quit’:
break
print(‘Length of the string is’, len(s))
print(‘Done’)

代码运行原理:
在这个程序里,我们重复接收用户输入,打印出输入的字符长度。我们通过检查输入是否为‘quit’,提供了一个特别的条件来终止程序。使用break来打断循环并到达程序终点。
Len()是内置函数,用于返回输入字符串的长度。
记住,break语句也可以用于for循环。

continue 语句
此语句用于告诉Python跳过本循环余下的语句,进入下一次循环的遍历。
我将例子稍微变动了一下,方便研究break和continue两个语句,见图。

好像图片上传不成功。(请到微信公众号(Mark学编程)或者CSDN博客(Mark学编程)查看图片吧)

请一定测试运行

代码运行原理
在这个程序里,我们接收用户输入,然后检查是否为“quit”,如果是,跳出循环。如果不是,打印输入字符串的长度,然后检查长度是否大于5,大于5,继续下面的打印语句,小于5,打印提示太小的信息,然后跳过下面的语句,返回进入下一次循环。
请注意,continue语句同样可以用于for循环。
(以上和原文有差异,主要是方便叙述代码运行顺序。–译者)

总结
我们学习了三种控制流语句—if,while 和 for 已经他们关联的break和continue语句。这些是Python最常见的语句,所以,熟练掌握它们很关键。
下一章节,我们学习如何创建和使用函数。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容