python流程控制

目录
  • 1. 布尔逻辑
    • 1.1 条件控制语句-if
    • 1.2 if/else 语句
    • 1.3 if/elif 语句
  • 2 循环控制语句
    • 2.1 循环控制之for
    • 2.2 循环控制之while
  • 3 for vs while
    • 3.1 对输入的数字求和
    • 3.2 未知个数字的求和
    • 3.3 阶乘计算

前言:

经过简单的了解python基本语法和使用后,发现其都是一些顺序执行语句,也就是依次执行,没有任何的分支,循环,也不会返回到以前的执行语句-流程控制。在实际使用中,当然不可避免使用到流程控制语句,但其都要由逻辑表达式进行控制,因此先行介绍一下布尔逻辑。

1. 布尔逻辑

什么是布尔逻辑?

简单来讲,布尔逻辑就是操作真值。相比大多数编程语言一样,Python也使用布尔逻辑来做决策判断,使用True和False表示。一般经常使用的有4个布尔逻辑运算符,not、and、or、==。在Python语言的使用中,几乎所有判断决策都可以使用这四个逻辑运算符表示。首先我们计算布尔逻辑可能产生的值,假设a,b两个变量,那么对于它们来讲就有四个非真即假的组合,如下表:F表示FALSE,T表示TRUE


a


b


a==b


a!=b


a and b


a or b


not b


F


F


T


F


F


F


T


F


T


F


T


F


T


T


T


F


F


T


F


T


F


T


T


T


F


T


T


F

通过代码直观感受下布尔逻辑计算的结果:

==(逻辑相等), 当 a 和 b 包含的真 值相同,即都为 True 或都为 False 时,表达 式 a==b 的结果才为 True

!= (逻辑不等)

and(逻辑与), 仅当a和b都为 True 时,布尔表达式的 结果才为 True,而在其他情况下都为 False

or(逻辑或), 仅当a和b至少有一个为 True 时,布尔表达式 a or b 才为 True

not(逻辑非),不真即为假,不假即为真

有计算的地方,就会涉及到计算的优先级,对于布尔运算的优先级,规则如下

优先级由高到低:

a==ba != bnot aa and ba or b

举个例子: not True and False or True,执行结果如下图True。可以看到其执行顺序为not True,在计算(not Ture) and False,最后是or,那么我们来简化下,这个求值结果是不是就是计算 False and False or True 。这也算是优化的一小步!当然,我们根据上面的表在考虑一下:and的优先级高于or,故而计算False and False 等价于 False。那么最后的表达式也就是计算 False or True。

我们随机在上一个表达式中添加括号,以图查看括号对布尔表达式计算的影响。同时,当布尔逻辑表达式用于循环语句或者if条件语句时,也会经常遇到包含括号的表达式。如下图:

所以,当需要使用比较复杂的布尔逻辑表达式的时候,需要特别注意括号的使用!

  • 了解了布尔逻辑的规则,Python同其它语言一样,使用了一定的方法,提高了布尔表达式的计算速度,这个方法被称为:短路求值。
  • 有兴趣的话可以自行深入了解下实现原理

运算规则


运算结果


a or b


如果 a 为 False,结果为 b,否则结果为 a


a and b


如果 a 为 False,结果为 a,否则结果为 b

这个逻辑表达式是Python使用者经常用到的,直观来讲,以 True or Any 为例,不论这个Any为什么值,其表达式结果都是True。同理,False and Any 的结果为False。但切记,逻辑好用的同时也会对代码产生可读性不好的体验感,可以用下面提到的if条件语句来实现运算规则体验一下!

1.1 条件控制语句-if

if-条件控制语句,它的作用是使得代码程序在执行的时候按照一定的条件进行决策改变。对于文本处理、脚本开发、网站开发、数据科学等各个方向的研究实现,几乎都会使用到if语句。

1.2 if/else 语句

假设有个简单的小需求:开机需要用户输入用户名和密码,如果正确则让其登录,如果不正确告知密码不正确。

