python学习总结--数字

   Python中主要的数据类型有:数字、字符串、列表、元组、字典、文件等。下面对数字进行介绍和总结

 

数字

 

1. 基本概念

  Python是面向对象的语言,数字也是对象,它是不可变的。当给变量重新赋值时,是将变量指向了另一个对象,原来的对象并没有被改变。这一点与c有很大的区别。

2. 数字的类型

Python支持多种数字类型:整型、长整型、浮点型、复数、布尔型、十进制浮点型

 

整型int

如:711   -19 017  0x18

Python中的整型等价于C中的长整型,在32位计算机中占用4个字节。取值范围是-2^31~  2^31-1

 

长整型long

如:16384L    -0x4E8L   017L   -2147483648l 052144364L

长整型一般以L结尾,表示其为长整型。取值范围只与机器的内存有关,可以表示无限大的数,远远超过了c的长整型

目前,整型与长整型在慢慢统一,当整型数据范围溢出时,会自动转换为长整型

 

浮点型float

如:0.0   -29.2 98e3*1.0  -238.     -1.28E-9

Python中的浮点型数据类似与C中的双精度浮点型double,可以用十进制或科学计数法表示。

 

十进制浮点型decimal

由于计算机的精度问题,导致小数的表示存在误差,如0.1在计算机中的表示是0.1000000000000001。0.1+0.1+0.1-0.3应该是0.结果却不是。

>>> 0.1+0.1+0.1-0.3

5.551115123125783e-17

为此引入Decimal类型的小数进行解决。

>>> from decimal import Decimal

>>> printDecimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')

0.0

Decimal是一个类,使用时需进行导入,然后通过字符串创建decimal对象。注意decimal类型的数据不可以和普通浮点数进行运算。Decimal类型的数据支持算术运算,不支持位运算等。

>>> 1+Decimal('1.0')

Decimal('2.0')

>>> 1.0+Decimal('2.0')

Traceback (most recent call last):

  File"<pyshell#17>", line 1, in <module>

    1.0+Decimal('2.0')

TypeError: unsupported operand type(s) for +: 'float'and 'Decimal'

>>> a = Decimal('1.2')

>>> b = Decimal('3.0')

>>> print a-b

-1.8

>>> print a+b

4.2

>>> print a*b

3.60

>>> print a/b

0.4

>>> print a % b

1.2

>>> print a**2

1.44

>>> print a&b

 

Traceback (most recent call last):

  File"<pyshell#25>", line 1, in <module>

    printa&b

TypeError: unsupported operand type(s) for &:'Decimal' and 'Decimal'

 

复数complex

如 2+3j    -1-j   0+2J

Python支持复数类型,复数由实部和虚部组成,实部和虚部都是实数,虚部不能单独存在,虚部后缀j或J

复数对象有内建属性实部和虚部,conjugte方法获取其共轭复数。例:

>>> com = -12.3+8.3j

>>> com

(-12.3+8.3j)

>>> com.real

-12.3

>>> com.imag

8.3

>>> com.conjugate

<built-in method conjugate of complex object at0x0130F350>

>>> com.conjugate()

(-12.3-8.3j)

 

布尔型bool

布尔型只有两个值True和False,分别表示1和0,它们是整型的子类。值为0的任何数字和空集(空列表、空元组等)的布尔值为0。没有__nonzero()__方法的类的对象默认值是True.下面是一些例子:

#不同类型数据的bool值

>>> bool(1)

True

>>> bool(True)

True

>>> bool(0)

False

>>> bool([])

False

#bool值的使用

>>> foo = 1<2

>>> foo

True

>>> foo + 100

101

>>> foo

True

>>> int(foo)

1

#关于__nonzero()__方法

>>> class C:pass

>>> c = C()

>>> bool(c)

True

>>> bool(C)

True

#重写__nonzero()__

>>> class C:

      def__nonzero__(self):

             return False

>>> c = C()

>>> bool(c)

False

>>> bool(C)

True

 

3. 数字的运算

3.1 算术运算

不同类型的数字之间可以进行算术运算,如整型和实型可以进行加法除法等,当运算符两端的操作数类型不同时,python会自动对类型进行强制转换,基本原则是:整数转换为浮点数, 非复数转换为复数。

Python中有单目运算符+(正号)、-(负号)。双目运算符:+、 - 、 *、 /、 %、**、//,分别表示加、减、乘、除法、取余、求幂、整除。这里主要对除法和幂运算进行说明。

除法:

/:表示整除,如3/2=1,会将小数部分抹去,为了实现普通除法,有两种方法:1.使用实数参与运算。2.导入division模块。如下:

