前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-基础03-流程控制

Python-基础03-流程控制

作者头像
DriverZeng
发布2022-09-26 11:39:20
3900
发布2022-09-26 11:39:20
举报
文章被收录于专栏:Linux云计算及前后端开发

-曾老湿, 江湖人称曾老大。


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


流程控制之if..else

既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反映。


if判断

1.语法

代码语言:javascript
复制
if 条件:
    代码1
    代码2
    代码3
    ...

如果面前飘过一个生物,是否要上去表白?

代码语言:javascript
复制
#语法1
cls='human'
sex='female'
age=18

if cls == 'human' and sex == 'female' and age > 16 and age < 22:
    print('开始表白')

print('end...')

代码语言:javascript
复制
if 条件:
    代码1
    代码2
    代码3
    ...
else
    代码1
    代码2
    代码3
    ...
代码语言:javascript
复制
#语法2
cls='human'
sex='female'
age=38

if cls == 'human' and sex == 'female' and age > 16 and age < 22:
    print('开始表白')
else:
    print('阿姨好')

print('end...')

代码语言:javascript
复制
if 条件1:
    代码1
    代码2
    代码3
    ...
elif 条件2:
    代码1
    代码2
    代码3
    ...
elif 条件3:
    代码1
    代码2
    代码3
    ...
else:
    代码1
    代码2
    代码3
    ...
代码语言:javascript
复制
#语法3
cls='human'
sex='female'
age=60

if cls == 'human' and sex == 'female' and age > 16 and age < 22:
    print('开始表白')
elif age > 22 and age < 38:
    print('阿姨好')
else:
    print('大妈好')

print('end...')

小练习

接收用户输入的成绩, 如果:成绩>=90,那么:优秀 如果成绩>=80且<90,那么:良好 如果成绩>=70且<80,那么:普通 其他情况:很差


登录功能 接收用户的登录信息,判断用户是否可以登录


if的嵌套

代码语言:javascript
复制
cls='human'
sex='female'
age=60

if cls == 'human' and sex == 'female' and age > 16 and age < 22:
    print('开始表白')
elif age > 22 and age < 38:
    print('阿姨好')
else:
    print('大妈好')

print('end...')

那如果表白成功了呢?表白不成功呢?

代码语言:javascript
复制
cls='human'
sex='female'
age=18
is_success=False
if cls == 'human' and sex == 'female' and age > 16 and age < 22:
    print('开始表白')
    if is_success:
        print('在一起')
    else:
        print('逗你玩...')
elif age > 22 and age < 38:
    print('阿姨好')
else:
    print('大妈好')

print('end...')

开始表白
逗你玩...
end...

小练习

接收用户输入的信息: 如果:今天是Monday,那么:上班 如果:今天是Tuesday,那么:上班 如果:今天是Wednesday,那么:上班 如果:今天是Thursday,那么:上班 如果:今天是Friday,那么:上班 如果:今天是Saturday,那么:出去浪 如果:今天是Sunday,那么:出去浪

代码语言:javascript
复制
#方式一
today=input('>>: ')
if today == 'Monday':
    print('上班')
elif today == 'Tuesday':
    print('上班')
elif today == 'Wednesday':
    print('上班')
elif today == 'Thursday':
    print('上班')
elif today == 'Friday':
    print('上班')
elif today == 'Saturday':
    print('出去浪')
elif today == 'Sunday':
    print('出去浪')
else:
    print('''必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ''')

#方式二:
today=input('>>: ')

if today == 'Monday' or today == 'Tuesday' or today == 'Wednesday' or today == 'Thursday' or today == 'Friday':
    print('上班')
elif today == 'Saturday' or today == 'Sunday':
    print('出去浪')
else:
    print('''必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ''')

#方式三:
today=input('>>: ')
if today in ['Saturday','Sunday']:
    print('出去浪')
elif today in ['Monday','Tuesday','Wednesday','Thursday','Friday']:
    print('上班')
else:
    print('''必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ''')

流程控制while循环


if的嵌套

思考一个问题,如果我们根据之前学的if语句,写一个猜数字的游戏。

代码语言:javascript
复制
age_of_oldboy = 48

guess = int(input(">>:"))

if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")

elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")

else:
    print("恭喜你,猜对了...")

这么写的话,我们每一次猜错了,都需要重新执行,否则很麻烦,或者,难道我们需要把代码复制很多次吗? 即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。

那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦。

while语法,while循环又称为条件循环。

代码语言:javascript
复制
while 条件:    
    # 循环体
    # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
    # 如果条件为假,那么循环体不执行,循环终止
代码语言:javascript
复制
while True:
    1+1

while True:

    guess = int(input(">>:"))

    if guess > age_of_oldboy :
        print("猜的太大了,往小里试试...")

    elif guess < age_of_oldboy :
        print("猜的太小了,往大里试试...")

    else:
        print("恭喜你,猜对了...")

while的break

break的用法???

代码语言:javascript
复制
while True:
    print('1')
    print('2')
    break
    print('3')

登录程序:

代码语言:javascript
复制
user_db = 'zls'
pwd_db = '123'

while True:
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
    else:
        print('user or password error')

如果写出以上程序,那么即便是你输入了正确的用户名和密码,也不会退出循环,所以我们会使用break跳出本次循环。

代码语言:javascript
复制
user_db='zls'
pwd_db='123'

while True:
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
        break
    else:
        print('user or password error')
print('其他代码')

break的意思:终止掉当前层的循环,执行其他代码。


while的continue

代码语言:javascript
复制
n=1

while n<4:
    print(n)
    

n=1

while n<4:
    print(n)
    n+=1

#打印1-10
n=1

while n<=10:
    print(n)
    n+=1
    
#8不打印,如何使用continue?
n=1

while n<=10:
    if n == 8:
        continue
    print(n)
    n+=1

如果按照上面那样写,程序会一直处于死循环的状态,咱们可以通过画图来理解。

代码语言:javascript
复制
n=1

while n<=10:
    if n == 8:
        n+=1
        continue
    print(n)
    n+=1

ps:continue一定不要加到循环体最后一步执行的代码

思考:下面这段代码的continue有没有意义?

代码语言:javascript
复制
while True:
    if 条件1:
        code1
        code2
        code3
        continue
    elif 条件2:
        code1
        code2
        code3
        continue
    elif 条件3:
        code1
        code2
        code3
        continue
    else:
        code1
        code2
        code3
        continue

while的嵌套

语法:

代码语言:javascript
复制
tag=True 

while tag:

    ......

   while tag:

      ........

     while tag:

         tag=False

应用场景:和ATM机交互,我只需要输入用户名和密码么?输入用户名密码错误,会循环重新输入,那么如果我输入正确了就会跳出循环,那用户去取钱,输入完用户名和密码就没有其他操作了么?我不还得取钱么?难道说,我只是为了去ATM玩一下?那么我就需要其他的交互,其他的操作,其他操作我也需要判断有循环。

代码语言:javascript
复制
user_db = 'zls'
pwd_db = '123'

while True:
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
        while True:
            cmd = input('>>>>:')
            print('%s run.....' %cmd)
    else:
        print('user or password error')

如果用户想要退出

代码语言:javascript
复制
user_db = 'zls'
pwd_db = '123'

while True:
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
        while True:
            cmd = input('>>>>:')
            if cmd == 'quit':
                break
            print('%s run.....' %cmd)
    else:
        print('user or password error')

用户想要退出,那证明是取完钱了,按照上面的写法,为什么还需要让用户输入用户名和密码?退出所有程序,应该怎么写?

代码语言:javascript
复制
user_db = 'zls'
pwd_db = '123'

while True:
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
        while True:
            cmd = input('>>>>:')
            if cmd == 'quit':
                break
            print('%s run.....' %cmd)
        break
    else:
        print('user or password error')

以上写法,非常的low,有一个while就要写一个break,那我需要知道,我有几个while

代码语言:javascript
复制
user_db = 'zls'
pwd_db = '123'
tag = True

while tag:
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
        while tag:
            cmd = input('>>>>:')
            if cmd == 'quit':
                tag=False
                break
            print('%s run.....' %cmd)
    else:
        print('user or password error')


while循环其他知识点

代码语言:javascript
复制
while True:
    1+1

这种死循环,会导致CPU大量工作。

有没有这样对CPU工作量大的需求?区块链:GPU

while使用else

else的代码会在while循环没有被break打断的情况下运行。

代码语言:javascript
复制
n=1
while n<5:
    print(n)
    n+=1
else:
    print('else子代码')

代码语言:javascript
复制
n=1
while n<5:
    if n == 4:
        break
    print(n)
    n+=1
else:
    print('else子代码')

将用户登录出错的次数限制为3次

代码语言:javascript
复制
user_db = 'zls'
pwd_db = '123'

count=0
tag = True


while tag:
    if count == 3:
        print('您已输错%s次,账户已被封' %count)
        break
    inp_user=input('username>>>:')
    inp_password=input('password>>:')
    if inp_user == user_db and inp_password == pwd_db:
        print('login successful')
        while tag:
            cmd = input('>>>>:')
            if cmd == 'quit':
                tag=False
                break
            print('%s run.....' %cmd)
    else:
        print('user or password error')
        count+=1

练习题

代码语言:javascript
复制
#练习,要求如下:
    1 循环验证用户输入的用户名与密码
    2 认证通过后,运行用户重复执行命令
    3 当用户输入命令为quit时,则退出整个程序 
代码语言:javascript
复制
#1. 使用while循环输出1 2 3 4 5 6     8 9 10
#2. 求1-100的所有数的和
#3. 输出 1-100 内的所有奇数
#4. 输出 1-100 内的所有偶数
#5. 求1-2+3-4+5 ... 99的所有数的和
#6. 用户登陆(三次机会重试)
#7:猜年龄游戏
要求:
    允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
#8:猜年龄游戏升级版 
要求:
    允许用户最多尝试3次
    每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
    如何猜对了,就直接退出 