if __name__ == "__main__":

    while True:
        scan_user = input('please input your name: ')
        scan_pass = input('please input your passwd: ')
        if scan_pass == 'if/else':
            print('Logging on now!')
        else:
            print('your passwd is incorrect!!')
        print('我不在if/else语句中!')

执行结果:

可以看到,如果变量scan_pass指向的字符串为"if/else",就会显示登录成功,如果不是,变量为任何值都会提示密码错误。

由此,我们来画一个if/else的基本语句结构:

在Python的使用中,通常会将 : 用作 if 语句头、循环头和函数头的结束标记。并且,其中的代码块可以包含任意数量的Python语句和其它if语句。在Python编程中,同样需要缩进代码块,不过与其它语言为了美观相比,Python必须使用缩进来表示一段代码块的所属。如上面那段示例的最后一行代码,并不在else语句中。

1.3 if/elif 语句

if/elif 语句是if/else语句的扩充,很多逻辑的实现不会仅仅只包含两个条件,它可能包含多个条件。比如某商场设定的一些优惠条件:满200打八折,满400打六折,满800超出400的部分打五折等等。

这样的代码实现如下:

if __name__ == "__main__":

    while True:
        consumer = int(input('请输入您的消费金额:'))
        money = 0
        if 200 <= consumer < 400:
            money = consumer * 0.8
            print('您的消费金额是:' + str(money))
        elif 400 <= consumer < 800:
            money = consumer * 0.6
            print('您的消费金额是:' + str(money))
        elif consumer >= 800:
            money = 400 * 0.6 + (consumer - 400) * 0.5
            print('您的消费金额是:' + str(money))

当输入消费金额之后,程序进入if/elif 语句,按照指定顺序依次进行判断,首先对消费金额进行大于200并小于400的判断,然后计算出此次消费金额,跳出语句,以此类推。需要注意的是: elif 是 else if 的缩写,编写时可以随意使用,但是每个代码块的缩进必须相同。

if/else 语句还有一个比较简单的写法,是一种有人喜欢有人不喜欢的写法。

通常如下:主要看response那一行代码,这行代码就等价于下面的if/else代码块。

if __name__ == "__main__":

    color = input('请问您最喜欢什么颜色?')
    response = 'blue' if color == 'red' else 'black'
    print(response)
if __name__ == "__main__":

    color = input('请问您最喜欢什么颜色?')
    if color == 'red':
        like = 'blue'
    else:
        like = 'black'

条件表达式通常比等价的 if/else 语句简短,但并非总是与 if/else 语句一样灵活和易于理解。一般而言,仅当条件表达式可让代码更简单时才会使用。

2 循环控制语句

上面的条件控制主要决策执行哪一段代码块,在编写代码时也会涉及到重复的执行某一段代码,这时就会用到循环控制语句。在每种语言的使用中,通常会用到的就是for循环和while循环两种循环控制语句。此处加个小说明:无论老师讲课还是日常使用中,经常会用到变量i,因为它是index的缩写。当开始使用循环语句的时候, 通常将 j 和 k 用作其他循环变量名。

2.1 循环控制之for

假设我们需要在屏幕上依次打印数字0~9,此时我们可以使用循环语句实现,如下:for循环的第1行被称为for循环头。for 循环总是以关键字for打头,接下来是循环变量(这里为 i),然后是关键字 in。关键字 in 后面通常(但并非总是)是 range(n) 和结束符号 : 。for 循环重复执行循环体(循环头后面的语句块)n 次。

if __name__ == "__main__":

    for i in range(10):
        print(i)

每次执行循环时,循环变量都被设置为下一个值。默认情况下,初始值为 0,并逐步递增到 n-1(而不是 n)。

如果要修改循环的初始值,可在 range 中添加初始值:

if __name__ == "__main__":

    for i in range(1,10):
        print(i)
    #或者给变量i+1
 for i in range(10):
   print(i + 1)

如果需要按照相反的顺序打印,则可以按照以下两个方法:

