--- layout: post # 使用的布局(不需要改) title: 「Pyhton教程05」控制流 # 标题 subtitle: Python学习笔记 #副标题 date: 2019-09-23 # 时间 author: Duter2016 # 作者 header-img: img/post-bg-e2e-ux.jpg #这篇文章标题背景图片 catalog: true # 是否归档 music-id: # 网易云音乐单曲嵌入 music-idfull: # 网易云音乐歌单嵌入 tags: #标签 - Python - 教程 --- 1、代码块有3条规则。 (1)缩进增加时,代码块开始。 (2)代码块可以包含其他代码块。 (3)缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。 2、在Python中,if语句包含以下部分: • if关键字; • 条件(即求值为True或False的表达式); • 冒号; • 在下一行开始,缩进的代码块(称为if子句)。 例如,假定有一些代码,检查某人的名字是否为Alice(假设此前曾为name赋值)。 ``` if name == 'Alice': print('Hi, Alice.') ``` 所有控制流语句都以冒号结尾,后面跟着一个新的代码块(子句)。语句的if子句是代码块,包含print('Hi, Alice.')。 3、else语句不包含条件,在代码中,else语句中包含下面部分: • else关键字; • 冒号; • 在下一行开始,缩进的代码块(称为else子句)。 回到Alice的例子,我们来看看使用else语句的一些代码,在名字不是Alice时,提供不一样的问候。 ``` if name == 'Alice': print('Hi, Alice.') else: print('Hello, stranger.') ``` 4、elif语句是“否则如果”,总是跟在if或另一条elif语句后面。它提供了另一个条件,仅在前面的条件为False时才检查该条件。在代码中,elif语句总是包含以下部分: • elif关键字; • 条件(即求值为True或False的表达式); • 冒号; • 在下一行开始,缩进的代码块(称为elif子句)。 让我们在名字检查程序中添加elif,看看这个语句的效果。 ``` if name == 'Alice': print('Hi, Alice.') elif age < 12: print('You are not Alice, kiddo.') ``` 5、利用while语句,可以让一个代码块一遍又一遍的执行。只要while语句的条件为True,while子句中的代码就会执行。在代码中,while语句总是包含下面几部分: • 关键字; • 条件(求值为True或False的表达式); • 冒号; • 从新行开始,缩进的代码块(称为while子句)。 可以看到,while语句看起来和if语句类似。不同之处是它们的行为。if子句结束时,程序继续执行if语句之后的语句。但在while子句结束时,程序执行跳回到while语句开始处。while子句常被称为“while循环”,或就是“循环”。 6、如果执行遇到break语句,就会马上退出while循环子句。在代码中,break语句仅包含break关键字。 非常简单,对吗?这里有一个程序,和前面的程序做一样的事情,但使用了break语句来跳出循环。输入以下代码,将文件保存为yourName2.py: ``` ❶ while True:   print('Please type your name.') ❷ name = input() ❸ if name == 'your name': ❹ break ❺ print('Thank you!') ``` 7、像break语句一样,continue语句用于循环内部。如果程序执行遇到continue语句,就会马上跳回到循环开始处,重新对循环条件求值(这也是执行到达循环末尾时发生的事情)。 让我们用continue写一个程序,要求输入名字和口令。在一个新的文件编辑窗口中输入以下代码,将程序保存为swordfish.py。 ``` while True:   print('Who are you?')   name = input() ❶ if name != 'Joe': ❷ continue   print('Hello, Joe. What is the password? (It is a fish.)') ❸ password = input()   if password == 'swordfish': ❹ break ❺ print('Access granted.') ``` 如果用户输入的名字不是Joe❶,continue语句❷将导致程序执行跳回到循环开始处。再次对条件求值时,执行总是进入循环,因为条件就是True。如果执行通过了if语句,用户就被要求输入口令❸。如果输入的口令是swordfish,break语句运行❹,执行跳出while循环,打印Access granted❺。否则,执行继续到while循环的末尾,又跳回到循环的开始。 8、“类真”和“类假”的值 其他数据类型中的某些值,条件认为它们等价于True和False。在用于条件时,0、0.0和' '(空字符串)被认为是False,其他值被认为是True。例如,请看下面的程序: ``` name = '' while not name:❶ print('Enter your name:') name = input() print('How many guests will you have?') numOfGuests = int(input()) if numOfGuests:❷ print('Be sure to have enough room for all your guests.')❸ print('Done') ``` 如果用户输入一个空字符串给name,那么while语句的条件就会是True ❶,程序继续要求输入名字。如果numOfGuests不是0 ❷,那么条件就被认为是True,程序就会为用户打印一条提醒信息❸。 可以用not name != ' '代替not name,用numOfGuests != 0代替numOfGuests,但使用类真和类假的值会让代码更容易阅读。 9、如果你想让一个代码块执行固定次数,该怎么办?可以通过for循环语句和range()函数来实现。 在代码中,for语句看起来像for i in range(5):这样,总是包含以下部分: • for关键字; • 一个变量名; • in关键字; • 调用range()方法,最多传入3个参数; • 冒号; • 从下一行开始,缩退的代码块(称为for子句)。 也可以在循环中使用continue语句。continue语句将让for循环变量继续下一个值,就像程序执行已经到达循环的末尾并返回开始一样。实际上,只能在while和for循环内部使用continue和break语句。如果试图在别处使用这些语句,Python将报错。 10、range()的开始、停止和步长参数 某些函数可以用多个参数调用,参数之间用逗号分开,range()就是其中之一。这让你能够改变传递给range()的整数,实现各种整数序列,包括从0以外的值开始。 ``` for i in range(12, 16): print(i) ``` 第一个参数是for循环变量开始的值,第二个参数是上限,但不包含它,也就是循环停止的数字。 12 13 14 15 range()函数也可以有第三个参数。前两个参数分别是起始值和终止值,第三个参数是“步长”。步长是每次迭代后循环变量增加的值。 ``` for i in range(0, 10, 2): print(i) ``` 所以调用range(0, 10, 2)将从0数到8,间隔为2。 0 2 4 6 8 在为for循环生成序列数据方面,range()函数很灵活。 11、 **用sys.exit()提前结束程序** 要介绍的最后一个控制流概念,是如何终止程序。当程序执行到指令的底部时,总是会终止。但是,通过调用sys.exit()函数,可以让程序终止或退出。因为这个函数在sys模块中,所以必须先导入sys,才能使用它。