代码语言:javascript
复制
#题一
count=1
while count <= 10:
    if count == 7:
        count+=1
        continue
    print(count)
    count+=1
    

count=1
while count <= 10:
    if count != 7:
        print(count)
    count+=1
    

#题目二
res=0
count=1
while count <= 100:
    res+=count
    count+=1
print(res)

#题目三
count=1
while count <= 100:
    if count%2 != 0:
        print(count)
    count+=1
    
#题目四
count=1
while count <= 100:
    if count%2 == 0:
        print(count)
    count+=1
    
    
    
#题目五
res=0
count=1
while count <= 5:
    if count%2 == 0:
        res-=count
    else:
        res+=count
    count+=1
print(res)
    

#题目六
count=0
while count < 3:
    name=input('请输入用户名:')
    password=input('请输入密码:')
    if name == 'egon' and password == '123':
        print('login success')
        break
    else:
        print('用户名或者密码错误')
        count+=1

#题目七
age_of_oldboy=73

count=0
while count < 3:
    guess=int(input('>>: '))
    if guess == age_of_oldboy:
        print('you got it')
        break
    count+=1

#题目八
age_of_oldboy=73

count=0
while True:
    if count == 3:
        choice=input('继续(Y/N?)>>: ')
        if choice == 'Y' or choice == 'y':
            count=0
        else:
            break

    guess=int(input('>>: '))
    if guess == age_of_oldboy:
        print('you got it')
        break
    count+=1

流程控制for循环

for循环通常是用来做取值操作的,例如,列表取值。

代码语言:javascript
复制
#如果这么写,取值是一个重复的过程
names=['zls','bgx','oldboy','egon']

names[0]
names[1]
names[2]
names[3]

#使用while循环取值,i从何而来?
names=['zls','bgx','oldboy','egon']

i = 0
while i < 4:
    print(names[i])
    i+=1

#列表长度
names=['zls','bgx','oldboy','egon']

i = 0
while i < len(names):
    print(names[i])
    i+=1

这是在列表中,有索引的情况下,可以循环取值,但是如果是字典呢?如何用while取值?可以取,但是需要迭代器,非常的麻烦。

for循环:不依赖索引而取值,是一种通用的取值方式

代码语言:javascript
复制
dic={'x':1,'y':2,'z':3}

for item in dic:
    print(item)
    
#结果
x
y
z

取出key了那么我们也就知道了value该如何去取

代码语言:javascript
复制
dic={'x':1,'y':2,'z':3}

for item in dic:
    print(item)
    print(dic[item])

代码语言:javascript
复制
dic={'x':1,'y':2,'z':3}

for item in dic:
    print(item,dic[item])

如果使用同一种功能,反复使用,可以使用while循环,如果要做取值的事情,可以使用for循环。

for循环的次数,是由被循环对象包含值的个数决定的。 while循环的次数,是由条件决定的。

for循环按照索引取值 VS while循环按照索引取值

range

代码语言:javascript
复制
#在python2中
MacBook-Pro:~ driverzeng$ python
Python 2.7.10 (default, Aug 17 2018, 17:41:52)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> range(0,5)
[0, 1, 2, 3, 4]
>>> range(0,5,2)
[0, 2, 4]

#在python3中
MacBook-Pro:~ driverzeng$ python3
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> range(0,5)
range(0, 5)

代码语言:javascript
复制
#while取值
names=['zls','bgx','oldboy','egon']

i = 0
while i < len(names):
    print(names[i])
    i+=1

dic={'x':1,'y':2,'z':3}

#for取值
for i in range(0,4):
    print(names[i])

#使用列表长度
for i in range(0,len(names)):
    print(names[i])

for+break

代码语言:javascript
复制
for i in range(10):
    if i == 4:
        break
    print(i)

for+else

代码语言:javascript
复制
for i in range(10):
    print(i)
else:
    print('====》')

打印99乘法表:

代码语言:javascript
复制
for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ')
    print()

打印金字塔:

代码语言:javascript
复制
#分析
'''

             #max_level=5
    *        #current_level=1,空格数=4,*号数=1
   ***       #current_level=2,空格数=3,*号数=3
  *****      #current_level=3,空格数=2,*号数=5
 *******     #current_level=4,空格数=1,*号数=7
*********    #current_level=5,空格数=0,*号数=9

#数学表达式
空格数=max_level-current_level
*号数=2*current_level-1

'''

#实现
max_level=5
for current_level in range(1,max_level+1):
    for i in range(max_level-current_level):
        print(' ',end='') #在一行中连续打印多个空格
    for j in range(2*current_level-1):
        print('*',end='') #在一行中连续打印多个空格
    print()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 流程控制之if..else
  • 流程控制while循环
  • 流程控制for循环
相关产品与服务
运维安全中心(堡垒机)
腾讯云运维安全中心(堡垒机)(Operation and Maintenance Security Center (Bastion Host))可为您的 IT 资产提供代理访问以及智能操作审计服务,为客户构建一套完善的事前预防、事中监控、事后审计安全管理体系,助力企业顺利通过等保测评。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档