python 流程控制python
程序的流程分为三类 顺序结构 从上到下依次执行 分支结构(经过if 判断走哪条分支结构) 循环结构(while 与for)python2.7
分支结构就是依据不一样的判断条件,根据条件的真假,选择不一样的分支结构去执行优化
if 条件1:# 若是条件1为真 则执行代码1 代码1 #python用四个缩进表明一组代码块 elif 条件2:# 若是条件2为真 则执行代码2 代码2 elif 条件3:# 若是条件3为真 则执行代码3 代码3 ... else: #以上条件都不符合 执行代码4 代码4 ... #python的判断 全部的数据类型都是转换为True 和False 布尔值类型
a= 89 if a > 80: print("你很优秀呀") else: print("也不咋地")
你很优秀呀code
改良一下代码 经过用户的input 自动判断进程
a = int(input("请输出你的成绩:")) # 由于用户输入的是str类型 没法作大小对比用int()转换为整型 if a > 80: print("你很优秀呀") else: print("也不咋地")
请输出你的成绩:34
也不咋地ip
多个条件判断内存
a = int(input("请输出你的成绩:")) b = input("你以为本身咋样(通常/不错):") if a >= 80 and b == "通常": print("你很优秀呀,也挺能装") elif a >= 80 and b == "不错": print("确实是这么回事") elif a < 80 and b == "不错": print("你可拉倒吧") else: print("哪里凉快 哪里呆着去")
请输出你的成绩:30
你以为本身咋样(通常/不错):不错
你可拉倒吧资源
name = input("请输入有用户名:").strip() #.strip 去掉字符串的'' passwd = input("请输入密码:").strip() if name == 'alin' and passwd == '12345': print("alin 登录成功") else: print("用户或密码错误")
请输入有用户名:alin
请输入密码:12345
alin 登录成功字符串
循环结构就是 重复执行某个代码块 知道不知足条件后跳出,也就是那些重复性质的工做input
while 条件1: #若是条件为真 执行下面代码块 1 2 3 执行完一遍后再来检查条件1 知足条件继续执行知道不知足条件 跳出概循环 代码1 代码2 代码3 ... print(".....")
只要知足条件1 就会一直执行代码 1 2 3
while循环的应用场景
用户身份认证 帐户密码登录(不限制错误次数的)
name = 'alin' passwd = '12345' input_name = input("请输入有用户名:") input_passwd = input("请输入密码:") while True: if input_name == name and input_passwd == passwd: print("帐户密码正确登录成功") else: print("用户或密码错误")
请输入有用户名:alin
请输入密码:12345
帐户密码正确登录成功
帐户密码正确登录成功
.......
上面这段代码是一个死循环代码 问题点有两个
条件为True while没有推出 会一直执行循环下去,(具体循环什么那?)
因为用户输入的name passwd 在while循环外面 当咱们输入一次后,后面的判断不须要咱们再次输入 若是输入正确 页面打印 帐户密码正确登录成功 后,再次判断不须要用户再次输入,
因此还会输出 帐户密码正确登录成功 这里会一直判断一直输出这句话
若是输入错误 页面会也会一直打印 用户或密码错误
这种须要用户I/0的死循环不会形成效率问题
while True: # 这种没有i/o 纯计算的死循环会把计算资源耗尽,带来致命的效率问题 1=2=3=4 # while 1 比while True 效率快一些
修改代码
退出循环的方式
把 while 的条件改成False 改完后还会循环一次 下次才能退出
break,只要运行到break就会马上终止本层循环
while+break
name = 'alin' passwd = '12345' while True: input_name = input("请输入有用户名:") #把用户输入置于循环内,完成一个循环,第二个循环 须要用户再次输入 input_passwd = input("请输入密码:") if input_name == name and input_passwd == passwd: print("帐户密码正确登录成功") break # 当用户输入正确,输出 帐户密码正确登录成功 后 推出这个循环 else: print("用户或密码错误")
请输入有用户名:alix
请输入密码:123456
用户或密码错误
请输入有用户名:alin
请输入密码:12345
帐户密码正确登录成功
while 0: #break只会中断本层的while循环 若是有多层 须要每层都配一个break while 0: while 0: while 0: break #四层 break #三层 break #二层 break #一层
一次所有退出全部循环的 ,能够给全部while设置一个条件 把这个条件改成False 下次循环的时候 全部条件都不符合 退出全部循环,可是会在循环一次
咱们再加上一个循环次数的限制 限制用户输入次数 超过三次跳出循环
count = 3 # 设置一个次数3 name = 'alin' passwd = '12345' while count >= 1: # 原始count=3 因此count >=1的机会有三次 3 2 1 input_name = input("请输入有用户名:") input_passwd = input("请输入密码:") # 设置的帐户密码都是str字符串 不须要类型转换 if input_name == name and input_passwd == passwd: print("帐户密码正确登录成功") break #输入正确后跳出循环 else: print("用户或密码错误") count -= 1 # 输入错误后 count减 1 而后再去循环 print("感谢您的输入")
请输入有用户名:qw
请输入密码:qw
用户或密码错误
请输入有用户名:qw
请输入密码:qw
用户或密码错误
请输入有用户名:qw
请输入密码:qw
用户或密码错误
感谢您的输入
当有多个while循环的时候 退出每一个while循环都须要一个break
count = 3 # 设置一个次数3 name = 'alin' passwd = '12345' while count >= 1: #第一层while input_name = input("请输入有用户名:") input_passwd = input("请输入密码:") if input_name == name and input_passwd == passwd: #第一层if print("帐户密码正确登录成功") while True: #第二层while a=input("请问本次服务满意吗(满意/不满意)") if a == '满意': #第二层if print("感谢您的支持") break #对应第二曾if条件成立的状况下退出第二层while else: print('咱们会持续改进的') break # 对应第二层else成立的状况下退出第二层while break #对应第一层if成立 退出第一层while else: print("用户或密码错误") count -= 1
while+tag的方式
count = 3 # 设置一个次数3 name = 'alin' passwd = '12345' tag = True while tag: input_name = input("请输入有用户名:") input_passwd = input("请输入密码:") if input_name == name and input_passwd == passwd: print("帐户密码正确登录成功") while tag: a = input("请问本次服务满意吗(满意/不满意)") if a == '满意': print("感谢您的支持") tag = False else: print('咱们会持续改进的') tag = False tag = False else: print("用户或密码错误") count -= 1
请输入有用户名:alin
请输入密码:12345
帐户密码正确登录成功
请问本次服务满意吗(满意/不满意)不满意
咱们会持续改进的
while+ continue 结束本层循环continue后面的部分,下次循环继续进程
num = 0 while num < 8: if num == 5: # 当num=5的时候不打印 全部if判断要在print(num)前面执行 num += 1 # num +=1 要在continue前面执行,放在continue后面永远不会执行,+=1后num才能跳到6 不然 num 一直等于5 一直在中断中 没法跳出if判断 continue print(num) num += 1
0
1
2
3
4
6
7
while+else 当while正常结束完循环,不是被break掉的时候,else后面的代码会执行
count = 0 # 设置一个次数3 name = 'alin' passwd = '12345' while count < 3: # 这只错误次数为3次 input_name = input("请输入有用户名:") input_passwd = input("请输入密码:") if input_name == name and input_passwd == passwd: print("帐户密码正确登录成功") while True: a = input("请问本次服务满意吗(满意/不满意)") if a == '满意': print("感谢您的支持") break else: # 当用户密码正确进入最里层while循环对服务评价不满意的时候会执行的else print('咱们会持续改进的') break break else: # if判断 帐户密码不正确的时候会执行的else print("用户或密码错误") count += 1 else: print("用户或密码错误超过三次已推出循环") #最外面一层while不被break掉会执行的的else
应用场景 当我正确执行完while语句须要再次输出的时候用 while + else语句
for循环的应用场景通常用于 列表 字典 元祖的循环取值上,用法要比while方便
for i in 循环体
代码块
......
list1 = [1, 2, 3, 4] #列表循环取值 for x in list1: print(x) list2 = {'va1': 'test1', 'va2': 'test2', 'va3': 'test3'} #字典循环取值 for y in list2: print(list2[y]) #默认取出来的是键
list1 = ['a', 'b', 'c', 'd'] #while取值 列表 比for循环麻烦不少 a = 0 while a < 4: print(list1[a]) a += 1
while是条件循环 知足条件会一直循环 不知足就跳出循环
for是取值循环,循环次数取决于后面循环体的字符个数
wel = "hello,world" for i in wel: print(i) #打印字符串的时候 空格 标点 也是一个字符
h
e
l
l
o
,
w
o
r
l
d
当咱们循环不少次的时候 ,后面单独写循环体的话 循环体会很是的长,python提供了range的变量,方便前面使用取值
一下为python2.7演示
在python2中使用 range 生成的列表就是一个列表,能够直接查看,可是若是列表很大,就会占用不少内存空间
range(10) #循环几回就写几 从零开始
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1,9) # 不会取到9
[1, 2, 3, 4, 5, 6, 7, 8]
range(1,9,3) # 3为步长 也就是上一个值+多少是下一个值 默认是1
[1, 4, 7] #1 1+3=4 4+3=7
在python3里对range作了优化,若是申请一个range(10),python3给你的是一个能够生成range(10)的功能,而不是一个列表,这样对内存进行了优化,随取随生成。
range(10)
range(0, 10)
range(1,10,2)
range(1, 10, 2)
name = 'alin' pwd = '12345' for i in range(3): input_name = input("请输入有用户名:") input_passwd = input("请输入密码:") if input_name == name and input_passwd == pwd: print("帐户密码正确登录成功") break else: print("用户或密码错误超过三次已退出循环")
请输入有用户名:alin
请输入密码:12345
帐户密码正确登录成功
循环三次后登出 并打印 用户或密码错误超过三次已退出循环
for+break
for+else
与while一致 能够参考上面
for i in range(3): print('第一层循环', i)#外循环一次 内循环所有循环 for j in range(3): print('第二层循环', j)
第一层循环 0
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
第一层循环 1
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
第一层循环 2
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
for i in range(3): if i == 2: continue print('第一层循环', i) for j in range(3): print('阿里巴巴是个快乐的青年', j)
第一层循环 0
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
第一层循环 1
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
终止for循环 用break
for i in range(3): if i == 2: break print('第一层循环', i) for j in range(3): print('阿里巴巴是个快乐的青年', j)
第一层循环 0
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
第一层循环 1
阿里巴巴是个快乐的青年 0
阿里巴巴是个快乐的青年 1
阿里巴巴是个快乐的青年 2
关于print
print('阿里巴巴') print('阿里', '巴巴') # ,在print中至关于空格的做用 print('阿里') #print 默认自带换行符\n 是隐藏看不到的 print('巴巴') print('阿里\n') # 当咱们在原有换行符的基础上再加一个换行符,就多出来一行空格 print('巴巴') print('阿里', end='') #end='' 就等于默认换行符为空 这样就不回换行了 print('巴巴', end='') print('阿里', end='&&') # 换行符改成&& print('巴巴', end='&&')
阿里巴巴
阿里 巴巴
阿里
巴巴
阿里
巴巴 阿里巴巴阿里&&巴巴&&