python支持的运算符:数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算
包括:加(+)、减(-)、乘()、除(/)、取余或者取模(%)、整除(//)、幂运算(**)
1)加(+)、减(-)、乘()、除(/)和数学中的加减乘除功能一样
print(5 / 3) # 在C语言中5/3=1
print(5 % 2) # 1
# 获取num的个位数
print(674 % 10) # 4
2)整除(//)
求商,取商的整数部分,它是向下取整 5.76->5、-4.13->-5
print(5//2) # 2
print(-5//2) # -3
3)幂运算(**)
M ** N -> 计算M的N次方
print(3 ** 2) # 9
比较运算符(关系运算符):> < == >= <= !=
注意:1.所有比较运算的结果都是bool值
2.数字数据不能和字符串数据进行比较
print(10 > 5) #True
print(10 < 2) #false
#print(10 <> 3) #语法错误
print(10 != 3) #True
python中支持比较运算符的连写来表示范围
x = 10
print(0 < x < 100)
python的逻辑运算符:逻辑与运算(and)、逻辑或运算(or)、逻辑非运算(not)
1)运算规则:
操作对象都是布尔值:两个都是True,结果才是True,只要有False,结果就是False
2)应用场景:希望两个或者多个条件同时满足才做什么事情。
#写出学生是否能拿奖学金,绩点大于4,且操行分大于85
grade = int(input('请输入成绩:'))
score = int(input('请输入操行分:'))
if grade > 4 and score >85:
print('满足条件,能拿奖学金')
else:
print('不能拿奖学金')
1)运算规则
操作对象都是布尔值:只要有一个对象是True结果就是True,所有对象时False,结果才是False
2)应用场景:希望两个或者多个条件只要有一个满足就可以使用逻辑或运算
#写出判断指定的年是否是闰年的条件
year = 2012
result = ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0)
print(year, '年是否是闰年:', result)
1)运算规则:True变False,False变True
2)应用场景:不满足某个条件就做什么
age = 18
print('是否成年:', age >= 18)
print('是否成年:', not age < 18)
# 写出num是否不能同时被3和7整除
num = int(input('请输入一个数:'))
result = not (num % 3 == 0 and num % 7 == 0)
print(result)
逻辑运算符语法上可以操作任何数据
数据1 and 数据2
数据1的布尔值是true结果是数据2,数据1的布尔值是false结果是数据1
print(1 and 'abc') # 1
print('abc' and 'hello') # abc
print(0 and 'abc') # 0
print(False and 100) # False
print('' and 'abc') # ''
补充:数据的布尔值怎么确定 - 所有为零的值都是False,其他数据的布尔值都是True
数据1 or 数据2
如果数据1的布尔值是True,结果是数据1;如果数据1的布尔值是False,结果是数据2
print(1 or 'abc') # 1
print(7 or 8) # 7
print(0 or 'abc') # abc
print(not 1) # False
print(not 0) # True
print(not 'abc') # False
and 的短路操作:
表达式1 and 表达式2 -> 如果表达式1结果是False,表达式2不会执行
def func1():
print('函数被执行')
print(False and func1()) # 不被执行
print(True and func1()) # 被执行
or的短路操作:
表达式1 or 表达式2 -> 如果表达式1结果是True,表达式2不会执行
print(True or func1()) # 不被执行
print(False or func1()) # 被执行
1)所有的赋值运算符都是用来给变量赋值的
2)所有的赋值运算符左边都必须是变量,复合赋值运算符左边的变量必须是已经赋值过的变量
3)所有赋值运算符的右边都可以是任意有结果的表达式
a = 10
变量 += 数据 -> 变量 = 变量 + 数据
变量 -= 数据 -> 变量 = 变量 - 数据
变量 /= 数据 -> 变量 = 变量 / 数据
变量 %= 数据 -> 变量 = 变量 % 数据
变量 //= 数据 -> 变量 = 变量 // 数据
变量 **= 数据 -> 变量 = 变量 ** 数据
a.数学运算符 > 比较运算符 > 赋值运算符(最低)
b.** > *,/,%,// > +,-
c.有括号先算括号
特点:效率高,内存消耗少;所有的位运算都是直接操作数据在***内存中存储的补码***
按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)
数字1 & 数字2 - 两个都是1,结果才是1,否则结果是0
某一位上的数和1与可以对这一位上的数进行保存,和0与会对这一位进行置0操作
5:00000101(补)
9:00001001(补)
5 & 9: 00000001 -> 1
print(5 & 9) # 1
-5:10000101 -> 11111011(补)
-9:10001001 -> 11110111(补)
-5 & -9:11110011(补)-> 10001100(反) -> 10001101(原) -> 13
注意:对补码求补就是原码
应用: 判断数字的奇偶性
让被判断的数和1进行按位与运算,结果是0则是偶数,否则是奇数
print(28 & 1) # 偶数
print(13 & 1) # 奇数
数字1 | 数字2 - 只要有一个是1,结果就是1;两个都是0结果就是0
print(7 | -16)
数字1 ^ 数字2 - 不同为1,相同为0;对异或再进行异或就是原值
print(18 ^ 9)
~ 数字 - 取反
应用:快速的,高效率的乘以或者除以2的次方数
数字1 >> 数字2 - 数字1 // 2 ** 数字2
数字1 << 数字2 - 数字1 * 2 ** 数字2
print(6 << 2) # 等于6*2**1 24
print(3 << 2) # 等于3*2**2 12
print(6>>1) # 等于6//2**1 3