Python学习系列:基本数据类型
——————————————————————————
概述
以我计算机原理的功底而言,整数和小数的运算对应着计算机内部不同的硬件逻辑运算,数据精度越高,则其表示的范围越小;数据的范围越大,则其表示的精度越低。
整数类型
进制种类 | 引导符号 | 表示方法 |
十进制 | 无 | 0,123,-456 |
二进制 | 0B或0b | 0B01,0b10 |
八进制 | 0O或0o | 0O54,0o36 |
十六进制 | 0X或0x | 0XAD,0x32 |
,计算 。
>>> pow(2,5)
32
>>> pow(2,500)
327339060789614187001318969682759915221664204604306478948329136809613379640
4674554883270092325904157150886684127560071009217256545885393053328527589376
>>>
浮点数类型
Python要求浮点数必须带有小数部分,也就是比如 是浮点数, 是整数。9600000不想写这么长又该怎么表示呢?当然是科学计数法:9.6e6。
>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15,
mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
上面的这段废话说了什么呢?他说的是Python浮点数的表示的范围在 之间,精度为 ,也就是,浮点运算的前15位是保证正确的,后面的不敢保证,不能用作高精度的科学计算,那么该怎么解决这个问题呢?两种方案。
>>> 3.1415926535897924
3.1415926535897922
>>> 987654321123456.789
987654321123456.8
>>> 3.1415926535*1.23456789
3.878509413470996
>>> 31415926535*123456789 #用整数运算去代替小数运算
3878509413470996115
>>> import decimal #用decimal这个库去解决问题
>>> a = decimal.Decimal('3.1415926535')
>>> b = decimal.Decimal('1.23456789')
>>> decimal.getcontext().prec = 20 #context means background
>>> a * b
Decimal('3.878509413470996115')
复数类型
回忆一下高中死去的数学老师怎么教的复数, , 这就是复数,3是实部,4是虚部。当初老师也不讲一下物理意义,可能她也不会吧,只要教给你怎么做题就好。科普一下,复数就是原来的数在数轴上旋转了一半,看不懂的话去百度下,这里不讲(主要是懒,不想画那个旋转的图)。
形如12.3+4j的表示形式,即为Python里面的复数。如何获取虚部和实部呢?
>>> a = 12.3+4j
>>> a.imag #虚部,imaginary part
4.0
>>> a.real #实部,real part
12.3
本小节结束
—————————————————————————————————————————————————————–
数字类型操作
直接看代码吧,简单粗暴还直接。
>>> x, y = 3, 10
>>> y / x
3.3333333333333335
>>> y // x #取整
3
>>> y % x #取余
1
>>> y ** x #y的x次方
1000
>>> x = 3+4j
>>> abs(x)
5.0
>>> x = 4.4
>>> round(x) #四舍五入
4
>>> x = 4.6 #四舍五入
>>> round(x)
5
>>> x1, x2, x3 = 3, 1, 2
>>> min(x1, x2, x3)
1
>>> max(x1, x2, x3)
3
>>> a, b = 1, 2 #转换成复数
>>>> complex(a, b)
(1+2j)
这些操作不够?这些操作当然不够。。。可以查看Python的官方文档里面的math库,取对数,积分,求导各种操作应有尽有,库函数里面的方法太多,这里就不列举了。点击这里去Math库瞅瞅。
本小节结束
—————————————————————————————————————————————————————–
字符类型操作
三引号可以表示多行字符串。继续看代码,第一部分是字符串的常规操作,第二部分是内置的字符串处理函数。
>>> str = "one world, one 梦想"
>>> str[:]
'one world, one 梦想'
>>> str1 = "The same world, the same dream is the slogan of the 2008 Beijing
Olympic Games."
>>> str + str1
'one world, one 梦想The same world, the same dream is the slogan of the 2008
Beijing Olympic Games.'
>>> str3 = "a"
>>> x = 3
>>> str3 * x #复制3次
'aaa'
>>> x = 'w'
>>> x in str
True
>>> str = "today i want to play badminton"
>>> len(str) #字符串长度
30
>>> str1 = str.upper() #字符串转化为大写
>>> str1
'TODAY I WANT TO PLAY BADMINTON'
>>> str.islower() #判断字符串是否全部为小写
True
>>> numstr = "12345"
>>> numstr.isnumeric() #判断字符串是否全部为数字
True
>>> "python".center(40, '=') #自己看吧
'=================python================='
>>> "123".zfill(40) #左边补0,到40位
'0000000000000000000000000000000000000123'
>>> num = 99
>>> str(num) #转换为字符串
'99'
format()进阶操作格式化字符串。
format()基本操作。
>>> s = "别眨眼,看好顺序{0}{1}{2}".format("第一","第二","第三")
>>> s
'别眨眼,看好顺序第一第二第三'
>>> s = "别眨眼,看好顺序{2}{1}{0}".format("第一","第二","第三")
>>> s
'别眨眼,看好顺序第三第二第一'
format()格式控制。
>>> s = "World Cup"
>>> "{0:30}".format(s) #第0个槽,宽度为30,如果设置的槽的宽度小于len(str),则以
#实际为准,默认左对齐
'World Cup'
>>> "{0:1}".format(s)
'World Cup'
>>> "{0:>1}".format(s) #右对齐
'World Cup'
>>> "{0:>30}".format(s) #右对齐
' World Cup'
>>> "{0:*^30}".format(s) #居中对齐,*作为填充
'**********World Cup***********'
>>> "{0:->30}".format(s) #右对齐,-作为填充
'---------------------World Cup'
>>> "{0:20,}".format(123456789) #千位用逗号分隔
' 123,456,789'
>>> "{0:^20.3f}".format(12345.6789) #保留三位小数
' 12345.679 '
>>> str = "python" #取高四位
>>> "{0:.4}".format(str)
'pyth'
>>> print("{0:b},{0:X}".format(626)) #进制转换
1001110010,272
>>> "{0:e}, {0:E}, {0:.2f}, {0:.2%}".format(3.14159) #科学计数法;实数;百分数
'3.141590e+00, 3.141590E+00, 3.14, 314.16%'
>>> print("{0:>15s}, {1:<8.2f}".format("length", 6.1865398))
length, 6.19
#s means string, f means real number.
也许上面的看着有点晕,到底是先设置对齐方式呢,还是先设置填充呢,还是先设置数据精度呢,还是先设置数据类型呢?当然是有顺序的,看下面的顺序。
参数序号0,1,2外加冒号:
填充字符
对齐方式
宽度
千位分隔符逗号
精度;最大宽度
数据类型,(科学计数法、进制、百分数等)