if __name__ == "__main__":

    for i in range(10, 0, -1):
        print(i)

    for i in range(10):
    print(10 - i)

for循环当然不止运用于循环打印,在实际编程中,根据不同的需要,其可以适用于任何类型的迭代中。例如,使用for循环读取文本的行数据或者向文本中写入数据等等。

2.2 循环控制之while

对于while循环,在本人的使用中,对比for,感受到for循环更容易使用,但其却没有while循环的灵活性。同样,我们循环打印一些数字:

if __name__ == "__main__":

    i = 0
    while i < 10:
        print(i)
        i = i + 1

该代码与for循环的执行结果是一样的,但是直观来看,while循环的代码块要稍微复杂一些。while 循环本身以关键字 while 打头,这 一行被称为 while 循环头,而它后面缩进的代码被称为 while 循环体。以这个例子我们画一个while循环的执行流程图,

如下:

可以总结一下, while 循环的控制流程:

1.Python 检查循环条件为 True 还是 False(就是之前所阐述的布尔表达式),

  • 如 果为 True,就执行循环体;
  • 如果为 False,就跳过循环体(即跳出循环)并执行后面的语句。

2. 在条件为 True 并执行循环体后,Python 再次检查条件。只要循环条件为 True,Python 就不断执行循环体,直到跳出。

示例程序的第 1 行为 i = 0,在循环语境下,i=0被称为初始化语句。与 for 循环那样自动初始化循环变量不同,由编程者负责给 while 循环使用的变量指定初始值。而循环体的最后一行为 i = i + 1,随着循环的进行,i 的值不断递增,确保循环终将终止。在 while 循环中,这一行被称为递增语句,在本例中作用是让循环变量进行递增。

这样看来,for循环不需要编程者去定义初始化语句和递增语句,但是在开发中,使用者通常会发现这些语句一旦不注意则会导致bug出现,这也是为什么说while循环要比for循环更加灵活。

while循环在使用测试时,通常还有一个特性便是无线循环执行,实现只需要一行代码while true,只要使用,那么其循环体便会持续执行下去。在实际生产中,最好使用for循环来代替这种用法!后续也会阐述一些跳出循环的语句来避免。

3 for vs while

使用三个简单的小例子来看下for循环和while循环是如何解决相同的问题,同时体会一下二者的不同,这可以让我们更好的应用在实际的编程中去。

3.1 对输入的数字求和

本案例输入一些数字,然后求出这些数字的总和。

for循环实现:

if __name__ == "__main__":

    num = int(input('需要计算多少个数字:'))
    sum = 0
    for i in range(num):
        n = input('输入第' + str(i + 1) + '个数字:')
        sum = sum + int(n)
    print('输入的数字总和为:' + str(sum))

while循环实现:

    num = int(input('需要计算多少个数字:'))
    sum = 0
    i = 1
    while i <= num:
        n = input('输入第' + str(i + 1) + '个数字:')
        sum = sum + int(n)
        i = i + 1
    print('输入的数字总和为:' + str(sum))

二者实现的结果如下:

案例中的程序都是将输入的数字固定在整数,如果用户输入的是浮点数,调用 int(s) 时将会报错。当然,要支持用户输入浮点数很容易, 只需将int(s)改为float(s)即可。

3.2 未知个数字的求和

这个案例需要注意,上面的案例无论使用for循环或者while循环都可以实现需求,但是这个案例可以体验一下for循环无法处理,但是while循环适用的情况。需求:假设输入一系列数字,同样计算总和,但是并不知道会输入多少个数字,并且在输入结束时,我们以done为标识。

if __name__ == "__main__":

    num = input('输入完成标识(or "done"):')
    sum = 0
    while num != 'done':
        i = int(num)
        sum = sum + i
        num = input('输入完成标识(or "done"):')
    print('输入的数字总和为:' + str(sum))

结果示例1:

 

结果示例2:

