1、流程控制if
1、当程序执行会产生多种情况但只需要一种情况时,需要进行判断程序的执行方向来得到想要的结果以及逻辑。
2、if常用的组合
1、if
if "条件语句": # 条件语句返回的值为布尔值的True或False "需要运行的代码" # 满足条件语句时执行
满足条件语句并返回一个True时,执行需要运行的代码,当整个if流程执行完成后,若整个流程下面还有代码,继续执行下面的代码
a = 10 b = 100 if b > a: print(a) # 10 c = a + b # if执行完成后执行 print(c) # 110
2、if...else...
if "条件语句": # 条件语句返回的值为布尔值的True或False "需要运行的代码1" # 满足条件语句时执行 else: "需要运行的代码2" # 不满足条件语句时执行
满足条件语句并返回一个True时,执行需要运行的代码1,不满足条件语句并返回一个False时,执行需要运行的代码2。当整个if流程执行完成后,若整个流程下面还有代码,继续执行下面的代码。
a = 10 b = 100 if b > a: print(a) # 满足b>a时执行 10 else: c = a + b # 当b>a不成立时执行 print(c) # 110
3、if...elif...elif...else...
if "条件语句1": # 条件语句返回的值为布尔值的True或False "需要运行的代码1" # 满足条件语句时1执行 elif "条件语句2": "需要运行的代码2" # 满足条件语句2时执行 elif "条件语句3": "需要运行的代码3" # 满足条件语句3时执行 else: "需要运行的代码4" # 不满足条件语句1、2、3时执行
score = input("your score: ") score = int(score) # 将得到的字符串类型的数据转为整形 if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('差')
当输入的分数大于等于90时,满足条件1,输出优秀;当输入的分数小于90且大于等于80时,不满足条件1,满足条件2,输出良好;当输入的分数小于80且大于等于70时,条件1和2都不满足,此时满足条件3,输出普通;当输入的分数小于70时,不满足条件1、2、3,输出为差。
4、if嵌套
if "条件语句1": "需要运行的代码1" # 满足条件语句1时执行 if "条件语句2": "需要运行的代码2" # 满足条件语句2时执行 else: "需要运行的代码22" # 不满足条件语句2时执行 else: "需要运行的代码11" # 不满足条件语句1时执行 if "条件语句3": "需要运行的代码3" # 满足条件语句3时执行 else: "需要运行的代码33" # 不满足条件语句3时执行
当判断条件有多个时,可以使用if嵌套使用,执行原理和if...else...执行原理相同
# if的嵌套 cls = 'human' gender = 'female' age = 18 is_success = False if cls == 'human' and gender == 'female' and age > 16 and age < 22: print('开始表白') if is_success: print('那我们一起走吧...') else: print('我逗你玩呢') else: print('阿姨好')
2、流程控制while
1、对一段代码重复执行时,需要进行循环执行,此时就要用到while,再满足条件的情况下对一段代码循环执行。
2、while常用组合
1、while
while "条件语句": "需要执行的代码"
只要满足条件语句,则一直执行内部的代码。当不满足条件时或者内部执行的代码中有break时,退出此时所在的while循环;当执行内部代码过程中遇到continue时,跳出当前循环,执行下一次循环。
# continue i = 0 while i < 5: i += 1 if i == 3: continue # 跳出当前循环 else: print(i) # 输出结果为1、2、4、5 # break i = 0 while i < 5: i += 1 if i == 3: break # 跳出while循环,结束循环 else: print(i) # 输出结果为1、2
2、while...else...
while "条件语句": "需要执行的代码1" else: "需要执行的代码2"
只要满足条件语句,则一直执行内部的代码1。当不满足条件时,跳出while循环,执行else中要执行的代码2;当内部执行的代码中有break时,退出此时所在的while循环,不执行else中的代码2;当执行内部代码过程中遇到continue时,跳出当前循环,执行下一次循环。
# continue # 输出结果为1、2、4、5 跳出循环了 i = 0 while i < 5: i += 1 if i == 3: continue # 跳出当前循环 else: print(i) # 输出结果为1、2、4、5 else: print("跳出循环了") # break # 输出结果为1、2 i = 0 while i < 5: i += 1 if i == 3: break # 跳出while循环,结束循环 else: print(i) # 输出结果为1、2 else: print("跳出循环了吗?")
3、while嵌套
while "条件语句1": "需要执行的代码1" while "条件语句2": "需要执行的代码2" while "条件语句3": "需要执行的代码3"
while的执行和单个的while执行原理相同,但在执行退出循环的操作上略有不同。退出循环分为退出当前所在层次的循环和退出整个嵌套循环(以两层循环嵌套为例)
1、退出当前所在层次的循环
利用break完成。
# 退出内层循环的while循环嵌套 user_db = 'jason' pwd_db = '123' while True: inp_user = input('username: ') inp_pwd = input('password: ') if inp_user == user_db and pwd_db == inp_pwd: print('login successful') while True: cmd = input('请输入你需要的命令:') if cmd == 'q': break print('%s功能执行'%cmd) else: print('username or password error') print('退出了while循环')
2、退出整个嵌套循环
方法一:
user_db = 'jason' pwd_db = '123' while True: inp_user = input('username: ') inp_pwd = input('password: ') if inp_user == user_db and pwd_db == inp_pwd: print('login successful') while True: cmd = input('请输入你需要的命令:') if cmd == 'q': break print('%s功能执行'%cmd) break else: print('username or password error') print('退出了while循环')
当嵌套层数过多时,方法一的太过麻烦,需要在每个循环后添加break,不太现实。由此引出了方法二。考虑到不满足条件时会退出循环,则定义一个标志位,需要时批更改标志位的布尔值,达到退出多层循环的目的。
方法二:
# 退出双层循环的while循环嵌套 user_db = 'jason' pwd_db = '123' flag = True while flag: inp_user = input('username: ') inp_pwd = input('password: ') if inp_user == user_db and pwd_db == inp_pwd: print('login successful') while flag: cmd = input('请输入你需要的命令:') if cmd == 'q': flag = False break print('%s功能执行'%cmd) else: print('username or password error') print('退出了while循环')
3、利用while循环取值
l = [1, 2, 3, 4, 5] i = 0 while i < len(l): print(l[i]) # 利用素引查询 i += 1
当被查数据不能利用索引查询时,以上方法不适合查询。
3、流程控制for
1、当取出的数据的内部元素时无序的时候,就不能利用while循环查询数据了,此时可以利用for循环
2、for常用组合
1、for
# for循环字典 info = {'name': 'jason', 'age': 19} for item in info: print(item) # 拿到字典所有的key print(info[item]) # 拿到字典所有的value
for可以不依赖于索引取指,是一种通用的循环取指方式
for的循环次数是由被循环对象包含值的个数决定的,而while的循环次数是由条件决定的
#for循环也可以按照索引取值 name_list = ['jason', 'nick', 'tank', 'sean'] # for i in range(0,5): # 5是数的 for i in range(len(name_list)): print(i, name_list[i])
for i in range(1, 10): # range顾头不顾尾 print(i) # python2与python3中range的区别 # 在python2中 >>> range(1,100) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] >>> xrange(1,100) xrange(1, 100) # 在python3中 >>> range(1,100) range(1, 100)
2、for...break...
#跳出本层循环 # for+break name_list = ['nick', 'jason', 'tank', 'sean'] for name in name_list: if name == 'jason': break print(name)
3、for...continue...
# for+continue # 跳出本次循环,进入下一次循环 # for+continue name_list = ['nick', 'jason', 'tank', 'sean'] for name in name_list: if name == 'jason': continue print(name)
4、for...else...
# for + else name_list = ['nick', 'jason', 'tank', 'sean'] for name in name_list: if name == 'jason': continue print(name) else: print("执行完了")
5、for嵌套
先执行外层的for循环,每执行一次外层的for循环在执行内部的for循环,若内部还存在for循环嵌套,则继续执行内部for循环,直到内部没有for循环为止,将最内层的for循环执行完后,再一层一层的执行外层循环。
# 打印99乘法口诀表 ''' 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 ... 9*1=9.................9*9=81 ''' for i in range(1,10): #i=3 for j in range(1,i+1): print('%s*%s=%s ' %(i,j,i*j),end='') #i=2 j=2 print()