Python从菜鸟到高手(1):数字
本文是《Python从菜鸟到高手》一书的连载系列,该书由李宁老师编写。
本文主要内容:
1. 数字的基础知识
2. 大整数
3. 二进制、八进制和十六进制
4 数字的格式化输出
一、数字的基础知识
Python语言与其他编程语言一样,也支持四则运算(加、减、乘、除),以及圆括号运算符。在Python语言中,数字分为整数和浮点数。整数就是无小数部分的数,浮点数就是有小数部分的数。例如,下面的代码是标准的四则运算表达式。
2 + 4
4 * 5 + 20
5.3 / 7
(30 + 2) * 12
如果要计算两个数的除法,不管分子和分母是整数还是浮点数,使用除法运算符(/)的计算结果都是浮点数。例如1/2的计算结果是0.5,2/2的计算结果是1.0。要想让Python解释器执行整除操作,可以使用整除运算符,也就是两个斜杠(//)。使用整除运算符后,1 // 2的计算结果是0,2 // 2的结果是1。
整除运算符不仅能对整数执行整除操作,也能对浮点数执行整除操作,在执行整除操作时,分子分母只要有一个是浮点数,那么计算结果就是浮点数。例如,1.0 // 2的计算结果是0.0,2.0 // 2的结果是1.0。
除了四则运算符外,Python还提供了两个特殊的运算符:%(取余运算符)和**(幂运算符)。取余运算符用于对整数和浮点数执行取余操作。例如,5 % 2的计算结果是1,而5.0 % 2的计算结果是1.0。从这一点可以看出,%和//类似,只要分子分母有一个是浮点数,计算结果就是浮点数。
幂运算符用于计算一个数值的幂次方。例如,2 ** 3的计算结果是8,3.2 ** 2的计算结果是10.24。
到现在为止,一共介绍了8个运算符,它们是圆括号((…))加(+)、减(-)、乘(*)、除(/)、整除(//)、取余(%)和幂运算符(**)。其中减号(-)也可以用于负号(一元运算符),所以现在涉及到9个运算符。既然涉及到这么多运算符,那么就有一个优先级的问题,也就是说,同一个表达式中包含有多个不同的运算符,需要先计算优先级高的运算符,如果优先级相同个,那么就按从左向右的顺序执行。
这9个运算符的优先级顺序如下表所示。越靠前优先级越高,同一行的运算符的优先级相同。

【例1】下面的代码演示了Python语言中运算符的使用方法,在编写Python代码时,应该注意运算符的优先级问题。
print(2 + 4) # 运算结果:6
print(126 - 654) # 运算结果:-528
print(6 + 20 * 4) # 运算结果:86
print((20 + 54) * 30) # 运算结果:2220
print(1/2) # 运算结果:0.5
print(1//2) # 运算结果:0
print(3/2) # 运算结果:1.5
print(3//2) # 运算结果:1
print(4**3) # 运算结果:64
print(3 + 5 * -3 ** 4 - (-5)**2) # 运算结果:-427
# 用变量操作数值
x = 30
y = 50
k = 10.2
print(x + y * k) # 运算结果:540.0
程序运行结果如下图所示。

二、大整数
对于有符号32位整数来说,可表示的最大值是2147483647(2^31 -1),可表示的最小值是-2147483648(-2^31),如果超过这个范围,有符号32位整数就会溢出。不过在Python语言中,可以处理非常大的整数,并不受位数限制。例如,下面表达式的输出结果就超出了32位整数的范围。
print(2 ** 35) # 输出2的35次幂,输出结果是34359738368
让我们再换个更大的数,看看会不会溢出。
print(2**630 * 100000) # 2的630次幂再乘10万
上面这行代码的输出结果如下:
445550841564667501820426914619169074696604346410992180720624269326101090547722401025968047980212050759633038044296328838934443820446820117016861457004122479321483854917994624031530682836582400000
很显然,Python语言仍然可以正确处理2**630 * 100000的计算结果。因此,在Python语言中使用数字不需要担心溢出,因为Python语言可以处理非常大的数字,这也是为什么很多人使用Python语言进行科学计算和数据分析的主要原因之一。
三、 二进制、八进制和十六进制
Python语言可以表示二进制、八进制和十六进制数。表示这3个进制的数,必须以0开头,然后分别跟着表示不同进制的字母。表示二进制的字母是b,表示八进制的字母是o(这是英文字母中小写的o,不要和数字0搞混了),表示十六进制的字母是x。因此,二进制数的正确写法是0b110011,八进制数的正确写法是0o56432,十六进制数的正确写法是0xF765A。
除了这3种进制外,前面章节一直使用的是十进制。因此,Python语言一共可以表示4种进制:二进制、八进制、十进制和十六进制。Python语言提供了一些函数用于在这4种进制数之间进行转换。
如果是从其他进制转换到十进制,需要使用int函数,该函数有两个参数,含义如下:
1. 第1个参数:字符串类型,表示待转换的二进制、八进制或十六进制数。参数值只需要指定带转换的数即可,不需要使用前缀,如二进制直接指定11011,不需要指定0b11011。
2. 第2个参数:数值类型,表示第1个参数值的进制,例如,如果要将二进制转换为十进制,第2个参数值就是2。
int函数返回一个数值类型,表示转换后的十进制数。
下面的代码将二进制数110011转换为十进制数,并输出返回结果。
print(int("",2)) # 输出结果:51
如果要从十进制转换到其他进制,需要分别使用bin、oct和hex函数。bin函数用于将十进制数转换为二进制数;oct函数用于将十进制数转换为八进制数,hex函数用于将十进制数转换十六进制数。这3个函数都接收一个参数,就是待转换的十进制数。不过要注意,这3个函数的参数值也可以是二进制数、八进制数和十六进制数,也就是说,这3个函数可以在二进制、八进制、十进制和十六进制之间互转。
下面的代码将十进制数54321转换为十六进制数,并输出转换结果。
print(hex(54321)) # 输出结果:0xd431
【例2】下面的代码演示了Python语言中二进制、八进制、十进制和十六进制数之间的转换。
print(0b110011) # 输出二进制数
print(0o123) # 输出八进制数
print(0xF15) # 输出十六进制数
print(bin(12)) # 十进制转二进制,输出结果:0b1100
print(int("",2)) # 二进制转十进制,输出结果:22
print(int("0xF35AE",16)) # 十六进制转十进制,输出结果:996782
print(hex(54321)) # 十进制转十六进制,输出结果:0xd431
print(bin(0xF012E)) # 十六进制转二进制,输出结果:0b11110000000100101110
print(hex(0b1101101)) # 二进制转十六进制,输出结果:0x6d
print(oct(1234)) # 十进制转八进制,输出结果:0o2322
print(int("", 8)) # 八进制转十进制,输出结果:32090
程序运行结果如下图所示。

四、 数字的格式化输出
在输出数字时,有时需要对其进行格式化。例如,在输出12.34时,只希望保留小数点后1位数字,也就是12.3,或整数位按6位输出,不足前面补0,也就是000012.34。Python语言中提供了format函数用于对数字进行格式化。format函数有两个参数,含义如下:
1. 第1个参数:要格式化的数字。
2. 第2个参数:格式字符串。
format函数的返回值就是数字格式化后的字符串。
【例3】下面的代码演示了format函数在格式化数字方面的应用。
x = 1234.56789 # 小数点后保留两位数,输出结果:'1234.57' print(format(x, '0.2f')) # 数字在12个字符长度的区域内右对齐,并保留小数点后1位数字, # 输出结果:' 1234.6' print(format(x, '>12.1f')) # 数字在12个字符长度的区域内左对齐,并保留小数点后3位数字,紧接着输出20, # 输出结果:'1234.568 20' print(format(x, '<12.3f'), 20) # 数字在12个字符长度的区域内右对齐,并保留小数点后1位数字,数字前面补0, # 输出结果:'0000001234.6' print(format(x, '0>12.1f')) # 数字在12个字符长度的区域内左对齐,并保留小数点后1位数字,数字后面补0, # 输出结果:'1234.6000000' print(format(x, '0<12.1f')) # 数字在12个字符长度的区域内中心对齐,并保留小数点后2位数字,紧接着输出3, # 输出结果:' 1234.57 3' print(format(x, '^12.2f'),3) # 每千位用逗号(,)分隔,输出结果:1,234.56789 print(format(x, ',')) # 每千位用逗号(,)分隔,并保留小数点后2位数字,输出结果:1,234.57 print(format(x, ',.2f')) # 用科学计数法形式输出数字,输出结果:1.234568e+03 print(format(x, 'e')) # 用科学计数法形式输出数字,尾数保留小数点后2位数字,输出结果:1.23E+03 print(format(x, '0.2E'))
程序运行结果如下图所示。

请关注下面的公众号(宁哥教育)了解详细情况。

Python从菜鸟到高手(1):数字的更多相关文章
- Python从菜鸟到高手(5):数字
1 基础知识 Python语言与其他编程语言一样,也支持四则运算(加.减.乘.除),以及圆括号运算符.在Python语言中,数字分为整数和浮点数.整数就是无小数部分的数,浮点数就是有小数部分的数. ...
- 《Python从菜鸟到高手》已经出版,开始连载了,购买送视频课程
好消息,<Python从菜鸟到高手>已经出版!!! JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送2400分钟同步视频课程!500个案例,400道P ...
- Python从菜鸟到高手(3):声明变量
变量(variable)是Python语言中一个非常重要的概念.变量的主要作用就是为Python程序中的某个值起一个名字.类似于"张三"."李四"." ...
- Python从菜鸟到高手(6):获取用户输入、函数与注释
1. 获取用户输入 要编写一个有实际价值的程序,就需要与用户交互.当然,与用户交互有很多方法,例如,GUI(图形用户接口)就是一种非常好的与用户交互的方式,不过我们先不讨论GUI的交互方式,本节会 ...
- Python从菜鸟到高手(2):清空Python控制台
执行python命令会进入Python控制台.在Python控制台中可以用交互的方式执行Python语句.也就是执行一行Python语句,会立刻返回执行结果. 当Python控制台输入过多的Pyt ...
- Python从菜鸟到高手(7):字符串
1. 单引号字符串和转义符 字符串与数字一样,都是值,可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了 ...
- Python从菜鸟到高手(1):初识Python
1 Python简介 1.1 什么是Python Python是一种面向对象的解释型计算机程序设计语言,由荷兰人吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版 ...
- Python从菜鸟到高手(18):类与方法的私有化
1. 创建自己的类 学习面向对象的第一步,就是创建一个类.因为类是面向对象的基石.Python类和其他编程语言(Java.C#等)的类差不多,也需要使用class关键字.下面通过一个实际的例子来看一下 ...
- Python从菜鸟到高手(8):print函数、赋值与代码块
1.神奇的print函数 print函数相信读者一定对它不陌生,因为在前面的章节,几乎每个例子都使用了print函数,这个函数的功能就是在控制台输出文本.不过print在输出文本时还可以进行一些设 ...
随机推荐
- No bean named 'sessionFactory' is defined
1.错误描述 严重:Servlet service() for servlet default threw exception . org.springframework.beans.factory. ...
- BFS-九宫格重排(详解)
BFS将近两年没练过题了,今天重新回忆下以前刷的蓝桥杯题:九宫格重排 样例输入 //初始状态 //终点状态 样例输出 //最短步数 样例输入 //初始状态 //终点状态 样例输出 //最短步数 ...
- 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等(v5.8.8版)
TableGo v5.8.8版震撼发布,此次版本更新如下: 1.新增两个扩展字段,用于生成自定义模板时使用. 2.自定义模板新增模板目录,可以选择不同分类目录下的模 ...
- 已在Terminal安装了包,PyCharm却提示无法找到
想使用python的dpkt包解析pcap文件进行分析,已经按照提示在终端输入sudo apt install python-dpkt,并且显示安装成功. 但是回到PyCharm中依然报错,如图所示: ...
- 【Luogu1373】小a和uim之大逃离(动态规划)
[Luogu1373]小a和uim之大逃离(动态规划) 题面 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布 ...
- 【BZOJ2190】仪仗队(数论)
[BZOJ2190]仪仗队(数论) 题面 粘链接,题目中有图片 题解 对于题意,可以考虑 如果有\((i,j)\)能够被看见 那么,\((ki,kj)\)就一定不能看见 所以,如果一个点能够被看见,则 ...
- 【NOIP2015】子串(动态规划)
题目戳我 题解 很简单的一道题... 看来那时候还是我太菜了... 设f[i][j][k][0/1]表示在第一个串中的位置i,匹配到了位置j,一共分了k段,0/1表示上一个位置是否在某一段中 转移就很 ...
- 【HNOI2012】永无乡(splay,启发式合并)
题解 Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过 ...
- mongo分布式集群搭建手记
一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...
- 使用zxing生成解析二维码
1. 前言 随着移动互联网的发展,我们经常在火车票.汽车票.快餐店.电影院.团购网站以及移动支付等各个场景下见到二维码的应用,可见二维码以经渗透到人们生活的各个方面.条码.二维码以及RFID被人们应用 ...