二、运算符与程序流程控制
1、运算符
1.1 算术运算符
算术运算符用于组织整数类型和浮点类型的数据,有一元运算符和二元运算符之分。
一元算术运算符有两个:+(正号)和-(负号),例如:+a还是a,-a是对a的取反运算。
二元算术运算符如右表所示。
1.2 比较运算符
比较运算符用于比较两个表达式的大小,其结果是布尔类型的数据,即True或False。
比较运算符可用于任意类型的数据,但参与比较的两种类型的数据要相互兼容,即能进行隐式转换。例如:整数、浮点和布尔这三种类型是相互兼容的。
1.3 逻辑运算符
逻辑运算符用于对布尔型变量进行运算,其结果也是布尔型。
Python也采用了“短路”设计。“短路”指逻辑与”和“逻辑或”在计算过程中只要结果确定,则不再计算后面的表达式,从而提高效率,有点像电路短路。
1.4 位运算符
位运算是以二进位(bit)为单位进行运算的,操作数和结果都是整数类型的数据。
在按位取反运算中涉及原码、补码、反码运算,比较麻烦。我归纳总结了一个公式:~a=(a+1)X-1,如果a为十进制数178,则~a为十进制数-179;如果a为十进制数-20,则~a为十进制数19。怎么样,这个公式好用吧!
1.5 赋值运算符
赋值运算符只是一种简写,只有算术运算和位运算中的二元运算符才有对应的赋值运算符。
1.6 运算符的优先级
位运算中的难点是位反、右移和左移,位反过程比较复杂但可以使用我归纳的公式~a=(a+1)x-1推算出结果右移时高位采用符号位补位,符号位为1说明是负数,用1补位;符号位为0说明是正数,用0补位。
在位运算优先级中,优先级从高到低大体是:算术运算符位运算符→关系运算符→逻辑运算符→赋值运算符。
2、程序流程控制
2.1 分支语句
Python的设计理念是简单、刚好够用,所以在Python中没有switch语句,多分支功能是通过if-elif-else实现的。
2.1.1 if 结构
if结构的语法如下:
示例代码如下:
2.1.2 if-else 结构
if-else结构的语法如下:
示例代码如下:
2.1.3 if-elif-else 结构
if-elif-else结构的语法如下:
示例代码如下:
2.2 循环语句
Python支持两种循环语句:while和for。
2.2.1 while语句
在Python中只有while语句,没有do-while语句。while语句先判断循环条件,若条件为True则执行循环体。
一个简单的示例代码如下:
示例代码如下:
修改示例代码:
可以对比一下语句的运行结果:
2.2.2 for语句
基于简单的设计理念,在Python中只有一种for语句,即for-in语句,它可以遍历任意可迭代对象中的元素。
注:可迭代对象包括字符串、列表、元组、集合和字典等。
示例代码如下:
示例代码如下:
修改示例代码:
可以对比一下语句的运行结果:
2.3 跳转语句
跳转语句能够改变程序的执行顺序,包括break、continue和return。break和continue用于循环体中,而return用于函数中。本节先介绍break和continue语句,对于return语句,将在后面的章节中介绍。
2.3.1 break语句
break语句用于强行退出循环体,不再执行循环体中剩余的语句。
示例代码如下:
只循环了3次,item==3之后的数据不会被打印出来。
2.3.2 continue语句
continue语句用于结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。
示例代码如下:
注意:在输出结果中没有3。
2.4 动动手——计算水仙花数
下面编写代码,通过while循环计算出水仙花数。提示:水仙花数是一个三位数,三位数各位的立方之和等于三位数本身。
下页给出的只是参考代码,你可以自由发挥。计算出的水仙花数有4个:153、370、371和407。
计算结果:
本章的难点是循环语句(while和for)中的else语句。记住:在循环体正常结束时会执行else语句,如果发生中断,则不运行else语句。