6-python 流程控制[Python常见问题]

python 流程控制

程序的流程分为三类 顺序结构 从上到下依次执行 分支结构(通过if 判断走哪条分支结构) 循环结构(while 与for)

python分支结构

分支结构就是依据不同的判断条件,根据条件的真假,选择不同的分支结构去执行

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("也不咋地")

你很优秀呀

改良一下代码 通过用户的input 自动判断

a = int(input("请输出你的成绩:")) # 因为用户输入的是str类型 无法做大小对比用int()转换为整型
if a > 80:
    print("你很优秀呀")
else:
    print("也不咋地")

请输出你的成绩:34
也不咋地

多个条件判断

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 登陆成功

python循环结构

循环结构就是 重复执行某个代码块 知道不满足条件后跳出,也就是那些重复性质的工作

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
账户密码正确登陆成功

账户密码正确登陆成功

…….

上面这段代码是一个死循环代码 问题点有两个

  1. 条件为True while没有推出 会一直执行循环下去,(具体循环什么那?)

  2. 由于用户输入的name passwd 在while循环外面 当我们输入一次后,后面的判断不需要我们再次输入 如果输入正确 页面打印 账户密码正确登陆成功 后,再次判断不需要用户再次输入,

    所以还会输出 账户密码正确登陆成功 这里会一直判断一直输出这句话

    如果输入错误 页面会也会一直打印 用户或密码错误

    这种需要用户I/0的死循环不会造成效率问题

    while True:  # 这种没有i/o 纯计算的死循环会把计算资源耗尽,带来致命的效率问题 
    	1=2=3=4  # while 1 比while True 效率快一些 
    

    修改代码

    退出循环的方式

    1. 把 while 的条件改为False 改完后还会循环一次 下次才能退出

    2. 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循环

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 默认自带换行符
  是隐藏看不到的
print("巴巴")

print("阿里
") # 当我们在原有换行符的基础上再加一个换行符,就多出来一行空格
print("巴巴")

print("阿里", end="") #end="" 就等于默认换行符为空  这样就不回换行了
print("巴巴", end="")

print("阿里", end="&&") # 换行符改为&&
print("巴巴", end="&&")

阿里巴巴
阿里 巴巴
阿里
巴巴
阿里

巴巴
阿里巴巴阿里&&巴巴&&

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 6-python 流程控制