21.Python算术运算符及用法详解
算术运算符是处理四则运算的符号,在数字的处理中应用得最多。Python 支持所有的基本算术运算符,如表 1 所示。
运算符 | 说明 | 实例 | 结果 |
---|---|---|---|
+ | 加 | 12.45 + 15 | 27.45 |
- | 减 | 4.56 - 0.26 | 4.3 |
* | 乘 | 5 * 3.6 | 18.0 |
/ | 除 | 7 / 2 | 3.5 |
% | 取余,即返回除法的余数 | 7 % 2 | 1 |
// | 整除,返回商的整数部分 | 7 // 2 | 3 |
** | 幂,即返回 x 的 y 次方 | 2 ** 4 | 16,即 24 |
接下来将对表 1 中各个算术运算符的用法逐一讲解。
+ 加法运算符
例如如下代码:
- a = 5.2
- b = 3.1
- the_sum = a + b
- # sum的值为8.3
- print("the_sum的值为:", the_sum)
除此之外,“+”还可以作为字符串(包括后续要介绍的序列)的连接运算符。例如如下代码:
- s1 = 'Hello, '
- s2 = 'Charlie'
- # 使用+连接两个字符串
- print(s1 + s2)
- 减法运算符
例如如下代码:
- c = 5.2
- d = 3.1
- sub = c - d
- # sub的值为2.1
- print("sub的值为:", sub)
此外,“-”除了可以作为减法运算符之外,还可以作为求负的运算符。请看如下代码:
- # 定义变量x,其值为-5.0
- x = -5.0
- # 将x求负,其值变成5.0
- x = -x
- print(x)
但单目运算符“+”则不对操作数做任何改变,例如如下代码:
- # 定义变量y,其值为-5.0
- y = -5.0
- # y值依然是-5.0
- y = +y
- print(y)
*乘法运算符
例如如下代码:
- e = 5.2
- f = 3.1
- multiply = e * f
- # multiply的值为16.12
- print("multiply的值为:", multiply)
此外,“*”还可以作为字符串(包括后续要介绍的序列)的连接运算符,表示将 N 个字符串连接起来。例如如下代码:
- s3 = 'crazyit '
- # 使用*将5个字符串连接起来
- print(s3 * 5)
上面代码将会输出:
crazyit crazyit crazyit crazyit crazyit
/ 和 // 除法运算符
Python 的除法运算符有两个:“/”表示普通除法,使用它除出来的结果与平常数学计算的结果是相同的(即除不尽时,会产生小数部分);而“//”表示整除,使用它除出来的结果只有整数部分,小数部分将会被舍弃。
记住,在 Python 3.x 中,除法运算的结果都是浮点类型。
例如如下代码:
- print("19/4的结果是:", 19/4)
- print("19//4的结果是:", 19//4)
- aa = 5.2
- bb = 3.1
- # aa / bb的值将是1.67741935483871
- print("aa/bb的值是:", aa / bb)
- # aa // bb值将是1.0
- print("aa//bb的值是:", aa // bb)
此外,Python 不允许使用 0 作为除数,否则将会引发 ZeroDivisionError 错误。
在有些编程语言中,0 作为除数会得到无穷大,包括正无穷大或负无穷大。
对于 Python 2.x 而言,它只提供了一个“/”运算符,该运算符是 Python 3.x 中“/”和“//”的综合版。对于 Python 2.x 中的“/”而言,它既是整除运算符,也是非整除运算符。规则如下:
- 当两个操作数都是整数时,Python 2.x 中的“/”就是整除运算符。
- 当两个操作数有一个是浮点数(或两个都是浮点数)时,Python 2.x 中的“/”就是非整除运算符。
例如,在 Python 2.x 的交互式解释执行器中执行如下代码:
>>>print(5/2)
2
>>>print(5.0/2)
2.5
>>>print(5/2.0)
2.5
>>>print(5.0/2.0)
2.5
% 求余运算符
Python 不要求求余运算符的两个操作数都是整数,Python 的求余运算符完全支持对浮点数求余。求余运算的结果不一定总是整数,它是使用第一个操作数来除以第二个操作数,得到一个整除的结果后剩下的值就是余数。
由于求余运算也需要进行除法运算,因此求余运算的第二个操作数不能是 0,否则程序会报出 ZeroDivisionError 错误。
例如如下程序:
- print("5%3的值为:", 5 % 3) # 输出2
- print("5.2%3.1的值为:",5.2 % 3.1) # 输出2.1
- print("-5.2%-3.1的值为:", -5.2 % -3.1) # 输出-2.1
- print("5.2%-2.9的值为:", 5.2 % -2.9) # 输出-0.6
- print("5.2%-1.5的值为:", 5.2 % -1.5) # 输出-0.8
- print("-5.2%1.5的值为:", -5.2 % 1.5) # 输出0.8
- #print("5对0.0求余的结果是:", 5 % 0.0) # 导致错误
这里需要注意的一点是,使用 % 求余,如果除数(第二个操作数)是负数,那么取得的结果也一定是负数。因此,运行上面程序,可以看到如下输出结果:
5%3的值为: 2
5.2%3.1的值为: 2.1
-5.2%-3.1的值为: -2.1
5.2%-2.9的值为: -0.5999999999999996
5.2%-1.5的值为: -0.7999999999999998
-5.2%1.5的值为: 0.7999999999999998
前三个算式的运行结果比较简单,它们进行的都是很简单的求余计算。但 5.2 % -2.9 的结果有点奇怪,我们预计它为 -0.6,但实际输出的是 -0.5999999999999996。这里有两个问题:
- 第一个问题,为什么预计 5.2 % 2.9 的结果是 -0.6 呢?因为 Python 求余运算的逻辑是用被除数减去除数的 N 倍,此处的 N 是 -2,因此得到结果是 0.6。
- 第二个问题,为什么实际输出的是 -0.5999999999999996 呢?这是由浮点数的存储机制导致的。计算机底层的浮点数的存储机制并不是精确保存每一个浮点数的值,读者暂时不需要花太多的时间去理解浮点数的存储机制,只要知道浮点数在 Python 中可能产生精度丢失的问题就行。比如此处正常计算的结果应该是 -0.6,但实际计算出来的结果是一个非常接近 -0.6 的值。
** 乘方运算符
Python 支持使用“**”作为乘方运算符,这是一个使用非常方便的运算符。由于开方其实是乘方的逆运算,因此实际上使用“**”也可进行开方运算。例如如下代码:
21.Python算术运算符及用法详解的更多相关文章
- JS逗号运算符的用法详解
逗号运算符的用法详解 注意: 一.由于目前正在功读JavaScript技术,所以这里拿JavaScript为例.你可以自己在PHP中试试. 二.JavaScript语法比较复杂,因此拿JavaScri ...
- [转]使用python来操作redis用法详解
转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...
- Python Deque 模块使用详解,python中yield的用法详解
Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...
- Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: 'self'的问题解决
https://blog.csdn.net/songlh1234/article/details/83587086 下面总结一下self的用法详解,大家可以访问,可以针对平时踩过的坑更深入的了解下. ...
- python的转义字符及用法详解
在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符. Python3.7 的官方文档中列出的所支持的转义字符,如下表: 中文版: 注:\oyy 应该是 \0yy 另外 :\e 和 \0 ...
- 26.Python三目运算符(三元运算符)用法详解
Python 可通过 if 语句来实现三目运算符的功能,因此可以近似地把这种 if 语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: True_statements if expres ...
- python OptParse模块的用法详解
OptParse模块的简单介绍 Python 有两个内建的模块用于处理命令行参数: 一个是 getopt只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成 ...
- 使用python来操作redis用法详解
1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...
- python 对excel操作用法详解
在python中,对excel表格读,写,追加数据,用以下三个模块: 1.wlrd 读取excel表中的数据 2.xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存. 3.xl ...
随机推荐
- thymeleaf 模板使用 之 前台界面获取后台属性值
使用Thymeleaf模板时,如果需要在js中获取后台传值,那么需要用内联JS写法获取 [姿势很重要] 一.后台通过Model的addAttribute方法向前台传值 1.js获取后台属性值(--内联 ...
- centos配置发送邮件
邮件已经可以接收到了 CentOS下发送邮件有很多种方法,这里采用比较简单的mail客户端,配置第三方邮件服务商,例如:163.com 1.安装所用软件 yum install mailx sendm ...
- XVS 操作
1. xvs安装 rpm -i ***.rpm 2.获取license root@ubuntu:/usr/local/xvs# ./xvs -L .Host ID: 16b3d720584704 ...
- python 的面试题总汇
函数作用域; LEGB : L>E>G>B L : local函数内部作用域 E : enclosing函数内部与内嵌函数之间 G : global全局作用域 B : build-i ...
- 如何将编译后的文件打包成jar文件
如果需要修改像spring和dubbo中的jar包源码,修改后怎么打包呢? 如下: 1.win+r进入命令行: 2.找到需要打包的class文件: 3.jar -cvf [jar包的名字] [需要打包 ...
- Mac之常见问题
1. 在命令行下无法使用ll命令 需要设置命令的别名. 文件位置:-/.bash_profile source ~/.profile export PATH="/usr/local/opt/ ...
- ubuntu - 14.10,解决按照最新版Gnome 15.10后,经典Gnome桌面字体问题!
ubuntu14.10刚安装完毕,我首先按照了经典Gnome桌面,随后我发现ubuntu软件中心里面能找到的软件明显不如先前我安装过的ubuntu了,我觉得有可能是因为我以前安装的ubuntu14.1 ...
- 【死磕 Java 集合】— ConcurrentSkipListMap源码分析
转自:http://cmsblogs.com/?p=4773 [隐藏目录] 前情提要 简介 存储结构 源码分析 主要内部类 构造方法 添加元素 添加元素举例 删除元素 删除元素举例 查找元素 查找元素 ...
- centos 7 安装 Docker Engine-CentOS 社区版
获取Docker Engine-CentOS社区: https://docs.docker.com/install/linux/docker-ce/centos/ 1.操作系统要求 1.1 要安装 D ...
- deep_learning_Function_One-host参数
在很多机器学习任务中,特征并不总是连续值,而有可能是分类值.比如星期类型,有星期一.星期二.…….星期日,比如浏览器类型有["uses Firefox", "uses C ...