Day2 - python的运算符和分支结构

01-运算符

python中支持的运算符:数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算(了解)

  1. 数学运算符:+(加法运算)、-(减法运算)、*(乘法运算)、/(除法运算)、%(取余、取模)、//(整除)、**(幂运算)
  • +、-、、/和数学中的功能一模一样
  • % - 取余、取模(数学中的求余数): x % y - 求x除以y的余数
  • 应用1:判断一个数是否能被另一个数整除
num = int(input('情书入一个数:'))
print(num % 3)
  • 应用2:取整数的低位数
print(231 % 10)
  • // —— 整除(商取整): x // y —— x除以y的商向小取整
print(5 // 2)
print(-5 // 2)
  • 应用:获取高位数、去掉低位数
print(2345 // 100)
  • 练习:任意大于100的数的高位数取其百位上的数字
num1 = int(input('请输入一个大于100的整数:'))
print(num1 // 100 % 10)
print(num1 % 1000 //100)
  • ** —— 幂运算 :x**y ->求x的y次方
print(2 ** 3)
print(3 ** 3)
print(4 ** 0.5)
print(8 ** (1/3))
  1. 比较运算符:>、<、>=、<=、==、!=
    所有的比较运算符的运算结果都是布尔值
    注意:Python中的比较运算符支持连写的方式表示取值范围
age = 24
print(18 <= age <= 28)
  1. 逻辑运算符:and(与)、or(或)、not(非)
  • and —— 逻辑与
    应用场景:相当于生活中的‘并且’,当需要多个条件同时满足的时候使用
    运算规则:都是True结果就是True,只要有一个是False结果就是False
    True and True -> True
    True and False -> False
    False and True -> False
    False and False -> False
    练习:写出一个数是否能够同时被3和7整除的条件
num2 = int(input('请输入一个数:'))
print('是否能同时被3和7整除:',num2 % 3 == 0 and num2 % 7 == 0 )
  • or —— 逻辑或运算
    应用场景:相当于生活中的‘或者’,需要多个条件中只要有一个条件满足的时候使用
    运算规则:都是False结果才是False,只要有一个是True结果就是True
    练习:写出判断闰年的条件
years = int(input('输入年份:'))
print('是否是闰年:', (years % 4 == 0 and years % 100 != 0) or years % 400 == 0)
  • not —— 逻辑非运算
    应用场景: 对某一个条件进行否定
    运算规则: True变False,False变True
    练习:写出不能同时被3和7整除的条件
print(not num2 % 21 == 0)
  • 短路操作
    and 的短路操作:条件1 and 条件2 ——如果是条件1是False,条件2不会执行
    or 的短路操作:条件1 or 条件2 ——如果条件1是True,条件2不会执行
False and print('====')
True and print('+++')
  • 运算对象不是布尔值
    实际开发的时候逻辑运算符的运算对象和运算结果一般都是布尔值,但是面试的时候喜欢考 运算对象不是布尔得情况
    表达式1 and 表达式2 - 如果表达式1的结果是True,那么运算结果就是表达式2的值;
    如果表达式1的结果是False,那么运算结果是表达式1的值
    表达式1 or 表达式2 - 如果表达式1的结果是False,那么运算结果就是表达式2的值
    如果表达式1的结果是True,那么运算结果就是表达式1的值
    注意:如果表达式的值不是布尔,就转换成布尔再判断
    怎么转:python中任何类型的数据都可以转换成布尔值,所有为0为空的值都会转换成 False,其他的值都是True
    布尔值的转换
print(bool(0))
print(bool(100),bool(-1000))
print(bool(''),bool(""))
print(bool(' '),bool('False'))
  1. 赋值运算符:=、+=、-=、/=、%=、//=、**=
    所有的赋值运算符都是用来给变量赋值,赋值运算符的左边必须是变量;
    复合的赋值运算符左边的变量必须是已经赋值过的变量。
  • =
a = 10
  • 复合的赋值运算符
a += 3
  1. 运算符的优先级
    数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符(最低)
    数学运算符:** > * 、/、%、// > +、-
    逻辑运算符:and > or
    如果有括号先算括号里面的内容
  2. *位运算:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移)、<<(左移)
    位运算的运算效率比一般的运算符都要高(高出几十倍到几百倍)
  • 应用1:判断整数的奇偶性 - 数字对1进行按位与运算,如果结果是1就是奇数,0就是偶数
print(28 & 1, 10 & 1, 102 & 1, -20 & 1)
print(11 & 1, 9 & 1, -23 & 1, 1005 & 1)
  • 应用2:
    数字 << N —— 快速乘 2**N
    数字 >> N —— 快速整除 2**N
    数字 << 1 —— 快速乘2:数字*2
    数字 >> 1 —— 快速整除2:数字//2
print(4 << 1, 5 << 1, 5 << 2)
print(4 >> 1, 5 >> 1, -5 >> 1)

02-分支结构

  1. 流程控制
  • 顺序结构
  • 分支结构——if
  • 循环结构——for 、while
  1. 分支结构
  • if单分支结构 —— 满足条件执行某个操作,不满足就不行
    执行过程:
    先判断条件语句是否为True(如果不是布尔值就转换成布尔再判断),
    如果是True就执行代码段,否则代码段不执行
a = int(input('请输入一个数:'))
if a == 10:
   print('hello')

练习:输入一个整数,如果是偶数就打印"这个数能被2整除"

num = int(input('请输入一个数:'))
if num & 1 == 0:
    print('这个数能被2整除')
  • if双分支结构 —— 满足条件执行某个操作,条件不满足执行另一个操作
    练习1:判断奇偶
num1 = int(input('请输入一个数:'))
if num1 & 1:
    print('奇数')
else:
	print('偶数')

练习2:判断成年

age = int(input('请输入年龄'))
if age >= 18:
    print('成年')
else:
    print('为成年')
  • if多分支结构 —— 根据不同的条件执行不同的操作
    练习:输入学生绩点,判断该学生能获得的奖学金等级
    1等奖 绩点 > 4; 二等奖 3.5 < 绩点 < 4 ; 3等奖 3 <= 绩点 < 3.5 ; 2.5 <= 绩点 ❤️
grade = float(input('请输入绩点:'))
if grade > 4:
    print('一等奖')
elif grade >= 3.5:
    print('二等奖')
elif grade >= 3:
    print('三等奖')
elif grade >= 2.5:
    print('四等奖')
else:
    print('没有奖')