运算符和分支结构
一.给变量赋值的基本原理
当给变量赋值的时候,会先在内存中开辟空间保存数据(开辟的内存空间的大小由数据来决定),然后将数据对应的内存空间和变量进行关联。重新给变量赋值的时候,又会重新开辟空间保存新的数据(开辟空间的大小由新数据决定),然后再将新数据对应的内存空间和变量重新进行关联。
之前的内存空间会自动删除。
补充:id函数:id(变量) - 获取变量的地址
二.运算符
python中的运算符:数学运算符、比较运算符、逻辑运算符、赋值运算符。
1. 数学运算符
有+(加)、-(减)、*(乘)、/(除)、%(取模、取余)、//(整除)、**(幂运算)。
- +、-、*、/和数学中的加减乘除功能一模一样,没有区别。
注意:/的结果是浮点数。 - % - 取余、取模(数学中的求余数)
应用1:判断整数的奇偶性
根据整数对2取余的结果是否是0来判断这个数是否是偶数。
应用2:取整数的低位数
num = 899
print(899 % 10) # 9个位上的数
- // - 整除(商向下取整)
应用:取整数高位数
num1 = 234
print(num1 // 100) # 2百位上的数
练习:将num1中的10位数取出来
num1 = 234
print(234 % 100 // 10)
print(234 // 10 % 10) # 3
- ** - 幂运算
x**y - 求x的y次方
print(2 ** 3) # 8
print(16 ** 0.5) # 4
print(8 ** (1 / 3)) # 2
2.比较运算符
<、>、==、>=、<=、!=(不等于)
所有的比较运算符的结果都是布尔值。
print(10 > 20) # False
在python中的比较运算符支持表示范围的连写方式
age = 18
print(10 <= age <= 28)
3.逻辑运算符
and(逻辑与运算)、or(逻辑或运算)、not(逻辑非运算)。
在实际开发过程中,逻辑运算符的运算对象一般都是布尔值,结果也是布尔值。
- and - 逻辑与运算
- 运算规则:全部都是True结果才是True,只要有一个都是False结果就是False。
True and True - True
True and False - False
False and True - False
False and False - False - 应用:如果希望多个条件同时满足,那么就使用and将条件进行连接。相当于生活中的并且
练习:定义两个变量分别保存一个学生的绩点和操评分,最后根据分数的值打印这个学生是否能拿奖学金。(条件:绩点不低于3.5并且操评分大于90)
是否能拿奖学金:True/False
grade = 3.5
score = 84
print('是否能拿奖学金:', grade >= 3.5 and score > 90)
#是否能拿奖学金: False
- or - 逻辑或运算
- 运算规则:只要有一个True结果就是True,全部都是False结果才是False。
True or True - True
True or False - True
False or True - True
False or False - False - 应用:多个条件中只要有一个满足就行,那么就使用 or
将多个条件进行连接;相当于生活中的或者
练习:判断一个数是否能给被3或者7整除。
num3 = 9
print(num3, '能被3或者7整除:', num3 % 3 == 0 or num3 % 7 == 0)
#9 能被3或者7整除: True
- not - 逻辑非运算
- 运算规则:not 条件
not True - False
not False - True
age = 20
print('是否成年', age >= 18)
print('是否未成年', not age >= 18)
#是否成年 True
#是否未成年 False
练习1:判断一个数是否不能同时被3和7整除
num = 21
print(num, '是否不能同时被3和7整除', not (num % 3 == 0 and num % 7 == 0))
#21 是否不能同时被3和7整除 False
练习2:判断是否为闰年
year = 2020
print(year, '是否是闰年', year % 4 == 0 and year % 100 != 0 or year % 400 == 0)
#2020 是否是闰年 True
- 逻辑运算符的运算对象不是布尔值
表达式1 and 表达式2 - 如果表达式1的布尔值是True,那么整个运算的结果就是表达式2的值;如果是False,整个运算结果是表达式1的值。
表达式1 or 表达式2 - 如果表达式1的布尔值是True,那么整个运算的结果就是表达式1的值,如果是False,整个运算结果是表达式2的值。
print(7 and 8) # 8
print(7 or 8) # 7
所有的为零为空的数据的布尔值是False(0、’’、[]、{}、()、None),其他所有数据的布尔值全部都是True。
print(not 8) # False
- 短路操作
表达式1 and 表达式2 - 如果表达式1的结果是False,程序不会去执行表达式2。
表达式1 or 表达式2 - 如果表达式1的结果是True,程序不会去执行表达式2。
4.赋值运算符
=、+=、-+、*=、/=、%=、//=、**=
所有的赋值运算符最终的目的都是为了给变量赋值,所以赋值运算符的左边必须是变量。
- =
变量 = 数据 - 将右边的数据赋给左边的变量 - 复合的赋值运算符
变量 += 数据 - 将变量中的数据取出来和指定的数据相加求和,然后将这个和重新赋值给变量;变量 = 变量 + 数据
注意:复合的赋值运算符的左边的变量必须是已经赋值过的变量。
5.运算符的优先级
- 数学运算符>比较运算符>逻辑运算符>赋值运算符
- **>*、/、//、%>+、-
- 右括号先算括号里卖的
三.分支结构
流程控制分为顺序结构,分支结构,循环结构。
顺序结构:代码从上往下一条一条的执行(默认);
分支结构:根据不同的条件选择执行或者不执行不同的代码(if语句);
循环结构:让一条或者多条语句重复执行(for循环,while循环)。