算术运算符
+
: 加法字符串拼接,字符串不能有除去拼接和 N次输出(**)的操作
-
:剑法
*
: : 乘法,对于字符串则为N次输出 如:a*3>>aaa
/
: :除法
%
: 求余
//
: 取整
**
: 幂次
注意点
- 注意靠近0的计算,也就是取整的运算
- 注意浮点数的计算
- 注意复数的计算
- 注意正负数计算
- 浮点数的计算不能基本上不能精确计算,都会存在精度上的差异,因为
整数和浮点数在计算机内部存储的方式不同,整数运算是精确的,浮点数则不是,因为二进制表示十进制浮点数不能做的精确表示
- 但凡有浮点数参与的计算,获得的结果都是浮点数
+ 加法 / 字符串的拼接
- 加法和小学的加法一样,不再过多叙述,下一条
- 字符串只能与字符串进行拼接,并没有像js一样,存在数据类型的隐式转换,字符串只能够字符串拼接,以及重复输出(**)
- 复数的加法:实部与实部相加,虚部与虚部相加,满足交换律,结合律。
- 纯数字也能够与复数相加,实部找实部,虚部找虚部
- 小数点也可以操作哦
a = 21
b = 10
c = 0
d = -12
e = -6;
f = 0.1
g = 1.2
h = 1+2j
i = 3+4j
# add
print(a+b) #31
print(a+c) #21
# print(a+'hello')
#print('10'+10) 字符串除了拼接 和*次数 重复外 没有别的计算
print('10'+'hello') #10hello
print(d+e)#-18
print(h+i) # 4+6j 复数 实部对应相加 虚部对应相加
print(b+h) #11+2j
- 减法
- 减法也与小学一样,不多说
- 字符串不存在相互减,得出相差字符串的概念,会报错的哦,不合法。
- 复数的减法:实部与实部相减,虚部与虚部相减,满足交换律,结合律。
- 纯数字也能够与复数相减,实部找实部,虚部找虚部
- 小数点也也可以进行操作的
a = 21
b = 10
c = 0
d = -12
e = -6;
f = 0.1
g = 1.2
h = 1+2j
i = 3+4j
#devide
print(a-b) #11
#print('hello'-'hell') 字符串没有减法
print(b-a) #-11
print(a-g) #19.8
print(a-i) #18-4j
* 乘法/字符串的N词输出
-
单纯的乘法(复数的乘法有所不同),后面会说到
-
字符串的重复输出
‘a’*10 会输出10个a
,但是输出的次数必须要是整数,不然会报错哦! -
复数的乘法:
(a+bj) * (c+dj)
解法类似与多项式相乘
(a+bj) * (c +dj) = ac +adj +cbj +b * d * j * j
j 为虚数,j * j = -1
所以 最后的结果就是 ac + adj +cbj - bd -
复数小扩展 : 共轭复数 : (一般用于复数的除法运算 )
(a+bj) * (a-bj) = aa -ab +ab +bb = aa +bb
a = 21
b = 10
c = 0
d = -12
e = -6;
f = 0.1
g = 1.2
h = 1+2j
i = 3+4j
print(a*b) #210
print(a*g) #25.2
print(a*h) #21+42j
print('a'*10) #aaaaaaaaaa
#print('a'*1.1) 重复需要整数的参数
print(h*i) #-5+10j
print(10*0) #0
/ 除法 精确除法
/
除法和小学一样的哦 不多说了 答案是多少 就输出多少- 会求出小数点,保留几位小数呢? 格式化的时候是保留6位精度的 。保留小数具体位数好像适合计算机配置有关?具体情况稍后百度
- 没有向下取整的情况
- 复数的除法,一般会同时乘以分母的共轭负数进行简化,再变成乘法进行计算,即:
(a+bj)/(c+dj)
=(a+bj)(c-dj)/(c+dj)(c-dj)
a = 21
b = 10
c = 0
d = -12
e = -6;
f = 0.1
g = 1.2
h = 1+2j
i = 3+4j
print(a/b) #2.1
print(0/1) #0
print(-0.5/2) #-0.25
# print('a'/'a') No
print(h/i) # 0.44 +0.08j
% 求余(取模) 或 输出格式化
- 输出格式化看另一篇文章~ print的使用
- 小数的求余数:精度会有多位 ,正常输出,负数的求余看下面。并且小数进行计算的时候会存在精度问题,
二进制不能精确表示十进制的浮点数,所以会存在精度差异
- 负数求余:
x % y = (x -(( x // y)*y)
其中//
的含义是除法,得出的得数进行向下取整,即向更小的数取整。即朝-x方向取整
- 负数求余数 : 利用负数求余数公式即可,主要标记
向下取整
print(-10%3) # (-10 - (-10//3*3)) = -10 -(-4*3)=2
- 复数的求余数
can't mod complex numbers. 无法修改复数
- 字符串求余数
not all arguments converted during string formatting
被认为是字符串的格式化 所以也是不行的
print(a%b) #1 求余数
print(1.1%5) #1.1
print(-40%5) #0
print(-10%3) # (-10 - (-10//3*3)) = -10 -(-4*3)=2
print(10%3) #1(10 - 10//3*3) =1 向下取整数
print(-10.1%3) #1.9000 (-10.1 -(-10.1//3*3)
print(-10.1//3) #-4
print(-10.1//3*3) #-12.0
print(-10.1+12.0) #1.9000000000000004
#小数的加减有精度问题 会出现多位小数
#print((1+2j)%2) 无法修改i复数
#print(2j%2)
#print('12'%2) 被认为是字符串的格式化 所以报错
// 取整数 向下取整 -x方向取整
- 整数取整:相当于除法
- 所有的取整都是向下取整,
不存在四舍五入的方法
- 边界值
0
同样也是向下取整 - 负数取整 : 向下取整
- 小数取整 : 向下取整
- 复数取整 :
can't take floor of complex number.
复数不能取整 - 字符串取整 No
print(a//b) #2 求整数 看如何取
print(1//2) # 0.5 =0
print(12//3.3)# 3
print(0.9 // 3) # 0.0
print(-1.1 // 5) # -0.22 = -1
print (-0.2//2) #-0.1 -1.0
print(0.2 //2) #0.1 0.0
# print((1+2j) //2) No
# print('11'//2) No
** 幂运算
- a ** b :a、b 都可用小数
- 复数可以幂运算 相当于多个数据相乘
- 负数、小数均可
print(a**b) #1667988... 幂次
print(2**3) # 8
print(1.1 **3)#1.331...
print(2 **2.1) #4.4
print((1+2j)**2) # -3+4j
# print('str'**2) No 不能
print(-2**2)
复数的加减乘除
(1) 加法:实部与实部相加,虚部与虚部相加。有纯实数,也有纯虚数,对应部位相加即可。
(a+bj)+(c+dj)=(a+c)+(b+d)j
(2)减法:变换加法符号即可,运算一样。
(3)乘法:类似多项式相乘
,注意j * j = -1
即可
(a+bj) * (c*dj) = ac +adj +bcj +bdjj
注意约分
(4)除法:化为分子分母形式,同时乘分母的共轭复数,进行约分。(a+bj)/(c+dj)
= (a+bj)(c-dj)/(c+dj)(c-dj)
注意j * j = -1
即可
(5)共轭复数:只是变换符号即可~
(a+bj) * (a-bj) = aa -ab +ab +bb = aa +bb
赋值运算符
和上诉无太大差别,只是能简写
补充海象运算符:能够在判断语句中使用表达式,避免代码的多次调用if num := len(n)>10
https://blog.csdn.net/qq_40244755/article/details/102685199
后面补 先mark一下 目前用的3.6 要升级到3.8