3.2.1 数值运算符

3.2.1 数值运算符

数值运算符是一类对数值型操作数有效的运算符。按照不同的功能,其又可以分成算术运算符、赋值运算符、比较运算符、逻辑运算符、成员运算符等。

1.算术运算符

(1)一元操作符

以x=2,y=9为例,对以下算术运算符进行说明。一元操作符如表3-1所示。

表3-1 一元操作符

(2)二元操作符

二元操作符如表3-2所示。

表3-2 二元操作符

Python中的算术运算符既支持对相同类型的数值进行运算,也支持对不同类型的数值进行混合运算。在混合运算时,Python会强制将数值进行临时类型转换。遵循的原则是将简单的数据类型转换为相对复杂的那一种数据类型。

布尔类型进行算术运算时,会将值视为0或1。

整型与浮点型进行混合运算时,会将整型转换为浮点型。

其他类型与复数型运算时,会将其他类型转换为复数型。

【案例3-2】 时间转换。

给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间。<H>表示小时,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出“0:0:0”;若t=3661,则应输出“1∶1∶1”。

案例分析:

输入的数字为一个总秒数,需要将总秒数拆成几小时几分钟几秒,可根据1小时=60分钟,1分钟=60秒的规则进行拆分。

·输入:只有一行,是一个整数t(0<=t<=86399),如5436。

·输出:只有一行,是以“<H>:<M>:<S>”的格式所表示的时间,不包括引号,如1:30:36。

·解题思路:给定的数字t是一个总秒数,所以应该是t=s+m*60+h*60*60。反推过来则是:小时h=t//3600,余数是剩下的s+m*60,用余数继续整除60得到分钟,m=余数//60,余数则为秒s。

可以按照这个顺序进行时间转换:整除→取余→整除→取余。

代码实现:

2.赋值运算符

“=”为赋值运算符。案例3-1中出现的“fish=(1+0.01)**3”就是一个赋值语句,其作用是将一个表达式或对象赋给等号左边的变量。所有的运算符都可以与“=”组合起来形成一个赋值语句,包括在二元操作中,如“+=”。

3.比较运算符

比较运算符的作用是比较符号左右两边的操作数,运算结果是一个布尔值。常用的比较运算符如表3-3所示。表3-3以x=2,y=9为例,对比较运算符进行说明。

表3-3 比较运算符

【案例3-3】 猜数游戏。

程序中给出一个固定的数,用户通过键盘输入一个数,如果这个数与程序给出的数相同,则输出“恭喜你猜对了!”;如果比程序给出的数大,则输出“太大了!”;如果比程序给出的数小,则输出“太小了!”。

案例分析:

·输入:用户猜的数。

·处理:将用户猜的数与程序给出的数进行大小比较,可使用多分支结构来进行判断。

·输出:根据比较结果的不同,输出不同的结果。

运行结果:

4.逻辑运算符

逻辑运算符可以把多个条件表达式连接起来,形成更为复杂的条件,如表3-4所示。

表3-4 逻辑运算符

【案例3-4】 剪刀石头布游戏。

小明和小红想玩剪刀石头布游戏。在这个游戏中,两个人同时说“剪刀”“石头”或“布”,压过另一方的为胜者。规则是:“布”胜过“石头”,“石头”胜过“剪刀”,“剪刀”胜过“布”。

案例分析:

通过输入两人的选择,程序自己判断输赢,并输出相应的结果。

·输入:两个数分别代表小明和小红的选择,范围为{0,1,2},用逗号隔开。“0”表示石头,“1”表示布,“2”表示剪刀。这两个数分别表示两个人所选的物品,如0,2,则表示小明出石头,小红出剪刀。

·输出:如果前者赢,输出“小明胜”;如果后者赢,输出“小红胜”;如果是平局,输出“平局”。

代码实现:

【案例3-5】 闰年的判断。

从生活常识中我们了解到,如果一个年份数字能被4整除但是不能被100整除,或者这个年份的数字能被400整除,那么这一年是闰年,否则是平年。编写程序实现输入一个年份,判断它是否是闰年

案例分析:

·输入:需要判断的年份。

·处理:第一种情况是能被4整除但是不能被100整除,这两个条件需要同时成立,可以用逻辑运算符and将两个条件表达式连接;第二种情况是能被400整除。这两种情况只要满足其中的一个,指定年份就是闰年,两种情况可以用逻辑运算符or来连接。

·输出:输出当前的判断结果。

代码实现:

运行结果:

再次运行,输入年份2200,运行结果如下:

5.成员运算符

成员运算符用于判断左操作数是否存在于右侧的序列中。序列可以是字符串、列表、字典等。成员运算符如表3-5所示。

表3-5 成员运算符

【案例3-6】 “三天打鱼,两天晒网”周末版。

一年365天,一周5个工作日,每天都努力打鱼,进步1%。

一年365天,一周2个休息日,每天都休息晒网,退步1%。

初始力量为1,按这种生活方式,一年后的力量如何呢?

案例分析:

如何确定一周中的5个工作日,2个休息日?

一周7天可以用天数对7取余,结果为0~6,设其中0和6相当于周六、周日,即休息日,转换为表达式则是,取余运算结果在[0,6]这些值中的天数就是休息日。

运行结果:

一年后的力量为:4.63