运算符
print(3*3) #*:乘号 9
print(3**4) #**:次方
print(50-5*6) #20
print((50-5*6)/4) #:5.0
print(9/3) #/:除以 返回的是浮点数
print(10/3) #计算机(二进制010101)二进制的有穷性 3.3333333333333335
print(10//3) #//:整除 向下取整 3.3333333333333335 取3
print(-10/3) #-3.3333333333333335
print(-10//3) #-3.3333333333333335 向下取整-4
print(10%3) #%:模,取余 10//3=3余1 3*3=9 10-9=1
print(-10%3) #-10//3=-4向下取整 -4*3=12 -10-(-12)=2
x = 10
y = 3
print(divmod(x,y)) #divmod(x,y) -->(x//y, x%y) -->(商,余数)
print(5.4-3) #2.4000000000000004 并不是python的bug,而是因为在计算机中做计算要转换为二进制,
# 那计算完之后,又将结果转换为十进制呈现,所以产生的精准误差
#解决精度问题,内置模块decimal
#import decimal #导入decimal模块
from decimal import Decimal #从decimal模块中导入decimal类
print(Decimal('5.4')-Decimal('3')) #2.4
print(Decimal(5.4)-Decimal(3)) #2.400000000000000355271367880
num = Decimal('5.4')-Decimal('3')
print(int(num)==2.4)
print(type(num))
#赋值运算符
# += (x+= 3 相当于 x = x + 3 )
# -= (x -= 3 相当于 x= x - 3 )
# *= (x *= 3 相当于 x = x* 3 )
# **= (x **= 3 相当于 x = x ** 3 )
# /= (x /= 3 相当于 x = x/ 3 )
# //= (x //= 3 相当于 x = x // 3 )
# %= (x %= 3 相当于 x= x % 3
#比较运算符 使用ord('123') 进行验证
# == 比较两个对象的值是否相等
# != 比较两个对象的值是否不相等
# is 比较两个对象是否是同一个对象,比较的是对象的id
# is not 比较两个对象是否不是同一个对象,比较的是对象的id
res = 3 == 3
res = 'python' == 'python'
res = 1 == True #bool True 实际就是1的值 False实际就是0的值
res = 1 + True #2
res = 1 is True #False
print(res)
#not 逻辑非 not可以对符号右侧的值进行非运算,对于布尔值,非运算会对其进行取反操作,True变False,False变True
#除了 0 空串 None和一些表示空性的值会转换False,其余的所有都可以转为True
a = 1
a = not a
#a = not 0
#a = not None
a = not ''
a = not []
print(a)
#and 逻辑与
# and可以对符号两侧的值进行与运算。
# 只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False
# 与运算是找False的,如果第一个值为False,则不再看第二个值
#or 逻辑或
# 或运算两个值中只要有一个True,就会返回True
# 或运算是找True的
#总结
# 1. not 取反操作
# 2. and 只有两个值都为True的时候才会返回True,有一个False就会返回False
# 3.or 只要一个值为True就会返回True,只有两个都是False才会返回False