试想一下,我们不知道会输入多少个数字,而是直到输入标识字符才会计算求和。这个代码块预先并不知道循环体执行多少次。

注意代码中的一些地方:

  • 1. 在循环体内,语句的排列顺序至关重要。如果循环条件为 True,就说明 num 不是 'done',所以假定它是一个整数。 因此,我们可以将它转换为整数,将其与总和相加。
  • 2. 必须在两个地方调用 input:循环前面及循环体内,因为循环条件判断输入是数字还是 'done'。
  • 3. 不再需要计数器变量 i。在上一个计算总和的示例中,i 用于记录输入了多少个数字。在日常使用中,程序包含的变量越少,越容易理解、调试和扩展。

3.3 阶乘计算

最后在体验一把二者都可以使用的情况:计算数字的阶乘,即1*2*3*4*...*n

if __name__ == "__main__":

    num = int(input('输入一个大于0的整数: '))
    k = 1;
    for i in range(2,num+1):
        k = k * i
    print(str(num) + '的阶乘值:' + str(k))

    num = int(input('输入一个大于0的整数: '))
    k = 1;
    i = 2;
    while i<=num:
        k = k * i;
        i = i + 1
    print(str(num) + '的阶乘值:' + str(k))

由于python对整数的最大取值没有限制,所以可以使用python来计算很大的阶乘值。

