1、变量
1.1、什么是变量和变量的声明?
- 变量是用来申请空间保存数据的(变量就是用来存数据的)
1.1.1、声明变量的语法
变量名 = 值
- 声明完变量后,使用变量就相当于使用变量存储的值
说明
- 变量名:
a、程序员自己命名的
b、要求:标识符;不能是关键字
c、规范:见名知义;满足PEP8命名规范(所有字母都小写,多个单词用下划线隔开);不能使用系统提供的函数名、类名库名等来给变量命名; - 赋值符号(=):将右边的数据赋给左边的变量
- 值:任何有结果的表达式:
eg:数据、已经声明过的变量、运算表达式等
age = 20
if age > 18:
print('老了啊')
1.2、变量的使用
- 使用变量就是使用变量中的值;
- 变量中的值可以修改;
age = 18
print(age)
age = '大帅'
print(age)
1.3、同时声明多个变量
- 同时声明多个变量赋相同的值
变量1 = 变量2 = 变量3 = ... = 值
a1 = a2 = a3 = 10
print(a1, a2, a3)
- 同时声明多个变量赋不同的值
变量1, 变量2, 变量3, ... = 值1,值2,值3,...
b1, b2, b3 = 12, 21, 23
print(b1, b2, b3)
1.4、python声明变量的原理
- 先开辟空间存储数据(存储数据需要多大的内存就开辟多大的内存空间,然后再将变量和这个数据对应的内存空间关联到一起)
变量三要素(a = 10): - 值(变量) : 给变量赋值的数据(10)
- 类型(type) : 给变量赋值的数据的类型(int)
- 地址(id) : 给变量赋值的数据在内存中的地址,也是变量中真正存储的东西(0xff)
a = 10
print(a, type(a), id(a))
a = 11
print(a, type(a), id(a))
- 注意: 用一个变量给另一个变量赋值的时候,是将原来的变量中的数据的地址赋给另一个变量;复制完成后,数据还是只有一个。**
b = a
print(id(a), id(b))
2、运算符
- python支持的运算符:数学运算符、比较运算符、逻辑运算符、赋值运算符;位运算
2.1、数学运算符
- 符号:+、 -、 *、 /、 %、 //、 **
2.1.1、加(+)、减(-)、乘(*)、除(/)功能与小学数学中的功能一样
2.1.2、% 求余数(取余、取模)
- 应用1:判断整数的奇偶性 --> 这个数对2取余是否为0
print(15 % 2)
print(20 % 2)
- 应用2:是否整数 --> 判断余数是否为0
- 应用3:取低位数 --> 获取一个整数的位数
num = 123
print(num % 10) # 3
print(num % 100) # 23
2.1.3、// 整除(商只取整数部分)
print(5 // 2) # 2
print(3.9 // 3) # 1.0
2.1.4、** 幂运算 --> x**a(x的a次方)
print(2 ** 3)
print(16 ** (1 / 2))
print(8 ** (1 / 3))
2.2、比较运算符
- 所有的比较运算符的运算结果都是布尔值
- 符号:>、<、==、!=、>=、<=
2.2.1、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)功能与小学数学中的功能一样
print(10 > 20) # False
print(10 < 20) # True
2.2.2、== 判断两个值是否相等; != 判断两个值是否不相等
print(10 == 10) # True
print(10 != 10) # False
2.2.3、python中可以像数学一样用比较运算符连写的方式表示范围(Java/C/Js等不可以)
age = 20
print(18 < age < 23)
2.3、逻辑运算符
- 逻辑运算符的运算对象和结果一般都是布尔值
- and(与) or(或) not(非)
2.3.1、and 一假为假
- 运算规则:两个都是True的结果才是True,只要有一个为False的结果就是False
- 使用场景:需要多个条件同时满足的时候就用and;相当于生活中的and
# eg:获取奖学金的条件是gpa不低于4,成绩大于90
gpa = 4.5
score = 90
print('获取奖学金的条件', gpa >= 4 and score > 95)
# 练习:判断一个数是否能够同时被3和7整数,
num = 35
print('判断一个数是否能够同时被3和7整数', num % 3 == 0 and num % 7 == 0)
print('判断一个数是否能够同时被3和7整数', num % 21 == 0)
2.3.2、or 一真为真
- 运算规则:两个都是False的结果才为False,只有一个为True的结果就是True
- 应用场景:需要多个条件中有一个条件满足就行,就使用or;相当于生活中的or
# eg:获取奖学金的条件是gpa不低于4或者成绩大于90
gpa = 4.5
score = 90
print('获取奖学金的条件', gpa >= 4 or score > 95)
2.3.3、not 对某个条件进行否定
- 运算规则:True变成False,False变成True
- 使用场景:对某一个条件进行否定
# 一个数不能同时被3和7整除的条件
num = 34
print('不能同时被3和7整除的条件', not (num % 3 == 0 and num % 7 == 0))
print('不能同时被3和7整除的条件', not (num % 21 == 0))
2.3.4、短路操作
- and短路操作:条件1 and 条件2
and前面的那个条件如果结果是False,那么后面的条件语句不会执行,结果只能是False - or短路操作:条件1 or 条件2
or前面的那个条件如果是True,那么后面的条件不会执行,结果直接是True
2.4、赋值运算符
- =、+=、-+、=、/=、%=、//=、*=
- 所有的赋值运算符的左边必须是变量,
- 组合赋值运算符的左边除了是变量之外,这个变量还必须是声明过的
2.4.1、变量 = 值 将右边的值赋给左边的变量
2.4.2、变量 += 值 变量 = 变量 + 值
a = 10
a *= 4/2 # a=20.0
print(a)
a **=2
print(a)
2.4、赋值运算符
- 数学运算符 > 比较运算符 > 逻辑运算符 >赋值运算符(最低)
- 数学运算符的优先级:** * / // % + -
3、位运算
- 位运算:&(与)、|(或)、~(取反)、^(异或)、<<(左移)、>>(右移)
- 所有的位运算的运算规则都是针对数字的补码进行操作的;
- 特点:快(效率高)
3.1、&(按位与)
- 按位:有0为0
- 运算规则:补码的每一位上的数都是1结果就是1,如果有一个0结果就是0
- 应用:高效判断数字的奇偶性 --> 让数字和1进行按位与运算,判断结果是0(偶数)还是1(奇数)
eg:1101 & 0111 = 0101
a = 3 & 2 # a=2
'''
3: 00000011
2: 00000010
'''
print(a)
print('--->',3&1, 4&1, 7&1)
b = -7 & 3 # b = 1
print(b)
'''
-7 = 10000111(原码)-->1111 1001(补码)
3 = 0000 0011(补码)
00000001 --> 1 # 因为是整数,原码、反码、补码一致
'''
3.2、|(按位或)
- 按位:有1为1
- 运算规则:每一位上的数如果全是0结果就是0,只要有1就是1
eg:1101 | 0111 = 1111
b = -7 | 3 # b = 1
'''
-7: 11111001(补码)
3: 00000011(补码)
11111011(补码) -> 11111010(反码) -> 10000101(原码) --> -5
'''
print(b)
3.3、~
- 按位:取反
- 运算规则:将每一位上的0变成1,1变成0
~ 1101 --> 0010
# -7:11111001(补码) --> 00000110
print(~-7)
3.4、^
- 运算规则:每一位上的数相同为0,不同为1
1101 ^ 0011 = 1110
3.5、<<
- 数字 << N --> 指定的数字的补码整体向左移动N位;
- 公式:数字2*N
print(3<<3) # 3 * 2**3
print(-4<<3) # 3 * 2**3
3.6、>>
整除:负数除不尽的情况下向下取整
- 数字 >> N --> 指定的数字整除2的N次方
- 公式:数字//2**N
print(8>>2) # 2 8//2*2
print(9>>2) # 2 9//2*2
print(-9>>2) # -3 -9//2*2 向下取整
网友评论