方法一:

>>> 1/2

0

>>> 1.0/2

0.5

>>> 1/2.

0.5

>>> 1.0/2.0

0.5  

方法二:

>>> from __future__ import division

>>> 1/2

0.5

当然,这样的话,/只能进行普通除法,而不能进行整除了。

//:在python中,该运算符为整除运算符,地板除,不管操作数是整数还是实数。

>>> 1//2

0

>>> 1.0//2.0

0.0

>>> 3./2.

1.5

 

幂:python中提供**运算符,进行幂运算。当然了,还可以使用内建函数pow()

  >>> 2 ** 3

8

>>> pow(2,3)

8

>>> -2**4

-16

 

3.2 位运算

  位运算只适用于整数,包括与(&)、或(|)、取反(~)、异或(^)、左移(<<)和右移(>>).Python 这样处理位运算:

1).负数会被当成正数的 2 进制补码处理。

2).左移和右移 N 位等同于无溢出检查的2 的 N 次幂运算: 2**N。

3).对长整数来说, 位运算符使用一种经修改的2 进制补码形式,使得符号位       可以无限的向左扩展(思考,c中是怎样的???)

  下面看一些例子,以30(011110)、45(101101)、60(111100)为例:

>>> 30&45

12

>>> 30|45

63

>>> ~30

-31

>>> 45&60

44

>>> 45>>1

22

>>> 30<<2

120

>>>

 

4. 数字的不同进制

像C语言那样,python整数不仅支持十进制数,也支持八进制和十六进制。

八进制:以0开头,包含数字0-7,每一个八进制数字都可由3个二进制位表示

十六进制:以0x或0X开头,由数字0-9和大写或者小写字符a-f构成。每一个十六进制数字都可由4个二进制位表示。

Python中提供了内建函数用于进制转换:hex()和oct(),它们接收一个任意进制的整数对象,分别返回该对象的十六进制和八进制的字符串表示。

>>> hex(78)

'0x4e'

>>> hex(0x67)

'0x67'

>>> oct(076)

'076'

>>> oct(0x34)

'064'

5. 数字的内建函数

数字类型的内建函数一些用于数字转换,一些用于功能运算

5.1 转换工厂函数:

函数            

       功能

bool(obj)            

返回对象的bool的布尔值,也就是obj.__nozero()__方法的

int(obj,base=10)

返回字符串或者数值对象的整数表示,可指定进制

long(obj,base=10)

返回字符串或者数值对象的长整型表示,可指定进制

float(obj)           

返回字符串或者数值对象的浮点数表示,

complex(obj)     

返回字符串或者数据对象生成复数对象

ord(char)

返回单个字符的ascii码数值

chr(num)

返回整数对应的ascii码字符

 

 

例:

#bool

>>> bool(2.1)

True

>>> bool(math)

True

>>> bool(1<2)

True

#int

>>> int('123')

123

>>> int('123',16)

291

>>> int('123',8)

83

#complex

>>> complex('2')

(2+0j)

>>> complex('2+1j')

(2+1j)

>>> complex(2)

(2+0j)

>>> complex(2,-1)

(2-1j)

#ascii码转换

>>> chr(38)

'&'

>>> chr(65)

'A'

>>> ord('a')

97

5.2 功能函数:

  abs()、coerce()、divmod()、pow()、round()、floor()

abs(obj):取obj的绝对值,若是复数返回复数的模

>>> abs(-23.4)

23.4

>>> abs(3+4j)

5.0

 

coerce(x,y):对x和y进行类型转换,返回类型转换一致的元组

>>> coerce(2,1j)

((2+0j), 1j)

 

divmod(x,y):结合除法和取余,返回x除y的商和余数的元组

>>> divmod(5,2)

(2, 1)

>>> divmod(1.2,10)

(0.0, 1.2)

>>> divmod(2-3j,2+3j)

((-1+0j), (4+0j))

 

pow(x,y,z=1):求x的y次幂,结果对z取余,默认值是1

>>> pow(2,3)

8

>>> pow(-2.5,2)

6.25

>>> pow(-2,3,3)

1

 

round(x,y=0):对x进行四舍五入,默认返回整数,y指定精确到小数点后的位数。

>>> round(3.1415)

3.0

>>> round(3.1415,1)

3.1

>>> math.floor(2.3)

2.0

比较:

int():返回数值的整数部分

round():四舍五入,返回最接近数值的整数

floor():返回最接近数值但小于数值的整数

除此之外,math模块中还包含有很多函数可供使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值