购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 Python中的逻辑语句

Python中的逻辑语句是代码的“骨骼”,只有通过条件的判定和自动迭代循环,程序才能完成重复的运算和复杂的操作。

2.5.1 条件判定if语句

扫一扫,看视频

在前面的章节中使用了很多次if语句,if语句的结构非常简单。在if结构中if后跟随第一个条件,如果条件仅有两个结果,直接使用if…else…结构即可。如果存在多种判定条件,则需要结合if…elif…else…结构,代码如下所示。

需要注意的是,在Python中不存在多条件判定的switch…case语句。虽然可以使用对象模拟实现自定义的switch…case语句,但是Python官方推荐使用if…elif…else…语句实现多条件判定。

例如,下面的逻辑判定代码,通过用户输入的用户名和密码进行身份识别,实现模拟登录。

运行结果如图2-28所示。

图2-28 模拟用户名和密码进行身份识别

需要明确的是,if…elif语句块是从上至下依次执行的,也就是说,当语句符合条件1,即使也符合之后的条件2,程序也只会执行条件1内的逻辑代码,如下所示。

上述代码运行时不会执行条件2中的逻辑语句,运行结果如图2-29所示。也就是说,在条件判定时,Python只会从上至下选择最上层的一个符合条件的代码块执行,执行完成后会直接退出条件判定逻辑。

图2-29 if条件语句中条件的判定顺序

2.5.2 while循环语句

扫一扫,看视频

在Python中while循环的基本格式如下所示。

当while后跟随的条件判定为True时,会自动执行while中的逻辑代码,如下方的代码实例。

运行结果如图2-30所示。

图2-30 while循环的运行结果

在上述的实例中使用了input()函数进行循环体的阻塞,每一次在出现提示后用户可以使用回车键进行下一次循环,在上述代码中并没有指定终止循环的条件或者语句,程序代码会自动运行下去,直到Python执行进程被终止,例如,可以使用Ctrl+C组合键终止Python程序的运行,手动退出循环。

while循环是一个使用非常频繁的循环语句,一般用于语句循环中不能明确地判定执行次数的循环,甚至在有些使用场景中并没有明确的终止条件,而是采用循环控制语句中的break关键字跳出循环。

2.5.3 for循环语句

for循环是Python中另一个常用的循环语句,和while循环不一样的是,for循环一般是执行有明确循环次数的。一般for循环的结构如下代码所示。

扫一扫,看视频

在其他的编程语言中一般采用的是定义一个变量i,并且对变量i进行自增自减的操作,并在每次操作后判定变量i和目标值是否符合条件,如果符合条件,则执行for循环语句中的代码;否则跳出循环。下面使用Java语句作为示例。

上述代码的运行结果如图2-31所示。

图2-31 Java中的for循环

在Python中for循环结合in关键字可以方便地实现对某一个对象的内部循环,如字符串中的字符或列表和字典中的元素,代码如下所示。

运行结果如图2-32所示。

图2-32 for循环结合in关键字

也就是说,在Python中,如果创建和Java中的for循环变量i变化相符的数列(或者其他可以迭代的对象),就可以实现和Java一样的循环。为了解决这个问题,Python提供了range()函数,可以方便地实现这个需求,代码如下所示。

上述代码的运行结果如图2-33所示。

图2-33 使用range()函数实现for循环

注意: range()函数生成的并不是一个数列,实际类型为Object类型。range()函数并不只能建立步进为1的数列,使用range()函数可以生成不同步进甚至是负数的可迭代对象。

提示: 一般而言,选择for循环或while循环并不影响具体代码的执行,所有的for循环也可以采用while循环进行改写,反之亦然。在选择循环语句时,一般没有明确的要求,当然,使用for…in循环对象的内部元素要比使用while循环方便得多。

2.5.4 循环语句中的控制语句

扫一扫,看视频

在循环控制体内存在三个循环控制语句,分别是pass、break和continue。其中,pass关键字不具有任何执行效果,只是为了保证循环体不为空,为了让代码符合阅读和编写的习惯。除了在循环体中,在判断语句与空函数中都需要使用pass这个不具有任何执行效果的关键字。如下if语句代码所示,if语句后没有任何可执行的内容,没有使用pass关键字,编译器会出现错误,如图2-34所示。

图2-34 没有使用pass关键字的错误

break和continue是循环体中具有执行效果的两个关键字。其中,break关键字可以直接跳出单层循环;continue关键字用于结束本次循环,直接进入下次循环,两者的区别可以通过以下的代码深入理解。

上述代码的运行结果如图2-35所示,可以看到当执行到i为3时,通过continue关键字跳过了i为3时的输出,当执行到i为6时,遇到了break关键字,直接跳出了for循环。

图2-35 循环控制语句的使用

注意: break关键字只能跳出一层循环。如果是两层循环的嵌套,需要在每一层都有一个break关键字分别执行,才能跳出嵌套的循环。

2.5.5 异常处理语句

扫一扫,看视频

Python提供了简单的异常处理语句,异常是指在程序运行的过程中出现的意外事件。例如,在读取数据库时建立的连接因为网络问题突然中断,或者程序运行时输入有误,从而使之后代码的执行产生bug。

在Python中如果没有指定异常处理语句,根据Python的运行机制会直接导致系统宕机,阻止代码向下继续运行,并通过日志或命令行报错。但是有一些异常没有必要使整个服务器停止。例如,网络问题导致资源获取失败,通过再次尝试连接即可,此时需要对异常进行捕捉和处理。

捕捉异常可以使用try…except语句,基本语句结构如下所示。

如以下代码,强行将一个数字类型和字符串类型进行了加和运算,产生了一个类型错误,此时执行过程会自动终止。运行结果如图2-36所示。

图2-36 类型错误

上述问题经常发生在忘记进行类型转换或用户输入有误的情况下,可以通过try…except语句进行捕获和处理,代码如下所示。

上述程序在错误发生时并不会导致整个程序停滞,而是错误被捕获处理后代码继续向下执行,结果如图2-37所示。

图2-37 错误处理结果

注意: Python是经过编译后才进入解释器中执行的,所以一些语法错误是无法捕获的,因为在编译时这些错误导致代码无法通过编译,try…except语句在代码执行的过程中才会起作用。

提示: 虽然完善的错误处理是非常重要的,但是在某些具体的应用情况下,错误导致的宕机并不是一件不好的事情。例如,在支付环节出现问题时,合理地停止服务也是一种及时的止损方式。 CQlRqtZWa646cuwq0G93sWoD1yxZoI8TbDLIKoRw0blveIlhFhwyAUOUeIwRQMvf

点击中间区域
呼出菜单
上一章
目录
下一章
×