变量和底层逻辑(2021-9-15)
同时定义多个变量
python定义变量的底层逻辑
1、变量
1)同时定义多个变量
1、同时定义多个变量赋相同的值:变量名1 = 变量名2 = 变量名3 =… = 数据
x = y = z = 0
print(x, y, z)
2、同时定义多个变量赋不同的值:变量名1, 变量名2, 变量名3, … = 数据1, 数据2, 数据3, …
name, age, gender = '小明', 18, '男'
print(name, age, gender)
2)变量重新赋值
重新给变量赋值之后,使用变量使用时变量中最新的值
score = 100
print(score)
score = 95
print(score)
3)Pytion定义变量和重新给变量赋值的原理
1、Python在定义变量的时候会申请内)存保存数据,内存申请多大看被保存数据需要多大,重新给变量赋值的时候,会申请新的内存,新的内存的大小由新的数据大小决定,然后变量会和新的内存关联,原来的内存会自动销毁。
2、id(变量) - 获取变量对应的内存地址。
num = 100
print(id(num))
2、运算符
数学运算符:+、-、*、/、%、//、**
1)+、-、*、/和数学中的+、-、x、÷的功能一样
注意:除法运算的运算结果是浮点数
2)%(取余)取模
x % y — 求x除以y的余数
print(15 % 2)
应用1:判断两个数是否存在整除关系 - 判断两个数的余数是否为0
应用2:取整数的低位数
一个整数对10取余,能够获取这个数的个位数一个整数对100取余,能够获取这个数的后两位数
num = 1234
print(num % 10)
3)// - 整除(商向小取整)
print(5 // 2) # 2 2.5 3
print(-5 // 2) # -3 -2.5 -2
应用场景:去掉低位数
print(num // 10) # 123
练习:获取任意一个正整数的百位数
print(num // 100 % 10)
4)** - 幂运算
x ** y -求x的y次方
print(8 ** 3) # 512
print(9 ** 0.5) # 3
print(8 ** (1/3)) # 2
5)比较运算符:>、<、==(等于)、!=(不等于)、>=、<=
所有的比较运算符的运算结果都是布尔值
print(10 > 20)
print(10 < 20)
print(10 == 20)
print(10 = 20) # 错误
print(10 != 20)
print(10 >= 20)
python的比较运算符支持连写表示范围
x = 1
print(0 <= x <= 2)
6)逻辑运算符:and(逻辑与)、or(逻辑或)、not(逻辑非)
1、and
1)应用场景:用于需要多个条件同时满足的时候,相当于生活中的并且
2)运算规则:条件1 and 条件2 - 两个都是True结果才是True,只要一个是False,结果就是False
True and True -- True
True and False -- False
False and True -- False
False and False -- False
练习:写出判断一个是否能同时被3和7整除的条件
num = 22
print('是否能同时被3和7整除:', num % 3 == 0 and num % 7 == 0)
练习:判断指定数是否能被3整除的偶数
num = 12
print('是否能被3整除的偶数:', num % 3 == 0 and num % 2 == 0)
2、or
1)应用场景:用于需要多个条件只要有一个条件满足的时候,相当于生活中的或者
2)运算规则:条件! or 条件2 - 两个条件中只要有一个条件是True,结果就是True,两个都是False的时候才是False
练习1:判断指定数是否能被5或7整除
num = 11
print('是否能被5或7整除:', num % 5 == 0 or num % 7 == 0)
练习2:判断指定的年是否是闰年
year = 2000
print('是否是闰年:', year % 4 == 0 and year % 100 != 0 or year % 400 == 0)
3、not
1)应用场景:对某一个条件进行否定(如果正向写条件很多很复杂,反向却很简单的时候,条件就反向写再加not)
2)运算规则:not条件
not True – False
not False – True
num = 100
print()
练习:写出判断一个数不能同时被3和7整除的条件
1、能被3整除但不能被7整除:num % 3 == 0 and num % 7 != 0
2、能被7整除但不能被3整除:num % 7 == 0 and num % 3 != 0
1、不能被3整除和不能被7整除:num % 3 != 0 and num % 7 != 0
num = 21
print((num % 3 == 0 and num % 7 != 0) or (num % 7 == 0 and num % 3 != 0) or (num % 3 != 0 and num % 7 != 0))
条件反向写:
能同时被3和7整除的条件:num % 21 == 0
不能同时被3和7整除的条件:not num % 21 == 0
print(not num % 21 == 0)
7)逻辑运算符扩展
1、短路操作
and的短路:如果条件1是False,那么条件2对应的代码不会执行
or的短路:如果条件1是True,那么条件2对应的代码不会执行
2、逻辑运算符的通用运算规则
print(True and 100) # 100
print(False and 100) # False
print(True or 100) # True
print(False or 100) # 100
print(7 and 8) # 8
print(not 7) # 7
print(not 0) # 0
(重)重要结论:python任何类型的数据都可以转换成布尔(都有布尔值),其中0值和空值是False,其他都是True
print(bool(0), bool(0.0), bool(''), bool(None))
print(bool(8), bool(-2), bool(0.1), bool(-0.3), bool('abc'), bool(''))
8)赋值运算符:=、+=、-+、*=、/=、%=、//=、**=
1、赋值运算符的作用不是计算出一个结果,而是将数据保存到变量中
2、所有赋值运算符的左边必须是变量
3、=
a = 10
b = 100
4、+=、-=、/=、%=、//=、**=
变量 += 数据 - 将变量中保存的数据和+=后面的数据进行加法运算,将运算结果重新赋值给前面的变量
注意:复合的赋值运算符前面的变量必须是已经赋值过的变量
a += 10
print(a) # 20
a -= 5
print(a) # 15
a %= 4
print(a) # 3
强调:所有的赋值运算是没有结果的
print(a += 10) # 报错
9)运算符优先级:数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符
1、有括号先算括号里面的 - ()
result = 100 + 2 * 3 ** 2 > 20 *10 - 3
print(result)
2、如果布尔数据参与了数学运算,那么False就是0,True就是1
result = 100 + (10 >2)
print(result)