运算符和分支结构
1.运算符
1.数学运算符:+、-、*、/、%(取余、取模)、//(整除,向上取整)、**(幂运算)
2.比较运算符:>、<、>=、<=、==、!= (所有的比较运算符的运算结果都是布尔值)
3.逻辑运算符:and(逻辑与)、or(逻辑或)、not(逻辑非)
not - 逻辑非
应用场景:对一个条件进行否定;如果一个条件正向写很麻烦,但是反向写很简单,就反向写条件然后加not;
运算规则:True变False,False变True;
1)短路操作:
and 的短路操作:条件1 and 条件2 - 如果条件1是False,那么条件2对应的代码不会执行
or 的短路操作:条件1 or 条件2 - 如果条件1是True,那么条件2对应的代码不会执行
# 验证
True and print('=-=') # =-=
False and print('=+=') # False
True or print('+++') # True
False or print('---') # ---
2).运算对象不是布尔值
如果表达式的值不是布尔,就转换成布尔再判断;
所有为0
和为None
的值为False,其他值都是True(python中所有的数据都可以转换成布尔值
)
4.赋值运算符=、+=、-=、*=、/=、%=、//=、**=
所有的赋值运算都是用来给变量赋值,赋值运算符的左边必须是变量;
复合的赋值运算左边的变量必须是已经赋值过的变量。
5.运算符的优先级
数学运算符(最高) > 比较运算符 > 逻辑运算符 > 赋值运算符(最低)
数学运算符:** > *、/、%、// > +、-
如果有括号,先算括号里面的内容。
*6.位运算:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移)、<<(左移) - 二进制
# 应用1:判断整数的奇偶性 - 数字对1进行&(按位与)运算,如果结果是1就是奇数,如果结果是0就是偶数
print(18 & 1, 100 & 1, -20 & 1) # 0 0 0 0
print(11 & 1, 109 & 1, -27 & 1) # 1 1 1 1
# 应用2:数字 << N -快速乘 2 ** N ; 数字 >> N -快速整除 (//)2 ** N
print(4 << 1, 4 << 2) # 8 16
print(4 >> 1, -5 >> 1) # 2 -3
2.分支结构
1.if单分支结构 - 满足条件执行代码段,不满足不执行
语法:
if 条件语句:
代码段
说明:
- if - 关键字,固定写法;
2.条件语句 - 任何有结果的表达式:任何类型数据、除赋值语句以外的运算符表达式、函数调用表达式;
3.:(冒号) - 固定写法。(python中冒号后面一般都需要换行后产生缩进来表示代码块);
4.代码段 - 和if保持一个缩进(按Tab)的一条或者多条语句;
在满足条件的时候才会执行的代码段;
执行过程:先判断条件语句是否为True(如果不是布尔值,就转换成布尔值再判断),如果为True,执行代码段;
if 100:
pass
if 'abc':
pass
if 10 + 20:
pass
a = 100
if a % 2 + 3:
pass
# if后面不能是赋值语句,if语句代码段至少要有一条语句,在不确定的时候可以先用pass占位;
- if双分支结构 - 满足条件执行某个操作,不满足执行另外一个操作
if 条件语句:
代码块1(满足条件要执行的代码)
else:
代码块2(不满足条件要执行的代码)
执行过程:
先判断条件语句是否为True,如果是,执行代码块1,否则执行代码块2;
# 练习3:输入年份,根据年份值打印 '闰年' 或者 '非闰年'
year = int(input('请输入年份:'))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print('闰年')
else:
print('非闰年')
- if多分支结构 - 根据不同的条件执行不同的操作
if 条件语句1:
代码块1
elif 条件语句2:
代码块2
elif 条件语句3:
代码块3
…
else:
代码块N
执行过程:
先判断条件语句1是否为True,如果是直接执行代码块1,然后if语句直接结束;如果为False,就判断条件语句2是否为True,如果是就执行代码块2,if语句结束;以此类推…
如果前面的条件语句都不满足,则执行else后面的代码块。
# 练习:输入学生的绩点,判断该学生能奖励几杯奶茶
"""
4杯:绩点 > 4
3杯:3.5 <= 绩点 <= 4
2杯:3 <= 绩点 < 3.5
1杯:2.5 <= 绩点 < 3
想都不要想:绩点 < 2.5
"""
grade = float(input('请输入学生的绩点:'))
name = str(input('输入学生的姓名:'))
if grade > 4:
print(name, '奖励4杯奶茶', sep='')
elif 3.5 < grade <= 4:
print(name, '奖励3杯奶茶', sep='')
elif 3 < grade <= 3.5:
print(name, '奖励2杯奶茶', sep='')
elif 2.5 < grade <= 3:
print(name, '奖励1杯奶茶', sep='')
else:
print(name, '想都不要想', sep='')