Python游戏世界打怪升级之新手指引四【数值】
今天我们来讲一下,Python里面的数值类型,分为整数、浮点数、复数;
可以进行加减乘除、整除、取余、幂运算等操作;
还可以通过内置函数,在不同数值类型之间进行转化
int整数
# 包括正整数、负整数、零;可以表示任意大小的整数(受限于内存)
a = 10
b = -5
c = 0
print(a+b)
print(a-b)
print(a*b)
print(a/b)
# 5
# 15
# -50
# -2.0
# 除法运算这里需要注意,如果除不尽的话,且循环的话,会输出下面格式
a1 = 10
b1 = 3
print(a1/b1)
# 3.3333333333333335
# 如果不想要小数点后面的,就需要用上整除了
print(a1//b1)
# 3
# 取余操作,顾名思义就是取余数
print(a1%b1)
# 1
# 还有幂运算
print(a1**b1)
# 1000
float浮点数
# 浮点数是带有小数点的数,包括正数、复数、零;以双精度存储,因此精度有限
a = -5.4
b = 3
c = 0
print(a + b)
print(a - b)
print(a * b)
print(a / b)
# -2.4000000000000004
# -8.4
# -16.200000000000003
# -1.8
# 除法运算这里需要注意,如果除不尽的话,会保留
a1 = 10.4
b1 = 3
print(a1 / b1)
# 3.466666666666667
# 如果不想要小数点后面的,就需要用上整除了;注意,浮点数的话需要加.0
print(a1 // b1)
# 3.0
# 取余操作,顾名思义就是取余数;注意,浮点数的话需要加.0
print(a1 % b1)
# 1.0
# 还有幂运算,注意,浮点数的话需要加.0
print(a1 ** b1)
# 1000.0
上面可以发现一个问题,就是加法、乘法的时候,和实际算出来的不一样
这里其实是因为精度的问题,可以采用下面两个方法进行计算Decimal、Fraction
首先进行from ......import...... ,意思是 Python 中用于导入模块或模块中特定功能的语法。它的作用是从一个模块中导入指定的部分(如函数、类、变量等),而不是导入整个模块。
decimal.Decimal(用于高精度的十进制浮点数运算)fractions.Fraction(用于精确的有理数运算)。
以上来自于deepseek提供
print('-----------------Decimal------------------------------')
from decimal import Decimal
a_decimal = Decimal('-5.4')
b_decimal = Decimal('3')
sum_decimal = a_decimal + b_decimal
product_decimal = a_decimal * b_decimal
print("a + b (精确) =", sum_decimal) # 输出 -2.4
print("a * b (精确) =", product_decimal) # 输出 -16.2
print('-----------------Decimal------------------------------')
print('-----------------Fraction------------------------------')
from fractions import Fraction
a_fraction = Fraction('-5.4')
b_fraction = Fraction('3')
sum_fraction = a_fraction + b_fraction
product_fraction = a_fraction * b_fraction
print("a + b =", sum_fraction) # 输出 -12/5
print("a * b =", product_fraction) # 输出 -81/5
# 转换为浮点数查看结果
print("a + b (浮点数) =", float(sum_fraction)) # 输出 -2.4
print("a * b (浮点数) =", float(product_fraction)) # 输出 -16.2
print('-----------------Fraction------------------------------')
complex复数
# 复数的表现形式,a + bj的形式,其中a是实部、b是虚部、j是虚数单位
# 可以进行加减乘除、取模abs()、共轭复数运算;这里简单介绍下,自己可以私下了解
z1 = 2+3j
z2 = 4-4j
# 加法,实部、虚部分别进行相加
print("z1 + z2 =", z1 + z2) # 输出 (6-1j)
# 减法,实部、虚部分别进行相减
print("z1 - z2 =", z1 - z2) # 输出 (-2+7j)
# 乘法,按照分配律进行展开
# a = 2 ,b = 3,c = 4,d = -4
# z1×z2=(a⋅c−b⋅d)+(a⋅d+b⋅c)j
print("z1 * z2 =", z1 * z2) # 输出 (20+4j)
# 除法,需要将分母有理化。
print("z1 / z2 =", z1 / z2) # 输出 (-0.125+0.625j)
# 取模,实部和虚部的平方和的平方根。
print("|z1| =", abs(z1)) # 输出 3.605551275463989
print("|z2| =", abs(z2)) # 输出 5.656854249492381
# 共轭复数,就是虚部取负
print("z1 的共轭复数 =", z1.conjugate()) # 输出 (2-3j)
print("z2 的共轭复数 =", z2.conjugate()) # 输出 (4+4j)
复数的除法公式为
\[\begin{aligned}
\frac{z1}{z2} &= \frac{(a \cdot c + b \cdot d)}{c^2 + d^2} + \frac{(b \cdot c - a \cdot d)}{c^2 + d^2}j
\end{aligned}
\]
复数的取模公式为
\[|z1| = \sqrt{a^2 + b^2}
\]
上面我们介绍了整数、浮点数、复数;下面我们来介绍一些内置函数和一些模块里面的函数,可以在日常使用中更加方便快捷
数学运算
# abs(x)求绝对值,接受整数、浮点数,如果参数是一个复数,则返回他的模
print(abs(7)) # 7
print(abs(-8)) # 8
print(abs(2+3j)) # 3.605551275463989
# divmod(x,y),接受两个(非复数)数字作为参数并返回由当对其使用整数除法时的商和余数组成的数字对
# 等价于(x // y, x % y)
print(divmod(10,3)) # (3,1)
print(divmod(10.0,3)) # (3.0, 1.0)
# round(number, ndigits=None)
# 返回 number 舍入到小数点后 ndigits 位精度的值。
# 如果 ndigits 被省略或为 None,则返回最接近输入值的整数。
print(round(3.1415926,4)) # 3.1416
print(round(314159.26,-4)) # 310000.0
print(round(3.1415926)) # 3
# pow(x,y,mod=None),返回x的y次幂
# mod有值的话,则返回x ** y % mod;相比 pow(x, y) % mod 更高效
# 没有mod的话,等价于(x ** y)
print(pow(10,3)) # 1000
print(pow(10,3,3)) # 1
类型转换
上一章节已经介绍过了,这里就不再详细介绍了
int(x)
float(x)
complex(x,y)
print(int(3.14)) # 输出 3
print(float(3)) # 输出 3.0
print(complex(2, 3)) # 输出 (2+3j)
math模块
math模块提供了很多数学函数,方便数学计算,适用于实数,这里简单列举一些
# 首先导入模块
import math
# sqrt(x),返回x的平方根
print(math.sqrt(16)) # 4.0
# isqrt(x),非负整数 n 的整数平方根
print(math.isqrt(16)) # 4
# factorial(n),将 n 的阶乘作为整数返回。
# 如果n不是正数或为负值则会引发 ValueError
print(math.factorial(5)) # 120
# ceil(x),x向上取整,大于等于x的最小整数
print(math.ceil(5.8)) # 6
# floor(x),x向上取整,小于等于x的最大整数
print(math.floor(5.1)) # 5
cmath模块
cmath模块提供了复数运算的函数,这里也简单列举一些
# 首先导入模块
import cmath
# sqrt(x),返回复数的平方根
print(cmath.sqrt(-1)) # 输出 1j
# exp(x),返回e的x次方,e是自然对数的底数
print(cmath.exp(1 + 1j)) # 输出 (1.4686939399158851+2.2873552871788423j)
# log(x[, base]),返回x的以base为底的对数,没有base,则返回x的自然对数,默认e
print(cmath.log(1 + 1j)) # 输出 (0.34657359027997264+0.7853981633974483j)
random模块
random模块,用于生成随机数
# 导入模块
import random
# random(),返回[0.0 - 1.0之间的随机浮点数]
print(random.random())
# randint(a,b),返回[a,b]之间的随机整数
print(random.randint(10,100))
# uniform(a,b),返回[a,b]之间的随机浮点数
print(random.uniform(1.0, 10.0))
print(random.uniform(11.0, 10.0))
deciml和fractions模块
decimal 模块用于高精度的十进制浮点数运算。
from decimal import Decimal
Decimal(x):创建一个高精度的十进制数。
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 输出 0.3
fractions 模块用于精确的有理数运算。
from fractions import Fraction
Fraction(numerator, denominator):创建一个分数。
a = Fraction(1, 3)
b = Fraction(1, 6)
print(a + b) # 输出 1/2

浙公网安备 33010602011771号