Python 数字类型(number)用于存储数值。数据类型是不允许改变的,这就意味着如果改变number数据类型的值,将重新分配内存空间。
1. 一个简单的示例:
1 # 以下实例在变量赋值时数字类型对象将被创建 2 var1 = 1 3 var2 = 10 4 5 # 也可以额用del语句删除一些胡子类型对象的引用。 6 # del 语句的语法是: 7 del var1[,var2[,var3[....,varN]]]] 8 9 del var 10 del var_a, var_b
2. Python支持四种不同的数值类型:
整型(int):通常被称为是整型或整数,是正或负数,不带小数点。
长整型(long integers):无限大小的整数,整数最后是一个大写或小写的L。
浮点型(floating point real values):浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 × 102 = 250)
复数(complex numbers):复数是由实数部分和虚数部分构成的,可以用a+bj,或者complex(a, b)表示复数的实部a和虚部b都是浮点型。
3. Python number 类型转换
函:int
语:int(x, base=2/8/10/16)
用:base默认为10进制算法,可以选择二进制、八进制、十六进制等)
1 # int 2 x = 4852666.12345 3 y = int(x) 4 print(x, y, sep="***") 5 # 输出结果:4852666.12345***4852666 6 7 x = "0b1001" 8 y = int(x, base=2) # 二进制算法 9 print(x, y, sep="***") 10 # 输出结果:0b1001***9 11 # 12 print(int(1.9)) # 将浮点型转换成整数,获取整数部分,向下取整 13 print(float(1)) # 将整数转换成为浮点型,向下加上小数位 14 # 输出结果:1.0 15 print(int("123")) # 字符串如果是数字字符串的话可以转换效果同eval 16 # 输出结果:123 17 18 print(int("123")) # 字符串如果是数字字符串的话可以转换效果同eval 19 # 输出结果:123 20 print(int("+123")) 21 # 输出结果:123 22 print(int("-123")) 23 # 输出结果:-123 24 # print(int("12+3+3")) # 加号减号,作为正负号才有意义 25 # 输出结果:错误!
函:float
语:float(x)
用:转换一个浮点型数值,默认为六位四舍五入的方式
1 # float 2 x = 4852666.123456789923456789 3 print(x) 4 # 输出结果:4852666.12345679 5 print(float("12.3")) # 字符串如果是数字字符串的话可以转换 6 # 输出结果:12.3 7 print(float(1)) # 将整数转换成为浮点型,向下加上小数位 8 # 输出结果:1.0
函:complex
语:complex(x)
用:创建一个复数
1 # complex 2 print(complex(12, 15)) # 创建一个复数 3 # 输出结果: 4 # (12+15j) 12位实数部分,15j为虚数部分
函:str
语:str(x)
用:将对象x转换为表字符串
1 # str 2 print(type(str(123))) # 将对象转换成为一个字符串 3 # 输出结果: 4 # <class 'str'>
函:repr
语:repr(x)
用:将对象x转换为表达式字符串
1 # repr 2 print(type(repr(123))) # 将对象转换为表达式字符串 3 # 输出结果: 4 # <class 'str'>
函:eval
语:eval(str)
用:1.用来计算再字符串中有效Python表达式,并返回一个对象;2.用来把字符串中的数据类型提取出来。
1 print(eval("12+3")) # 字符串内数字运算方式 2 # 输出结果:15 3 4 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" 5 b = eval(a) 6 print(b, type(b)) # 将字符串转换成列表 7 # 输出结果:[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]] <class 'list'> 8 9 a = "{1: 'a', 2: 'b'}" 10 b = eval(a) 11 print(b, type(b)) # 将字符串转换成字典 12 # 输出结果:{1: 'a', 2: 'b'} <class 'dict'> 13 14 a = "([1,2], [3,4], [5,6], [7,8], (9,0))" 15 b = eval(a) 16 print(b, type(b)) # 将字符串转换成元组 17 # 输出结果:([1, 2], [3, 4], [5, 6], [7, 8], (9, 0)) <class 'tuple'>
函:tuple
语:tuple(s)
用:将序列s转换成一个元组
1 # tuple 2 print(tuple("123你好")) # 将字符串内的的元素按照单个方式转换成元组 3 # 输出结果: 4 # ('1', '2', '3', '你', '好')
函:list
语:list(s)
用:将序列s转换成一个列表
1 # list 2 print(list("123你好")) # 将字符串内的元素按照单个方式转换成列表 3 # 输出结果: 4 # ['1', '2', '3', '你', '好']
函:ord 和 char
语:ord(x)、char(x)
用:对照ASCII码表,获得一个字符的整数值;由整数值获得一个字符
1 # char 2 print(chr(80)) # 将一个整数转换为一个字符,对应ASCII码表。 3 # 输出结果:P 4 5 # ord 6 print(ord("C")) # 将一个字符转换成它的整数值,对应ASCII码表。 7 # 输出结果:67
函:oct、hex
语:oct(x)、hex(x)
用:将一个整数转换为一个八进制字符串;将一个整数转换为一个十六进制字符串
1 # hex 2 print(hex(123456)) # 将一个整数转换为一个十六进制字符串 3 # 输出结果:0x1e240 4 5 # oct 6 print(oct(123456)) # 将一个整数转换为一个八进制字符串 7 # 输出结果:0o361100
3. 数字算术运算和赋值运算
3.1 数学算术运算
数学算出运算共有7种,分别为 +、-、*、/(加、减、乘、除)和 %、**、//(取模余数、幂运算、取整除赋值运算符,整除的结果)
1 # 数字算术运算 2 # + - * / 3 a, b, c = 20, 10, 0 4 c = a + b 5 print("a + b = %.2f" % c) # 输出结果:30.00 6 7 c = a - b 8 print("a - b = %.2f" % c) # 输出结果:10.00 9 10 c = a * b 11 print("a * b = %.2f" % c) # 输出结果:200.00 12 13 c = a / b 14 print("a / b = %.2f" % c) # 输出结果:2.00 15 16 # % ** // 17 c = a % b 18 print("a % b = ", c) # 取模(取余数)# 输出结果:0 19 20 c = a ** b 21 print("a ** b = %d" % c) # 幂运算 # 输出结果:10240000000000 22 23 c = a // b 24 print("a // b = %d" % c) # 取整除赋值运算符,整除的结果。# 输出结果:2
3.2 数字赋值运算
数学的赋值运算拆分为运算+赋值=结果。两步的运算结果合并成为一步。=、+=、-=、*=、/=(等于、加等于、减等于、乘等于、除等于)和%=、**=、//=(取余等于、幂等于、取整除等于)。
举个例子:a = 100、b=50、a += b 可以拆分为(第一步:a + b = 150;第二步:赋值150赋值给a,a=150),最终变为a=150 b=50
这里特别说明的是这种数字赋值表达式方式,在后面的循环体当中运用非常广泛。
1 # 数字赋值运算(表达内容同上) 2 # = += -= *= /= 3 d, e, f = 20, 10, 0 4 e += d 5 print("e += d : ", e) # 输出结果:e += d : 30 6 7 e += d 8 print("e -= d : ", e) # 输出结果:e -= d : 50 9 10 e *= d 11 print("e *= d : ", e) # 输出结果:e *= d : 1000 12 13 e /= d 14 print("e /= d : ", e) # 输出结果:e /= d : 50.0 15 16 # %= **= //= 17 d %= e 18 print("d %= e : ", d) # 输出结果:d %= e : 20.0 19 20 d **= e 21 print("d **= e : ", d) # 输出结果:d **= e : 1.125899906842624e+65 22 23 d //= e 24 print("d //= e : ", d) # 输出结果:d //= e : 2.251799813685248e+63
4. 常用数学函数
Python除了普通的加减乘除运算,还可以运算一些像三角函数,四舍五入等运算方式,有些需要调用出数学库,方式为import math。对于这些常用的数学函数列出如下:
函:abs和fabs
语:abs(x)和fabs(x)
用:取绝对值
1 import math 2 # abs 和 math.fabs 3 # 作用:取绝对值 4 print(abs(-3.1412926)) 5 print(math.fabs(-10)) # 这个与abs不同是如果是整数返回一个带一位小数的整数 6 # 输出结果: 7 # 3.1412926 8 # 10.0
函:round、ceil、floor
语:round(x,n)、ceil(x)、floor(x)
用:四舍五入n为保留几位小数、向上取整、向下取整
1 # round、ceil、floor 2 # 作用:四舍五入、向上取整、向下取整 3 print(round(3.1415926, 4)) # 保留四位小数,如果舍位为0,返回四舍五入的整数 4 # 输出结果:3.1416 5 print(math.ceil(3.11415926)) # 向上取整 6 # 输出结果:4 7 print(math.floor(3.1415926)) # 向下取整 8 # 输出结果:3
符:>、==、<、>=、<=
用:大于、等于、小于、大于等于、小于等于,来逻辑比较两个值。返回为真假(True or False)
1 # > == < <= >= 2 # 作用:比较两个数字的大小关系,返回为真假 3 print(15 > 10) # 输出结果:True 4 print(15 < 10) # 输出结果:False 5 print(15 == 10) # 输出结果:False 6 print(15 >= 10) # 输出结果:True 7 print(15 <= 10) # 输出结果:False
函:exp
语:exp(x)
用:取指数
1 # exp 2 # 作用:取指数 3 print(math.exp(50)) 4 # 输出结果:5.184705528587072e+21
函:log、log10、log2
语:log(x,n)、log10(x)、log2(x)
用:计算以n为底的对数(默认为2.71...)、计算以十为底的对数、计算以二为底的对数
1 # log、log10、log2 2 # 作用:对数计算方式 3 print(math.log(10, 10)) # 以几为底的对数,默认为2.718281828459045为底 4 # 输出结果:1.0 5 print(math.log10(10)) # 以10为底的log计算 6 # 输出结果:1.0 7 print(math.log2(10)) # 以2位底的log计算 8 # 输出结果:3.321928094887362
函:max、min
语:max(n1,n2,n3,....)、min(n1,n2,n3,....)
用:求一组数中的最大值;求一组书中的最小值
1 # max、min 2 # 作用:大小值比较,返回为数字或者字符 3 print(max(12, 13, 14)) # 输出结果:14 4 print(min(12, 13, 14)) # 输出结果:12
函:pow
语:pow(base,n)
用:计算以base为底的n次方
1 # pow 2 # 作用:幂运算 等于 ** 3 print(math.pow(10, 2)) # 输出结果:100.0
函:sqrt
语:sqrt(x)
用:对数值x进行开方运算
1 # sqrt 2 # 作用:开方运算 3 print(math.sqrt(4)) # 输出结果:2.0
函:modf
语:modf(x)
用:返回x值的整数部分和小数部分,两部分数值符号与值相同,整数部分以浮点型表示
1 # modf 2 # 作用:返回值的整数部分与小数部分,两部分数值符号与值相同,整数部分以浮点型表示 3 print(math.modf(10.12)) # 显示为小数部分+整数部分 4 # 输出结果:(0.11999999999999922, 10.0) 5 print(math.modf(10.10)) # 显示为小数部分+整数部分 6 # 输出结果:(0.09999999999999964, 10.0)
函:常用的三角函数:
acos(x) 返回x的反余弦弧度值
asin(x) 返回x的反正弦弧度值
atan(x) 返回x的反正切弧度值
atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值
cos(x) 返回x的弧度的余弦值
hypot(x, y) 返回欧几里德范数 sqrt(x*x + y*y)
sin(x) 返回的x弧度的正弦值
tan(x) 返回x弧度的正切值
degrees(x) 将弧度转换为角度,如degrees(math.pi/2)
radians(x) 将角度转换为弧度
1 # 常用的三角函数 # 2 # acos(x) 返回x的反余弦弧度值 3 print(math.acos(0.5)) # 输出结果:1.0471975511965979 4 # asin(x) 返回x的反正弦弧度值 5 print(math.asin(0.5)) # 输出结果:0.5235987755982989 6 # atan(x) 返回x的反正切弧度值 7 print(math.atan(0.5)) # 输出结果:0.4636476090008061 8 # atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值 9 print(math.atan2(0.5, 0.5)) # 输出结果:0.7853981633974483 10 # cos(x) 返回x的弧度的余弦值 11 print(math.cos(0.5)) # 输出结果:0.8775825618903728 12 # hypot(x, y) 返回欧几里德范数 sqrt(x*x + y*y) 13 print(math.hypot(0.5, 0.5)) # 输出结果:0.7071067811865476 14 # sin(x) 返回的x弧度的正弦值 15 print(math.sin(0.5)) # 输出结果:0.479425538604203 16 # tan(x) 返回x弧度的正切值 17 print(math.tan(0.5)) # 输出结果:0.5463024898437905 18 # degrees(x) 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 19 print(math.degrees(math.pi/2)) # 输出结果:90.0 20 # radians(x) 将角度转换为弧度 21 print(math.radians(90)) # 输出结果:1.5707963267948966
函:pi、e
语:
用:这是两个数学常量分布别指的:π和常数e
1 # 两个数学常量 # 2 print(math.pi) # 输出结果:3.141592653589793 3 print(math.e) # 输出结果:2.718281828459045
5. 常用的数学随机数函数
在某些领域中(比如卡尔曼滤波等)数学随机数运用非常广泛,严格意义来讲,python提供的随机数并不是绝对意义的随机数,但是也经常被使用。同样计算这些随机数也需要条用python的随机数库,用import random的形式调用出来。
函:choice
语:choice()
用:从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
函:range
语:range(self, start [,end] [,step])
用:这个特别要增加一个函数,这个函数和后面的list列表数据类型最大的区别是range函数是用来创建算术级序列的通用函数,类似于C语言中的数字,有且只能存放数值类型变量。其中start为其实值,end为结束值,step为步长,单元素或者默认状态下步长为1。
1 import random 2 # choice 3 # 作用:从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数 4 print(random.choice([0, 1, 2, 3, 4, 7, 8, 9, 100])) # 从一个数组里面随机拿出来一个数 5 # 输出结果:0(随机结果) 6 7 print(random.choice(["你好", "fucnk", "thomas"])) # 从一个数组里面随机拿出来一个字符串 8 # 输出结果:你好(随机结果) 9 10 print(random.choice(range(5))) # range(5) = [0, 1, 2, 3, 4] 11 # 输出结果:0(随机结果) 12 13 print(random.choice(range(10)) + 1) # 生成1到10之间的随机数 14 # 输出结果:8(随机结果)
函:randrange
语:randrange([start,] ,stop[, step])
用:从一个结合范围当中按照某个步长来随机挑选,按照指定技术递增集合中选取一个随机数,这种方式类似于上面的choice(range())的形式。
1 # random.randrange([start,] ,stop[, step]) 2 # 作用:从一个结合范围当中按照某个步长来随机挑选,按照指定技术递增集合中选取一个随机数 3 # start--指定范围的开始至,包含范围内 4 # stop--是定范围的结束,不包含在范围内 5 # step--递增基数,默认是1 6 print(random.randrange(1, 100, 5)) # 从0-99选取一个随机数,步长是5 7 print(random.randrange(100)) # 从0-99选取一个随机数,步长是1
函:random.random
语:random.random()
用:随机生成[0, 1)之间的小数,含0,不包括1
1 # random.random 2 # 作用:随机小数[0,1) 3 print(random.random()) # 15位的随机小数0-1之间
函:normalvariate
语:normalvariate(mu, sigma)
用:mu为均值,sigma为方差;生成正态分布随机数。
1 # normalvariate 2 # 作用生成正态分布随机数,其中第一个为均值,第二个为方差 3 print(random.normalvariate(0, 1))
函:shuffle
语:shuffle(series)
用:将序列的所有元素进行随机排序
1 # shuffle 2 # 作用:将序列的所有元素随机排序 3 list = [1, 2, 3, 4, 5, 6] 4 random.shuffle(list) 5 print(list)
函:uniform
语:uniform([start] [,stop])
用:随机生成一个实数
1 # uniform 2 # 作用:随机生成一个实数 3 print(random.uniform(10, 20 )) # 范围[10, 20]
函:seed
语:seed(n)
用:用种子的方法改变随机数生成器的种子,可以在条用其他随机函数之前调用此函数。这个方式有个特点规定好种子后数值不再改变了。
1 # seed 2 # 作用:seed()方法改变随机数生成器的种子,可以在调用其他随机模块函数之前条用次函数 3 random.seed(10) 4 print("Random number with seed 10 :", random.random()) # 生成同一个随机数 5 # 输出结果:0.5714025946899135
6. 其他补遗
还有一种交互式赋值方式
1 num1 = 10 2 print(id(num1)) # 打印num1的地址 3 num2, num3 = 10, 20 4 print(num1, num2) # 交互式赋值方式 5 num4 = num5 = num6 = 30 6 print(num4, num5, num6) # 连续赋值的方式 7 print(type(num4)) # 打印属于那种类型变量