到此这篇关于python流程控制的文章就介绍到这了,更多相关python流程控制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Python流程控制语句

    流程控制 流程:代码执行的过程 控制:对代码执行过程的把控 三大结构 顺序结构:代码默认从上到下,依次执行 分支结构:单项分支,双向分支,多项分支,巢状分支 循环结构:while循环和for循环 单项分支 语句: if 条件表达式:     code1     code2 当条件表达式成立时,返回True,执行对应的代码块 job = "programmer" if job == "programmer": print("钱多") print(&

  • Python流程控制常用工具详解

    在我们的工作中,我们使用ddagent ver.5作为收集工具,收集和报告托管服务器的性能指标,并对ddagent进行一定程度的定制.经过多次功能迭代,发现一批在线运行时间长的托管服务器占用了太多内存.分析问题机器上进程树中每个节点的占用情况,可以看出ddagent集合进程的内存占用仍然很高. 我们将学习最基本的流程控制工具,比如 if 条件判断for 循环while 循环 作为保证业务系统稳定运行的监控组件,存在内存泄漏,这自然是非常严重的,所以我们开始了我们的"故障排除之旅". i

  • Python中的流程控制详解

    流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样的地方. while语句 python中的while语句和其他语言没有什么不一样,我使用while语句来编写一个斐波拉赫数列: In [56]: while x < 10 : ...: print(x) ...: x, y = y, x+y ...: 0 1 1 2 3 5 8 if 语句 python中的 if 可以和 elif 或者 else 配合使用: >>> x = int

  • Python流程控制语句的深入讲解

    1.程序结构 计算机在解决问题时,分别是顺序执行所有语句.选择执行部分语句.循环执行部分语句,分别是:顺序结构.选择结构.循环结构.如下图: 2.选择语句 2.1最简单的if语句 Python使用保留字if来组成选择语句,其格式如下: if 表达式: 代码块 表达式可以是一个单纯的布尔值或者变量,也可以是比较表达式或者逻辑表达式,如果表达式值为真,则执行"代码块":如果值为假,就跳过"代码块",执行后面语句,如图 注:1.在Python中,当表达式的值为非零的数或者

  • Python 流程控制实例代码

    首先,介绍if-else条件语句.if语句是用来根据表达式的真假来有选择的执行特定的程序块,控制程序的流程.用法同java等语言.对于else if,有一个elif的简写方式. 例如: 复制代码 代码如下: if x > 3: print("greater") elif x == 3: print("eq") else: print("small") 接下来介绍while语句.while语句的作用是在条件表达式为真时,重复执行特定的程序块.

  • 浅析Python基础-流程控制

    Python编程语言的作用非常强大,而且其应用方便的特点也对开发人员起到了非常大的作用.在这里我们就可以先从Python流程控制关键字的相关概念开始了解,从而初步掌握这一语言的特点. Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议. 哪门语言都会有流程控制

  • python流程控制

    目录 1. 布尔逻辑 1.1 条件控制语句-if 1.2 if/else 语句 1.3 if/elif 语句 2 循环控制语句 2.1 循环控制之for 2.2 循环控制之while 3 for vs while 3.1 对输入的数字求和 3.2 未知个数字的求和 3.3 阶乘计算 前言: 经过简单的了解python基本语法和使用后,发现其都是一些顺序执行语句,也就是依次执行,没有任何的分支,循环,也不会返回到以前的执行语句-流程控制.在实际使用中,当然不可避免使用到流程控制语句,但其都要由逻辑

  • python流程控制详细介绍

    目录 1. 布尔逻辑 1.1 条件控制语句-if 1.2 if/else 语句 1.3 if/elif 语句 2 循环控制语句 2.1 循环控制之for 2.2 循环控制之while 3 for vs while 3.1 对输入的数字求和 3.2 未知个数字的求和 3.3 阶乘计算 前言: 经过简单的了解python基本语法和使用后,发现其都是一些顺序执行语句,也就是依次执行,没有任何的分支,循环,也不会返回到以前的执行语句-流程控制.在实际使用中,当然不可避免使用到流程控制语句,但其都要由逻辑

  • 一文了解Python 流程控制

    目录 while 循环 死循环与效率问题 结束循环的方式 方式一 将条件改成 False,等到下次循环在判断条件的的时候会生效 方式二 break,立即终止本层循环 while的循环嵌套和退出 Python 中有 while 和 for 两种循环机制,其中 while 循环是条件循环. while 循环 while 条件语句: // 条件为真,执行以下方法 functionsWhenConditionTrue() 简单的 for循环示例: count = 0 while count < 3: p

  • Python流程控制if条件选择与for循环

    目录 1.if条件选择 2.for循环 3.while循环 4.break 及 continue 1.if条件选择 # coding:utf-8 num = 23 if num>2: print("dayu") if num<2: print("xiaoyu") ## if else if num>10: print("D") else: print("A") ## if elif else if num &

  • Python流程控制 if else实现解析

    一.流程控制 假如把程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分岔口.当遇到分岔口时,你得判断哪条岔路是你要走的路,如果我们想让程序也能处理这样的判断,该怎么办?很简单,只需要在程序里预设一些条件判断语句,满足哪个条件就走哪条岔路,这个过程就叫流程控制. 几乎在每个编程语言中,都会有if...else...,可分为单分支,双分支,多分支. 二.单分支 if 条件: 满足条件后要执行的代码 三.双分支 if 条件: 满足条件后要执行的代码 else: 不满足if后面的条件就走这里

  • Python流程控制 while循环实现解析

    一.语法 while 条件: 执行代码 while就是当的意思,它指当其后面的条件成立,就执行while下面的代码. 例:写一个从0打印到10的程序 count = 0 while count <= 10: print('第%s次' % count) count += 1 如果要打印1~10之间的偶数怎么办呢? 那就得先搞清楚,怎么判断一个数字是偶数?能被2整除的就是偶数,但如何判断这个数是否能被2整除呢?简单,直接判断这个数除以2之后的余数是否为0就行了,这就用到了前面"Python之运

  • Python流程控制语句详解

    目录 1.if判断 1.1 if语句 1.2 else语句 1.3 elif语句 2.循环 2.1 while循环 2.2 for循环 2.3 break和continue语句 3.其他 1.if判断 1.1 if语句 if 表达式: 语句1 语句2 …… 1.“if”后的条件测试不止支持布尔型,也可以使用数字. 2.如果条件测试的内容是字符串,则只有字符串是空字符串时,条件测试的结果才为“False”. 3.不仅仅是字符串,条件测试中空列表.空元组.空字典也是“False”. 4.当if条件为

随机推荐