数字类型及操作
一、数
1.1 整数类型( 十、二、八、十六进制 )
python中整数类型与数学中的整数概念一致,有正有负,取值任意。
整数的表示形式:
整数类型表示形式 | 举例 |
---|---|
十进制 | 34,163,210 |
二进制 | 0b1101 或 0B1101 |
八进制 | 0o357 或 0O357 |
十六进制 | 0x45ac 或 0X45ac |
1.2 浮点数类型( round()、科学计数法表示 )
python中浮点数即指带有小数点和小数的数字,浮点数取值范围(-10308至10308)和小数精度(10-16)都存在限制(这些限制对于常规运算可以忽略)。
-
浮点数间运算存在不确定尾数,这不是bug。
原因在于计算机中是以有限位数的二进制表示小数的,二者可以无限接近但不完全相同,这就使得计算机以二进制形式计算小数运算时存在了误差,在输出时计算机再截取一定的小数位数输出,就可能产生尾数。python中不确定尾数一般发生在10-16左右。
例如:
图1-1 浮点数间运算的不确定尾数图1-1中,(0.1 + 0.2) 和 (0.11 + 1.32) 的结果不等于正确结果的情况即为出现不确定尾数。
-
rang()函数辅助解决不确定尾数问题
round(x, d) 对x四舍五入,d是小数截取位数
图1-2 round()函数四舍五入 -
浮点数的科学计数法表示形式
科学计数法表示使用字母e或E作为幂的符号,以10为基数,格式如下:浮点数 科学计数法表示形式 0.635 6.35e-1 51.06415 5.106415E1 -0.413 -4.13E-1 -165.333 -1.65333e2
1.3 复数类型( 多用于空间变换或复变函数相关,虚实部的获取 )
在数学中,a + bj被称为复数,其中a是实部,b是虚部,j是复数单位。
在python中,复数与数学中的复数相同。
<复数>.real 获得复数的实部
<复数>.imag 获得复数的虚部
例如:
图1-3 python中的复数即获取虚实部
二、数值运算操作符( 加、减、乘、除、模、幂、整数除、取相反数 )
2.1 常用操作符
操作符及使用 | 说明 |
---|---|
x + y | 加,求x与y的和 |
x - y | 减,求x与y的差 |
x * y | 乘,求x与y的积 |
x / y | 除,求x与y的商(浮点数结果)。10 / 3 结果为3.3333333333333335 |
x // y | 整数除,求x与y的商(整数结果)。10 // 3 结果为3 |
+ x | 表示x本身 |
- x | 取x的相反数 |
x % y | 模运算,求x除y的余数。10 % 3 结果为1 |
x ** y | 幂运算,求 xy。9 ** 0.5 结果为3.0 |
2.2 增强赋值操作符
增强赋值操作符及使用 | 说明 |
---|---|
x += y | 与 x = x + y 等价 |
x -= y | 与 x = x - y 等价 |
x *= y | 与 x = x * y 等价 |
x /=y | 与 x = x / y 等价 |
x //= y | 与 x = x // y 等价 |
x %= y | 与 x = x % y 等价 |
x **= y | 与 x = x ** y 等价 |
x &= y | 与 x = x & y 等价 |
x I= y | 与 x = x I y 等价 |
x ^= y | 与 x = x ^ y 等价 |
x <<= y | 与 x = x << y 等价 |
x >>= y | 与 x = x >> y 等价 |
三、数值运算函数( abs()、divmod()、pow()、round()、max()、min()、int()、float()、complex() )
数值运算函数及使用 | 说明 |
---|---|
abs(x) | 绝对值函数,求x的绝对值 |
divmod(x, y) | 商余函数,同时求 x // y 和 x % y 。divmod(10, 3) 结果为(3, 1) |
pow(x, y[, z]) | 幂余函数,求 (x ** y)%z 。z省略则代表求 xy |
round(x[, d]) | 四舍五入函数,对 x 四舍五入,d 是保留的小数位数。d 省略则代表对 x 四舍五入取整 |
max(x1, x2, x3, …, xn) | 最大值函数,求 x1, x2, x3, …, xn 中的最大值,n 不限 |
min(x1, x2, x3, …, xn) | 最小值函数,求 x1, x2, x3, …, xn 中的最小值,n 不限 |
int(x) | 取整函数,直接舍弃x的小数部分。int(123.123) 结果为123,int(“123”) 结果为123 |
float(x) | 取浮点函数,为x添加小数部分。float(123) 结果为123.0,float(“1.23”) 结果为1.23 |
complex(x) | 取复数函数,为x添加虚数部分。complex(123) 结果为 123 + 0j |
四、天天向上实例
1.1 实例1
# 每天进步1%。
dayup = pow(1.001, 365)
# 每天退步1%。
daydown = pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
1.1 实例2
dayfactor = 0.001 # 定义每天进步的参数
# 每天进步1%。
dayup = pow(1 + dayfactor, 365)
# 每天退步1%。
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
1.1 实例3
'''''''''''''''''''''''''''''''
一年365天中,工作日每天进步1%
周六日每天退步1%
'''''''''''''''''''''''''''''''
dayup = 1.0 # 定义初始进步
dayfactor = 0.01 # 定义每天进步的参数
# 进行365天循环,i = 0, 1, 2, ..., 364
for i in range(365):
if i % 7 in [6, 0]: # 周六日退步1%
dayup *= (1 - dayfactor)
else: # 工作日进步1%
dayup *= (1 + dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
1.1 实例4
小明:一年365天,每天进步1%,不停歇
玲玲:一年365天,每周工作5天休息2天,休息日每日退步1%,那玲玲在工作日平均每天要进步多少,最后才能和小明的进步相当呢?
流程图如下:
# 计算小明365天的进步量
Ming_dayup = pow(1.01, 365)
''' @brief 用于计算玲玲365天的进步量
'' @param df: 玲玲工作日平均每天进步的参数
'' @retval 玲玲365天的进步量
'''
def Ling_dayup(df):
dayup = 1 # 定义玲玲的初始进步
# 进行365天循环,i = 0, 1, 2, ..., 364
for i in range(365):
if i % 7 in [6, 0]: # 玲玲一周内2天退步1%
dayup *= (1 - 0.01)
else: # 玲玲一周内5天进步df
dayup *= (1 + df)
return dayup # 函数返回玲玲365天的进步量
'''''''''''' 主程序 ''''''''''''
Ling_dayfactor = 0.01 # 假设玲玲工作日平均每天进步1%
while Ling_dayup(Ling_dayfactor) < Ming_dayup: # while循环判断,直到玲玲最后的进步量不小于小明的进步的时候,结束循环
Ling_dayfactor += 0.001
print("玲玲工作日每天应平均进步{:.3f}".format(Ling_dayfactor))