python流程控制
1-分支结构
1-什么是分支结构:根据条件判断的真假去执行不同分支对应的子代码
2-为什么要使用分支结构:人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞所以程序中必须有相应的机制来控制计算机具备人的这种判断能力
3-如何使用分支结构:if ... elif ... else ... 语句
2- 单分支 if
if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,...... # 满足条件后要执行的代码 # 代码1 # 代码2 # 实例 age = input("Please enter your age:") if age > '18': # 注意是英文冒号,下一行缩进4个空格 print("你已经成年啦")
3-双分支 if ... else ...
if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,...... # 满足条件后要执行的代码 # 代码1 # 代码2 else: # if条件不满足就走这段代码块 # 代码1 # 代码2 # 实例 age = input("Please enter your age:") if age > '18': # 注意是英文冒号,下一行缩进4个空格 print("你已经成年啦,可以进网吧啦") else: print("你还未成年,请好好读书呀!")
4-if嵌套
# if可嵌套多层 if 条件1: if 条件2: # 代码1 # 代码2 else: # 代码3 else: # 代码4 #实例 """ 考试成绩评价规则: 1. 如果成绩大于等于60分,就是及格,在此前提下: (1)如果成绩大于等于80分,属于优秀范围; (2)否则,属于一般范围。 2. 如果成绩小于60分,就是不及格,在此前提下: (1)如果成绩小于30分,平时太不认真,属于学渣了; (2)如果成绩大于等于30分,那么,至少还能抢救一下。 """ score=26 if score>=60: print('你已经及格') if score>=80: print('你很优秀') else: print('你只是一般般') else: print('不及格') if score<30: print('学渣') else: print('还能抢救一下') print('程序结束')
5-多分支 if ... elif ... else ...
if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,...... # 代码1 # 代码2 ...... elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,...... # 代码3 # 代码4 ...... elif 条件3: # 如果条件3的结果为True,就依次执行:代码5、代码6,...... # 代码5 # 代码6 ...... else: # 其它情况,就依次执行:代码7、代码8,...... # 代码7 # 代码8 ...... # 应用实例 """ 如果:成绩>=90,那么:优秀 如果成绩>=80且<90,那么:良好 如果成绩>=70且<80,那么:普通 """ score=input('Please enter your score: ') score=int(score) if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('很差')
注意:
# 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行 # 2、条件可以是任意表达式,但执行结果必须为布尔类型 # 在if判断中所有的数据类型也都会自动转换成布尔类型 # 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False # 2.2、其余均为True
6-总结
缩进
上面的ifdiam里,每个条件的下一行都缩进了4个空格,这是为什么呢?这是python的一大特色,强制缩进,目的是为了让陈序知道,每段代码依赖那个条件,如果不通过缩进来区分
程序不知道,当你的条件成立后,去执行那些代码
其他语言里,大多通过{}来确定代码块,比如C/C++,Java,JavaScript,都是这样
python缩进有以下几个原则:
- 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,name必须不能进行任何缩进
- 同一级别的代码,缩进必须一致
- 官方建议缩进使用4个空格,当然也可以使用两个
7-循环结构 while
1-什么是循环结构:重复执行某段代码块
2-为什么要用循环:计算机能够重复性地、自动地执行指令
3-如何使用循环结构:
8-while循环基本语法
while 条件: 代码1 代码2 代码3 while的运行步骤: 步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、...... 步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止
注意冒号和缩进
应用实例
# while + break 有3次机会打开密码 password = '123' count = 3 while count > 0: pwd = input('Please enter your password:') if pwd == password: print('密码正确,欢迎回家!') break # 跳出循环 count -= 1 print('密码不正确哦,你还有%s次机会' %count)
9-死循环
# 死循环就是while条件永远不为 false while True: number = input("Enter a number:") print(number)
10-循环终止语句
- break 用于完全结束一个循环,跳出循环体,执行循环后面的语句
- continue 和break有点类似,区别在于continue 只是终止本次循环,接着还执行后面的循环,break 则完全终止循环
# break 使用 username = 'howie' pwd = '123' while True: name = input('Please enter your name:') password = input('Please enter your password:') if name == username and password == pwd: print("密码正确!") break print('密码不正确') # continue 使用 # 使用 while 循环 实现输出 1-100 内的所有偶数 num = 0 while num < 100: num += 1 if num % 2 != 0:continue # 结束本次循环,继续执行下一次循环 print(num,end=',') # while循环嵌套+tag的使用 """ 针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门, 就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束 """ username = "jason" password = "123" count = 0 tag = True while tag: inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") while tag: cmd = input('>>: ') if cmd == 'quit': tag = False # tag变为False, 所有while循环的条件都变为False break print('run <%s>' % cmd) break # 用于结束本层循环,即第一层循环 else: print("输入的用户名或密码错误!") count += 1
11-while ... else ...
在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束
count = 0 while count <= 5 : count += 1 print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循环正常执行完啦 #没有被break打断,所以执行了该行代码 -----out of while loop ------
如果执行过程中被break,就不会执行else的语句
count = 0 while count <= 5 : count += 1 if count == 3: break print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 -----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句
12-for循环的基本语法
1-什么是for循环:for循环是python提供的第二种循环机制
2-为什么要有for循环:理论上for循环能做的事情,while循环都能做,之所以要有for循环,是因为for循环在循环取值(遍历取值)上比while循环更简洁
3-for循环基本语法
# 语法剖析 for 变量名 in 可迭代对象: # 可迭代对象可以是 列表 字典 元祖 字符串 集合等 代码1 代码2 ... # 注:[可迭代对象]先了解,后面函数部分会详细介绍
13-for循环应用
# 简单版(for 循环实现) lis1 = ['a','b','c'] for i in lis1: print(i,end=' ') # 输出 a b c # 复杂版(while 循环实现) lis2 = ['a','b','c'] count = 0 while count < len(lis2): print(lis2[count],end=' ') # 也是输出 a b c count += 1
# 简单版(for 循环实现) dic1 = {'打野':'李白','中路':'西施','上单':'李信','射手':'鲁班','辅助':'牛魔'} for k in dic1: # 注意字典数据结构中是以一组组键值对的形式存在的,所以默认情况下k取到的是键 print(k,dic1[k]) # 输出结果 ''' 打野 李白 中路 西施 上单 李信 射手 鲁班 辅助 牛魔 ''' # 复杂版(while 循环实现) dic2 = {'打野':'李白','中路':'西施','上单':'李信','射手':'鲁班','辅助':'牛魔'} count = 0 re_dict2_list = sorted(dic2.items(),key=lambda x:x[0],reverse=True) # True表示降序 # 注意字典数据类型元素之间是无序的,所以dic[0]是有语法错误的。并且不可以有重复的键值,所以我们需要对元素进行排序 while count < len(dic2): # print(type(re_dict2_list)) <class 'list'> print(re_dict2_list[count][0],re_dict2_list[count][1]) count += 1
# 简单版(for 循环实现) msg1 = 'welcome to the world of python' # 注意:空格也算字符串 for i in msg1: if i == ' ': i = '\n' print(i,end='') # 输出 ''' welcome to the world of python ''' # 复杂版(while 循环实现) msg2 = 'welcome to the world of python' count = 0 while count < len(msg2): word = msg2[count] if word != ' ': print(word,end='') else: print() count += 1 # 输出和上面是一样的
14-for循环控制循环次数:range
# range()函数 使用range(a,b)函数,你可以生成了一个【取头不取尾】的整数序列 print(list(range(10))) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] lis1 = list(range(1,9)) # 取头不取尾,取到1-8 print(lis1) # [1, 2, 3, 4, 5, 6, 7, 8] lis2 = list(range(1,9,1)) # 第三个参数称之为 步长 print(lis2) # [1, 2, 3, 4, 5, 6, 7, 8] lis3 = list(range(1,11,2)) # 步长为 2 print(lis3) # [1, 3, 5, 7, 9] for i in range(1,11,2): print(i) """ 1 3 5 7 9 """
for i in range(3): print('python') # 这里输出三次 python 这样range函数就可以控制循环次数啦
15-for循环+break+else
break 与 else 的使用与while 循环一样
user_name = 'howie' pass_word = '123' for i in range(3): name = input('请输入你的用户名:') pwd = input('请输入你的密码:') if name == user_name and pwd == pass_word: print('登录成功!') break else: print("错误次数过多")
16-for循环+continue
# continue 的使用 # 例:打印(除5外)1,2,3,4,6,7,8,9,10 for i in range(1,11): if i == 5:continue print(i)
17-for循环嵌套
for循环嵌套就是嵌套多层即外侧循环一次,内层循环全部执行完才进行外侧第二次循环,以打印九九乘法表为例
# 打印乘法表 for j in range(1,10): for k in range(1,j+1): print('{}*{}={}'.format(k,j,k*j),end=' ') print()
学习没有捷径,需要日积月累的积淀及对技术的热爱。