Dave Python练习—数字
Dave Python练习—数字
#encoding=utf-8
#****************** 数字 *********************
#****************Part 1: 数字类型 **********
#数字提供了标量贮存和直接访问。它是不可更改类型,也就是说变更数字的值会生成新的
#对象。当然,这个过程无论对程序员还是对用户都是透明的,并不会影响软件的开发方式。
#Python 支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数。
#按照Python 的法则, 你无法真正删除一个数值对象, 你仅仅是不再使用它而已。如果你
#实际上想删除一个数值对象的引用, 使用 del 语句。 删除对象的引用之后,
#你就不能再使用这个引用(变量名), 除非你给它赋一个新值。如果试图使用一个已经被
#删除的对象引用, 会引发NameError 异常。
#a=3
#print(a,'id is:',id(a))
#-->3 id is: 506090080
#a+=1
#print(a,'id is:',id(a))
#--4 id is: 506090112
#这个例子验证了上面的说法,当修改一个对象时,是生成了一个新的对象,而不是对原有对象进行修改。
#del a
#print(a,'id is:',id(a))
#-->NameError: name 'a' is not defined
#****************Part 2: 整型 **********
#Python 有几种整数类型。布尔类型是只有两个值的整型。常规整型是绝大多数现代系统都
#能识别的整型。Python 也有长整数类型。然而,它表示的数值大小远超过C 语言的长整数 。
#布尔型
#Python 从版本 2.3 开始支持布尔类型。该类型的取值范围只有两个值,也就是布尔值True和布尔值False
#标准整数类型
#Python 的标准整数类型是最通用的数字类型。在大多数32 位机器上,标准整数类型的取
#值范围是-2^31 到2^31-1,也就是-2,147,483,648 到 2,147,483,647。如果在 64 位机器上使
#用 64 位编译器编译Python,那么在这个系统上的整数将是64 位。
#Python 标准整数类型等价于C 的(有符号)长整型。整数一般以十进制表示,但是Python也支持八进制或十六进制来表示整数。
#如果八进制整数以数字“0”开始, 十六进制整数则以“0x” 或“0X” 开始。
#长整型
#不要将Python 的长整型和C 或其它编译型语言的长整数类型混淆。那些语言的长整数典型的取值范围是32 位或64 位。
#Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关, 换句话说, Python 能轻松表达很大很大很大的整数。
#长整数类型是标准整数类型的超集, 当你的程序需要使用比标准整数类型更大的整数时,长整数类型就有用武之地了。
#在一个整数值后面加个L(大写或小写都可以),表示这个整数是长整数。这个整数可以是十进制,八进制, 或十六进制。
#核心风格:用大写字母 “L”表示长整数
#尽管 Python 也支持用小写字母 L 标记的长整型,但是我们郑重推荐您仅使用大写的 “L”,
#这样能有效避免数字1 和小写L 的混淆。Python 在显示长整数类型数值的时候总是用大写“L ”,目前整型和长整型正在逐渐缓慢的统一。
#**************** Part 3: 双精度浮点数 **********
#Python 中的浮点数类似C 语言中的double 类型, 是双精度浮点数,可以用直接的十进制或科学计数法表示。
#每个浮点数占8 个字节(64 比特),完全遵守IEEE754 号规范(52M/11E/1S),
#其中52 个比特用于表示底,11 个比特用于表示指数(可表示的范围大约是正负10 的308.25次方),
#剩下的一个比特表示符号。这看上去相当完美,然而,实际精度依赖于机器架构和创建Python 解释器的编译器。
#浮点数值通常都有一个小数点和一个可选的后缀e(大写或小写,表示科学计数法)。在e和指数之间可以用正(+)或负(-)表示指数的正负(正数的话可以省略符号)。
#下面是一些典型的浮点数值的例子:
#0.0 -777. 1.6 -5.555567119 96e3 * 1.0
#4.3e25 9.384e-23 -2.172818 float(12) 1.000000001
#3.1416 4.2E-10 -90. 6.022e23 -1.609E-19
#**************** Part 4:复数 **********
#一个实数和一个虚数的组合构成一个复数。一个复数是一对有序浮点数(x, y)。表示为 x + yj, 其中x 是实数部分,y 是虚数部分。
#下面是Python 语言中有关复数的几个概念:
# 虚数不能单独存在,它们总是和一个值为 0.0 的实数部分一起来构成一个复数。
# 复数由实数部分和虚数部分构成
# 表示虚数的语法: real+imagj
# 实数部分和虚数部分都是浮点数
# 虚数部分必须有后缀j 或J。
#
#下面是一些复数的例子:
#64.375+1j 4.23-8.5j 0.23-8.55j 1.23e-045+6.7e+089j
#6.23+1.5j -1.23-875J 0+1j 9.80665-8.31441J -.0224+0j
#num1=5+1j
#print(num1)
#print(num1.real,num1.imag)
#-->
#(5+1j)
#5.0 1.0
#**************** Part 5:运算符 **********
#混合模式运算符
#Python 支持不同的数字类型相加。当一个整数和一个浮点数相加时, 系统会决定使用整数加法还是浮点数加法。
#Python 使用数字类型强制转换的方法来解决数字类型不一致的问题, 也就是说它
#会强制将一个操作数转换为同另一个操作数相同的数据类型。这种操作不是随意进行的, 它遵循以下基本规则。
#首先,如果两个操作数都是同一种数据类型,没有必要进行类型转换。仅当两个操作数类
#型不一致时, Python 才会去检查一个操作数是否可以转换为另一类型的操作数。如果可以,
#转换它并返回转换结果。由于某些转换是不可能的,比如果将一个复数转换为非复数类型, 将
#一个浮点数转换为整数等等,因此转换过程必须遵守几个规则。
#
#要将一个整数转换为浮点数,只要在整数后面加个 .0 就可以了。 要将一个非复数转换为
#复数,则只需要要加上一个 “0j” 的虚数部分。这些类型转换的基本原则是: 整数转换为浮
#点数, 非复数转换为复数。 在Python 语言参考中这样描述 coerce() 方法:
# 如果有一个操作数是复数, 另一个操作数被转换为复数。
# 否则,如果有一个操作数是浮点数, 另一个操作数被转换为浮点数。
# 否则, 如果有一个操作数是长整数,则另一个操作数被转换为长整数;
# 否则,两者必然都是普通整数,无须类型转换
#标准类型运算符
#相同类型之间的运算,即标准运算
#print(2>1)
#-->True
#算术运算符
#Python 支持单目运算符正号(+)和负号(-), 双目运算符, +,-,*,/,%,还有 ** ,
#分别表示加法,减法, 乘法, 除法, 取余, 和幂运算。从Python2.2 起,还增加了一种新的整除运算符 //
#地板除: // 除法不管操作数何种数值类型,总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
#幂运算
#幂运算操作符和一元操作符之间的优先级关系比较特别: 幂运算操作符比其左侧操作数
#的一元操作符优先级低,比起右侧操作数的一元操作符的优先级高,由于这个特性你会在算术运算符表中找到两个** .
#
#
#*位运算符(只适用于整数)
#Python 整数支持标准位运算:取反(~),按位 与(&), 或(|) 及 异或(^) 及左移(<<)和右移(>>)。
#Python 这样处理位运算:
# 负数会被当成正数的 2 进制补码处理。
# 左移和右移 N 位等同于无溢出检查的2 的N 次幂运算: 2**N。
# 对长整数来说, 位运算符使用一种经修改的 2 进制补码形式,使得符号位可以无限的向左扩展。
#
#取反(~)运算的优先级与数字单目运算符相同, 是所有位操作符中优先级最高的一个。
#左移和右移运算的优先级次之,但低于加减法运算。与, 或, 异或 运算优先级最低
#下面是几个使用整数30(011110),45(101101),60(111100)进行位运算的例子:
#>>> 30 & 45
#12
#Edit By Vheavens
#>>> 30 | 45
#63
#>>> 45 & 60
#44
#>>> 45 | 60
#61
#>>> ~30
#-31
#>>> ~45
#-46
#>>> 45 << 1
#90
#>>> 60 >> 2
#15
#>>> 30 ^ 45
#51
#**************** Part 6:内建函数与工厂函数 **********
#数字类型函数
#Python 现在拥有一系列针对数字类型的内建函数。一些函数用于数字类型转换, 另一些则执行一些常用运算。
#转换工厂函数
#函数 int(), long(), float() 和 complex() 用来将其它数值类型转换为相应的数值类型。
#功能函数
#Python 有五个运算内建函数用于数值运算: abs(), coerce(), divmod(), pow(), pow()和 round()。
#divmod()内建函数把除法和取余运算结合起来, 返回一个包含商和余数的元组。对整数来
#说, 它的返回值就是地板除和取余操作的结果。对浮点数来说, 返回的商部分是
#math.floor(num1/num2),对复数来说, 商部分是ath.floor((num1/num2).real)。
#>>> divmod(10,3)
#(3, 1)
#函数 pow() 和双星号 (**) 运算符都可以进行指数运算。不过二者的区别并不仅仅在于一个是运算符,一个是内建函数。
#内建函数round()用于对浮点数进行四舍五入运算。它有一个可选的小数位数参数。如果
#不提供小数位参数, 它返回与第一个参数最接近的整数(但仍然是浮点类型)。第二个参数告
#诉round 函数将结果精确到小数点后指定位数。
#>>> round(3)
#3.0
#>>> round(3.45)
#3.0
#仅用于整数的函数
#除了适应于所有数值类型的内建函数之外,Python 还提供一些仅适用于整数的内建函数(标准整数和长整数)。
#这些函数分为两类,一类用于进制转换,另一类用于ASCII 转换。
#进制转换函数
#前面我们已经看到,除了十进制标准,Python 整数也支持八进制和16 进制整数。 除此之外,
#Python 还提供了两个内建函数来返回字符串表示的8 进制和16 进制整数。它们分别是 oct()
#和 hex()。它们都接受一个整数(任意进制的)对象,并返回一个对应值的字符串对象。
#print(hex(99))
#-->0x63
#ASCII 转换函数
#Python 也提供了ASCII(美国标准信息交换码)码与其序列值之间的转换函数。每个字符
#对应一个唯一的整数(0-255)。对所有使用ASCII 表的计算机来说, 这个数值是不变的。这
#保证了不同系统之间程序行为的一致性。函数chr()接受一个单字节整数值,返回一个字符串,
#其值为对应的字符。函数ord()则相反,它接受一个字符,返回其对应的整数值。
#>>> ord('a')
#97
#>>> ord('A')
#65
#>>> ord('0')
#48
#>>> chr(97)
#'a'
#>>> chr(65L)
#'A'
#这个是英语的音标:
#print(ord('æ'))
#-->230
#print(chr(230))
#-->æ
#**************** Part 7:其他数字类型 **********
#布尔“数”
#从Python2.3 开始,布尔类型添加到了Python 中来。尽管布尔值看上去是“True” 和“False,但是事实上是整型的子类,对应与整数的1 和0。
#有关布尔类型的主要概念:
# 有两个永不改变的值 True 或False。
# 布尔型是整型的子类,但是不能再被继承而生成它的子类。
# 没有__nonzero__()方法的对象的默认值是 True。
# 对于值为零的任何数字或空集(空列表、空元组和空字典等)在Python 中的布尔值都是False。
# 在数学运算中,Boolean 值的True 和False 分别对应于1 和 0。
# 以前返回整数的大部分标准库函数和内建布尔型函数现在返回布尔型。
#**************** Part 8:相关模块 **********
#在Python 标准库中有不少专门用于处理数值类型对象的模块,它们增强并扩展了内建函数的功能和数值运算的功能。
#对高级的数字科学计算应用来说,你会对著名的第三方包 Numeric(NumPy) 和SciPy 感兴趣。关于这两个包的详细请访问下面的网址。
#http://numeric.scipy.org/
#http://scipy.org/
#模块 介绍
#decimal 十进制浮点运算类 Decimal
#array 高效数值数组(字符,整数,浮点数等等)
#math/cmath 标准C库数学运算函数。常规数学运算在match模块,复数运算在cmath模块
#operator 数字运算符的函数实现。比如 tor.sub(m,n)等价于 m - n
#random 多种伪随机数生成器
#核心模块: random
#当你的程序需要随机数功能时,random 模块就能派上用场。该模块包含多个伪随机数发生器,
#它们均以当前的时间戳为随机数种子。这样只要载入这个模块就能随时开始工作.
作者“David Dai Oracle 笔记 -- 为安庆崛起而奋斗”
相关内容
- 暂无相关文章
评论关闭