流程控制概念
什么是流程控制?
所谓的流程控制是计算机运算领域的用语意指在程序运行时个别的指令(或是陈述 子程序)运行或求值的顺序不论是在声明式编程语言还是函数式编程语言都有类似的概念
以上是官方的解释,我们列举一个现实中的实例来具体说明一下
假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路, 如果我们想让程序也能处理这样的判断怎么办? 很简单,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。if...else 语句
Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性。须重要理解,if、while、for以及与它们相搭配的 else、 elif、break、continue和pass语句
详解
if语句
Python中的if子句由三部分组成:关键字本身、用于判断结果真假的条件表达式以及当表达式为真或者非零时执行的代码块。if 语句的语法如下:
if 执行条件: 执行体
if语句有三种形式:
单分支
if 条件: 满足条件后要执行的代码
双分支
语法:if 条件: 满足条件执行代码else: if条件不满足就走这段实例:Name = 'yefei'if Name : print('你好'+name)else: print('爱谁谁')
缩进(重点了解)
这里必须要插入这个缩进的知识点
你会发现,上面的if代码里,每个条件的下一行都缩进了4个空格,这是为什么呢?这就是Python的一大特色,强制缩进,目的是为了让程序知道,每段代码依赖哪个条件,如果不通过缩进来区分,程序怎么会知道,当你的条件成立后,去执行哪些代码呢?
在其它的语言里,大多通过{}
来确定代码块,比如C,C++,Java,Javascript都是这样,看一个JavaScript代码的例子
var age = 18if ( age < 18){ console.log("还未成年")}else{ console.log('恭喜你,成年啦,想干什么都可以')}
在有{}
来区分代码块的情况下,缩进的作用就只剩下让代码变的整洁了。
Python是门超级简洁的语言,发明者定是觉得用{}
太丑了,所以索性直接不用它,那怎么能区分代码块呢?答案就是强制缩进。
Python的缩进有以下几个原则:
- 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
- 同一级别的代码,缩进必须一致
- 官方建议缩进用4个空格,当然你也可以用2个,如果你想被人笑话的话。
多分支
回到流程控制上来,if...else ...可以有多个分支条件
语法:if 条件: 满足条件执行代码elif 条件: 上面的条件不满足就走这个elif 条件: 上面的条件不满足就走这个elif 条件: 上面的条件不满足就走这个 else: 上面所有的条件不满足就走这段实例:age = 18guess = int(input(">>:"))if guess > age : print("猜的大了,往小里试试...")elif guess < age : print("猜的小了,往大里试试...")else: print("恭喜你,猜对了...")
来个匹配成绩的小程序吧,成绩有ABCDE5个等级,与分数的对应关系如下A 90-100B 80-89C 60-79D 40-59E 0-39要求用户输入0-100的数字后,你能正确打印他的对应成绩score = int(input("输入分数:"))if score > 100: print("注意,满分100...")elif score >= 90: print("A级")elif score >= 80: print("B级")elif score >= 60: print("C级")elif score >= 40: print("D级")else: print("太笨了...E")
这里有个问题,就是当我输入95的时候 ,它打印的结果是A,但是95 明明也大于第二个条件elif score >=80:
呀, 为什么不打印B呢?这是因为代码是从上到下依次判断,只要满足一个,就不会再往下走啦,这一点一定要清楚呀!
whlie循环
引言
在生活中,我们遇到过循环的事情吧?比如吃饭睡觉工作,循环听歌等等。在python程序中,循环也是存在的。那么这个循环在Python中就是流程控制语句while。
while是一个条件循环语句,与if声明相比,如果 if 后的条件为真,就会执行一次相应的代码块。而while中的代码块会一直循环执行,直到循环条件不再为真。
while:适合于循环次数是未知的。最好选择while循环.
(1)一般语法
while循环的语法如下:while 条件:
# 循环体
# 如果条件为真,那么循环体则执行
# 如果条件为假,那么循环体不执行
现实中的实例(听歌)
while True: print('痒') print('社会摇') print('喜洋洋') print('我要这铁棒有何用')
while循环的执行体会一直循环执行,那么内部是如何执行的呢?
这样大家就能清楚的明白while到底是如何进行循环的了,那么问题也来了:我们如果要终止这个循环如何终止呢?
终止循环的几种方式:
- 改变条件(根据上面的流程,只要改变条件,就会终止循环)。
- 关键字:break。
- 调用系统命令:quit(),exit() 后面会讲到,不建议大家使用。
- 关键字:continue(终止本次循环)。
利用改变条件,终止循环。给大家引入标志位的概念。
flag = Truewhile flag: print('痒') print('社会摇') print('喜洋洋') flag = False print('我要这铁棒有何用')
count = 1flag = Truewhile flag: print(count) count = count + 1 if count == 101: flag = False
n = 100 sum = 0counter = 1while counter <= n: sum = sum + counter counter += 1 print("1 到 %d 之和为: %d" % (n,sum))执行结果如下:1 到 100 之和为: 5050
while ... else ..
与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句
while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count = 0while count < 5: print (count, " 小于 5") count = count + 1else: print (count, " 大于或等于 5")执行以上脚本,输出结果如下:0 小于 51 小于 52 小于 53 小于 54 小于 55 大于或等于 5
for循环语句
for循环:适合于循环次数是已知的。最好选择for循环
它是Python中最强大的循环结构。它可以遍历序列成员,可以用在列表解析和生成器表达式中,它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环(所有这一切都是在内部发生的)
(1)一般语法
for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素,,并在所有条目都处理过后结束循环。它的语法如下:for iter_var in iterable: suite_to_repeat
每次循环, iter_var迭代变量被设置为可迭代对象(序列、迭代器或者是其他支持迭代的对象)的当前元素,提供给suite_to_repeat 语句块使用
(2)用于序列类型
for循环可以迭代不同的序列对象,像字符串、 列表、以及元组。
迭代序列有三种基本方法: 通过序列项迭代>>> nameList = ['Walter', "Nicole", 'Steven', 'Henry'] >>> for eachName in nameList: ... print eachName, "Lim"... Walter Lim Nicole Lim Steven Lim Henry Lim
迭代一个列表.。每次迭代,eacgName变量都被设置为列表中特定某个元素。
通过序列索引迭代
>>> nameList = ['Cathy', "Terry", 'Joe', 'Heather','Lucy'] >>> for nameIndex in range(len(nameList)): ... print "Liu,", nameList[nameIndex] ... Liu, Cathy Liu, Terry Liu, Joe Liu, Heather Liu, Lucy
没有迭代元素, 而是通过列表的索引迭代。但通过直接迭代序列要比索引迭代快。
使用项和索引迭代
>>> nameList = ['Donn', 'Shirley', 'Ben', 'Janice','David', 'Yen', 'Wendy'] >>> for i, eachLee in enumerate(nameList): ... print "%d %s Lee" % (i+1, eachLee) ... 1 Donn Lee 2 Shirley Lee 3 Ben Lee 4 Janice Lee 5 David Lee 6 Yen Lee 7 Wendy Lee
(3)用于迭代器类型
用for循环访问迭代器和访问序列的方法差不多,迭代器并不代表循环条目的集合,迭代器对象有一个next()方法, 调用后返回下一个条目。 所有条目迭代完后, 迭代器引发一个StopIteration异常告诉程序循环结束,for语句在内部调用next()并捕获异常。
使用迭代器做 for 循环的代码与使用序列条目几乎完全相同。事实上在大多情况下,无法分辨出迭代的是一个序列还是迭代器,因此遍历一个迭代器时,实际上可能指的是要遍历一个序列、迭代器或是一个支持迭代的对象(它有 next()方法)。(4)range()内建函数
内建函数range()可以把类似foreach的for循环变成你更加熟悉的语句。
Python提供了两种不同的方法来调用range() ,完整语法要求提供两个或三个整数参数:range(start, end, step =1),range()会返回一个包含所有k的列表,其中start <= k < end,从start到end ,k每次递增 ste,step不可以为零,否则将发生错误。>>> range(3, 7) [3, 4, 5, 6] >>> for eachVal in range(2, 19, 3): ... print "value is:", eachVal ... value is: 2value is: 5value is: 8value is: 11value is: 14value is: 17
range() 还有两种简略的语法格式:range(end)和range(start, end)。 start 默认为0, step默认为1。
(6)与序列相关的内建函数
序列相关函数:sorted()、 reversed()、enumerate()和zip(),称为“序列相关”是因为其中两个函数(sorted() 和 zip())返回一个序列(列表),而另外两个函数(reversed() 和 enumerate())返回迭代器(类似序列)。
break和continue语句
相关介绍
Python中的break语句可以结束当前循环然后跳转到下条语句,类似C中的break。常用在当某个外部条件被触发(一般通过 if 语句检查),需要立即从循环中退出时.。break 语句可以用在 while 和 for 循环中。 Python里的continue语句和其他高级语言中的传统continue并没有什么不同,它可以被用在while和for循环里。 while循环是条件性的,而 for 循环是迭代的,所以continue在开始下一次循环前要满足一些先决条件,否则循环会正常结束。 程序中当遇到 continue 语句时, 程序会终止当前循环,并忽略剩余的语句,然后回到循环的顶端。在开始下一次迭代前,如果是条件循环,我们将验证条件表达式。如果是迭代循环,将验证是否还有元素可以迭代。只有在验证成功的情况下,才会开始下一次迭代
break语句
Python break语句,就像在C语言中,打破了最小封闭for或while循环。
break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。
break语句用在while和for循环中。
如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。
for letter in 'Python': # 第一个实例 if letter == 'h': break print '当前字母 :', letter var = 10 # 第二个实例while var > 0: print '当前变量值 :', var var = var -1 if var == 5: # 当变量 var 等于 5 时退出循环 break print "Good bye!"结果当前字母 : P当前字母 : y当前字母 : t当前变量值 : 10当前变量值 : 9当前变量值 : 8当前变量值 : 7当前变量值 : 6Good bye!
continue语句
Python continue 语句跳出本次循环,而break跳出整个循环。
continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。
continue语句用在while和for循环中。
for letter in 'Python': # 第一个实例 if letter == 'h': continue print '当前字母 :', letter var = 10 # 第二个实例while var > 0: var = var -1 if var == 5: continue print '当前变量值 :', varprint "Good bye!"
continue 语句是一个删除的效果,他的存在是为了删除满足循环条件下的某些不需要的成分:
#!/usr/bin/python# -*- coding: UTF-8 -*-var = 10while var > 0: var = var -1 if var == 5 or var == 8: continue print '当前值 :', varprint "Good bye!"
练习实例
我们想只打印0-10之间的奇数,可以用continue语句跳过某些循环:#!/usr/bin/python# -*- coding: UTF-8 -*-n = 0while n < 10: n = n + 1 if n % 2 == 0: # 如果n是偶数,执行continue语句 continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行 print(n)
循环嵌套
Python 语言允许在一个循环体里面嵌入另一个循环。
Python for 循环嵌套语法:
for iterating_var in sequence: for iterating_var in sequence: statements(s) statements(s)
Python while 循环嵌套语法:
while expression: while expression: statement(s) statement(s)
你可以在循环体内嵌入其他的循环体,如在while循环中可以嵌入for循环, 反之,你可以在for循环中嵌入while循环。
以下实例使用了嵌套循环输出2~100之间的素数:#!/usr/bin/python# -*- coding: UTF-8 -*- i = 2while(i < 100): j = 2 while(j <= (i/j)): if not(i%j): break j = j + 1 if (j > i/j) : print i, " 是素数" i = i + 1 print "Good bye!"结果2 是素数3 是素数5 是素数7 是素数11 是素数13 是素数17 是素数19 是素数23 是素数29 是素数31 是素数37 是素数41 是素数43 是素数47 是素数53 是素数59 是素数61 是素数67 是素数71 是素数73 是素数79 是素数83 是素数89 是素数97 是素数Good bye!
结合使用了while、for、if、break以及continue,来验证用户输入。用户有三次机会来输入正确的密码,阻止用户猜测密码。
#!/usr/bin/env python valid = Falsecount = 3passwdList=('abc',) while count > 0 and valid == False: input = raw_input("enter password:").strip() # check for valid passwd for eachPasswd in passwdList: if input == eachPasswd: valid = True break if not valid: # (or valid == 0) print "invalid input" count -= 1 continue else: break
while和for循环的区别:
for循环用于已经知道循环的次数或者循环遍历可迭代的数据类型例如:列表 字典等
while循环用于不知道具体的循环次数的情况或者无限循环