运算符
*Python支持的运算符:数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算
一、数学运算符:+(加法)、-(减法)、*(乘法)、/(除法)、%(取余、取模)、//(整除)、**(幂)
- +、-、*、/ 和数学中的 +、-、x、➗的功能一模一样
print(3*7) # 21
print(4/8) # 0.5
- %(取余、取模)
x % y - 求x除以y的余数
print(10 % 5) # 0
print(15 % 2) # 1
应用一: 判断一个数是否能够被另外一个数整除
print(15 % 3) # 0
print(7 % 3) # 1
print(-5 % 3) # 1 需注意
print(8 % 2) # 0 常用于判断是否为奇偶
应用二: 取低位数
num = 819
# 取个位数
print(num % 10)
# 取十位数
print(num % 100)
# 取百位数
print(num % 1000)
- 整除(//)
x // y - x除以y的结果向下取整。
print(7 / 2) # 3.5
print(7 // 2) # 3
print(-7 // 2) # -4
应用:去掉低位数
num = 27383
print(num // 10) # 2738
print(num // 100) # 273
print(num // 100) # 27
练习:获取任意一个整数的十位数
例如 345 -> 4; 18976 -> 7; 6 -> 0
- 方法一:整除10把原数的个位去掉(原来的十位数就会变成新的个位数);对10取余数获取最新的个位数(原来的10位数)
- 方法二: 先用10取余获取所求数的最高位;再整除10获取最高位
print((345 % 100) // 10) # 4 方法一
print((345 // 10) % 10) # 4 方法二
print((18976 % 100) // 10) # 7 方法一
print((18976 // 10) % 10) # 7 方法二
print(6 // 10) # 0
- 幂(**)
**x ** ** y - 求x的y次方
print(4 ** 2) # 16
print(3 ** 2) # 9
print(9 ** 0.5) # 3.0
print(27 ** (1/3)) # 3.0
print(1/2 ** -2) # 4.0
二、比较运算符 ==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)
注意:比较运算符所得结果为布尔值
print(1 == 1) # True
print(1 != 1) # False
print(5 % 2 == 1) # True
print(2 == 2 ** 0) # False 此处优先级 ** > ==
注意: Python支持 0<= x < 10 此类情况,与 C和JAVA不同
x = 10
print(0 < x <= 11) # True
print(11 < x <= 20) # False
三、逻辑运算符:and(逻辑与运算)、or(逻辑或)、not(逻辑非运算)
- and(逻辑与运算)
- 应用场景
如果要求多个条件同时满足,这个时候多个条件用and连接。相当于生活中的并且。 - 规则
True and True -> True
True and False -> False
False and True -> False
False and False -> False
练习:写出判断指定的数是否同时能被3和7整除的条件
num = 21
print(num, '是否同时能够被3和7整除', (num % 7 == 0) and (num % 3 == 0)) # True 法一
print(num, '是否同时能够被3和7整除', num % (3 * 7) == 0) # True 法二
- or(逻辑或运算)
- 应用场景
如果要求多个条件只要有一个满足就行,此时多个条件用or来连接;相当于生活中的或者。 - 运算规则
True or True -> True
True or False -> True
False or True -> True
False or False -> False
练习1:写出判断一个数是否能够被3或者7或者5整除的条件。
num = 15
print(num, "一个数是否能够被3或者7或者5整除: ", num % 3 == 0 or num % 7 == 0 or num % 5 == 0) # True
练习2:写出判定指定的年份是否是闰年
闰年: 情况1 - 年份能被4整除但是不能100整除
情况2 - 年份能被400整除
year = 2000
print(year, "年是否为闰年: ", (year % 4 == 0 and (year % 100 != 0)) or (year % 400 == 0)) #法一
print(year, "年是否为闰年: ", (year % 4 == 0 and not(year % 100 == 0))or (year % 400 == 0)) #法二
- not (逻辑非运算)
- 应用场景
如果要对一个条件进行否定,就使用not
age = 22
print(age > 22) # False
print(not age > 22) # True
print(age <= 22) # True
num = 10
print(not num % 4 == 0) # True
print(num % 3 != 0) # True
练习:写出不能同时被3和7整除的条件
- 情况①:正向思考分以下三种情况(较为麻烦)
1)能被3整除但是不能被7整除
2)能被7整除但是不能被3整除
3)既不能被3整除也不能被7整除
print((num % 3 == 0 and num % 7 != 0) or (num % 7 == 0 and num % 3 != 0) or (num % 3 != 0 and num % 7 != 0)) # 法一 True
- 情况②:反向思考(比较简单)
首先找出能被3和7整除的数,即3和7的倍数 21(3 * 7),最后取非运算
print(not (num % 21 == 0)) # 法二 True
四、逻辑运算符的扩展
- 短路操作
- 逻辑与运算的短路操作:如果第一个条件是False,那么第二个条件对应的语句不会再执行
例 C中 if(a++ < 0 && b++ >0) 如果 a++ < 0 为False 则不会执行b++ - 逻辑或运算的短路操作:如果第一个条件是True,那么第二个条件对应语句不会再执行
例 C中 if(a++ < 0 || b++ >0) 如果 a++ < 0 为True 则不会执行b++
False and print("条件2") # False
print("----------")
False or print("条件2") # 打印条件2
- 数据的布尔测试(掌握)
- 在Python中任何数据类型都可以转化成布尔
- 转化规则:任何为零为空的值都会转换成为False,其他都是True.
- 0 -> False 0.0 -> False 0.000 -> False
‘’ -> False “” -> False None -> False [] -> False {} -> False () -> False - bool(数据) -> 获取指定数据对应的布尔值
print(bool(0)) # False
print(bool(0.0)) # False
print(bool(''),bool(""),bool(None)) # False,False,False
print(bool(10),bool(-1)) # True,True
print(bool(' '),bool(" ")) # True,True
- 运算对象不是布尔值
①在Python中任何类型的数据都可以作为逻辑运算符的运算对象
print(7 and 8) # 8
print(7 or 8) # 7
②数据1 and 数据2 - 如果数据1的布尔值是True,结果就是数据2;如果数据1的布尔值是False,结果就是数据1
print(0 and 10) # 0
print(1 and 2) # 2
print(-3 and 9) # 9
print(None and 'abc') # None
print(False and 100) # False
③数据1 or 数据2 - 如果数据1的布尔值是True,结果就是数据1;如果数据1的布尔值是False,结果就是数据2
print(1 or 2) # 1
print(-3 or 9) # -3
print(None or 'abc') # abc
print(False or 100) # 100
④not 数据1 - 如果数据1的布尔值是True,结果是False; 如果数据1的布尔值是False,结果是True
print(not 100) # False
print(not 'abc') # False
print(not "") # True
五、赋值运算符
赋值运算符:=、+=、-=、*=、/=、%=、//=、*** =
重要结论:赋值运算符的作用是给变量赋值,不会产生结果(数据)!!!
print(10) # 10
print(5 + 5) # 10
print(5 == 5) # True
print(5 and 5) # 5
# print(a = 10) ✖ 这是错误用法
a = 10
print(a) # 10
- =
直接将 = 右边的数据赋值给左边的变量。 (= 的左边必须是变量)
10 = 20 # ✖ 这是错误用法
abc = 20
- +=、-=、*=、/=、%=、//=、**=
变量 += 数据 - 将变量中的值取出来和指定进行加法运算,然后将运算的结果重新赋值给变量
注意:变量必须是已经赋值的变量,即不能为空
num = 125
num += num # num = num + num = 250
print(num) # 250
num -= num # num = num - num = 0
print(num) # 0
num += 20 # num = num + 20 = 20
print(num) # 20
num *= 2 # num = num * 2 = 40
print(num) # 40
num %= 3 # num = num % 3 = 1
print(num) # 1
六、运算符优先级
运算符优先级从高到低: 数学运算 > 比较运算 > 逻辑运算符 > 赋值运算
- 运算符优先级从高到低: 数学运算 > 比较运算 > 逻辑运算符 > 赋值运算
- 数学运算符优先级: ** > *、/、%、// > + 、-
- 有括号先算括号里面,括号只有小括号。
print(4 + 8 / 2 > 5 + 2 * 4 and 8 < 15) # False
num = 10
num += 8 * 2
print(num) # 26
num = 10
num *= 8 * 2
print(num) # 160
# (num = 2) + 4 ✖ 这是错误写法
七、流程控制
流程控制指的是控制程序的执行顺序:
- 顺序结构(默认):代码从上往下一条一条的按顺序执行
print("1")
print("2")
print("3") # 输出顺序:1 2 3
- 选择/分支结构:根据条件选择某个操作 (if语句)
- 解决问题:如果满足某个条件就执行某个操作;如果不满足条件,就执行另外一个操作
- 语法:
if 条件语句:
代码段1
代码段2 # 此时代码段1与代码段2相同缩进,会一起执行
…
else:
代码段3
代码段4 # 此时代码段1与代码段2相同缩进,会一起执行 - 说明:
if - 关键字,固定写法
条件语句 - 任何有结果的表达式(不能是赋值语句)
冒号 - 固定写法,之一是英文的冒号
代码段 - 和if包吃一个缩进的一条或多条语句;满足条件才会执行代码 - 执行过程:
先判断条件语句的布尔值是否为True,如果是就执行代码段,否则代码段不执行
练习1:如果指定的数是偶数就打印’偶数’,否则打印‘奇数’
num = 10
if int(num) % 2 == 0:
print(num, "这是偶数")
else:
print(num, "这是奇数")
num = 10
if num % 2:
print(num, "这是奇数")
else:
print(num, "这是偶数") # 简化版
练习2:如果输入的年份是闰年,就是打印‘闰年’,否则打印‘不是闰年’
year = int(input("请输入年份: "))
# 注意:通过input函数输入的数据类型是字符串,如果要对结果进行数字曹操需要先转换
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(year, "是闰年")
else:
print(year, "不是闰年")
练习3:写一个程序判断一个三位数是否是回文数。
121,232,414 -> 打印回文数
x = input("请输入一个数: ")
if len(x) != 3:
print("您的输入有误")
else:
x = int(x)
if x// 100 == x % 10:
print(x, "是回文数")
else:
print(x, "不是回文数")
- 循环结构:让代码重复执行。(for循环、while循环)