DAY02 变量和运算符
一.变量
1.1 认识变量和定义(创建)变量
1.1.1 认识变量
变量:用来保存数据(在程序中使用的数据的时候,不要直接用,而是先用变量把数据存起来,然后通过使用变量来使用数据)
1.1.2 定义变量
定义变量(创建变量):将数据保存到变量中
语法:变量名 = 数据
-
变量名:
由程序员自己命名;
要求:是标识符不是关键字
规范:
-
见名知义(看到变量名就大概知道变量中保存的是什么数据)
-
不使用系统的函数名、类名和模块名(注意:如果使用,会导致他们本身的功能消失)
-
所有的字母都小写,多个单词之间用下划线隔开(也可以使用驼峰式命名)
-
-
= :
赋值符号(固定写法)
-
数据 :
可以是任何有结果的表达式,例如:具体的某个类型的数据、有结果的运算表达式、已经赋值过的变量
# print = 100 print函数无法使用
# int = 20 int做类型转换无法使用
dog_name = '汪' # PEP8命名规范
dogName = '汪汪' # 驼峰式命名
1.2 使用变量
使用变量就是使变量中保存到数据
x = 100
y = 200
print(x)
print(y)
1.3 重新给变量赋值
重新赋值数据类型可变
xx = 100
print(xx)
xx = 200
print(xx)
xx = 'abc'
print(xx)
xx = True
print(xx)
1.4 同时定义多个变量
- 同时定义多个相同的变量赋相同的值:变量1 = 变量2 = 变量3 = …
- 同时定义多个相同的变量赋不同的值:变量名1, 变量名2, 变量名3,… = 数据1, 数据2,数据3,…
x1 = x2 = x3 = 100
print(x1, x2, x3)
y1, y2, y3 = 10, 20, 30
print(y1, y2, y3)
1.5 应用:交换变量的值
# 方法一:
m = 10
n = 20
t = m
m = n
n = t
print(m, n)
# 方法二:
m = 10
n = 20
m, n = n, m
print(m, n)
二.定义变量和重新给变量赋值的底层原理
-
Q:python定义变量不需要写类型
A:python定义变量申请内存的时候,内存申请多大看数据需要多大,不看类
-
Q:重新赋值的时候为什么可以赋不同类型的值
A:重新赋值的时候会重新申请新的内存
b = 20
b = 'abc'
b = [10, 20, 30]
- Q:为什么python可以直接计算9999**9999
A:申请内存的时候会提前计算存储这个数据需要多大的内存,需要多大就申请多大
补充1:获取内存地址的工具:id(变量)
x = 100
print(id(x))
x = 1000
print(id(x))
补充2:计算机内存单位
位(bit)
1字节(bytes) = 8位
1Kb = 1024字节
1Mb = 1024Kb
1Gb = 1024Mb
1T = 1024Gb
三.数学运算符
数学运算符:+、-、*、/、%、//(整除)、**(幂运算)
3.1 +、-、*、/
功能与数学中的功能一模一样
注意:+、-、*操作,如果操作数据中有浮点数结果就是浮点数
/的结果一定是浮点数
print(5 + 2)
print(5 - 2)
print(5 * 2)
print(5 / 2)
3.2 % - 取余,取模
x % y - 求x除以y的余数
print(10 % 3)
- 应用场景一:判断整除关系(判断一个数是否能够被另外一个数整除)
如果两个数存在整数关系,那么他们的余数是0
num = 214
print(num % 2)
- 应用场景二:取整数的低位数
num = 321
print(num % 10) #1
print(num % 100) #21
print(10 // 3, 10 % 3) # 3 1
print(-10 // 3, -10 % 3) # -4(向下取整) 2
3.3 // - 整除
x // y - 求x除以y的商,商向小取整
print(5 // 2) # 2
print(-5 // 2) # -3
- 应用场景一:(在知道两个数能整除的情况下)快速获取整型求商的结果
nums = [28,34,45,54,65,14,45,41]
# print(nums[len(nums) / 2]) /结果是浮点型,列表取数必须是整数下标
print(nums[len(nums) // 2])
- 应用场景2:整数去掉低位数,保留高位数 - 对10或者10的N次幂进行整数操作
print(324 // 10)
print(3.14 // 3) # 1.0
print(3.14 / 3)
练习:获取num的十位数
num = 367892
y_num = num % 100
print(y_num)
print(y_num // 10)
方法1:
print(num // 10 % 10)
方法2:
print(num % 100 // 10)
3.4 ** - 幂运算
x ** y - 求x的y次方
print(2 ** 3)
print(4 ** 0.5) # 2
print(8 ** (1/3)) # 2.0
print(2 ** -2) # 0.25
四. 比较运算符
比较运算符 :>, < , >=, <=, ==, !=
- 所有的比较运算符的结果都是布尔
# 判断num是否能被4整除
num = 23
print(num % 4 == 0)
# 判断num是否是浮点数
num = 2.34
print(type(num) == float)
# 判断是否成年
age = 23
print('是否成年:', age >= 18)
num = 0.3
print(0 <= num <= 1)
# print(num >= 0 and num <= 1)
- python比较运算符支持连写表示范围
num = 0.3
print(0 <= num <= 1)
# print(num >= 0 and num <= 1)
五. 逻辑运算符
逻辑运算符:and, or, not
5.1 and(逻辑与运算)
- 应用场景:用于连接要求同时满足的多个条件,相当于生活中的并且
- 运算规则:条件1 and 条件2 - 两个条件都是True,结果就是True;只要有一个是False结果就是False
# 获取奖学金的条件:绩点不低于3.5,并且操评分大于90
gpa = 3.5
score = 95
print('是否能获取奖学金:', gpa >= 3.5 and score > 90)
# 练习1:判断num是否能够同时被3和7整除
num = int(input("请输入数字:"))
print('num是否能够同时被3和7整除:', num % 3 == 0 and num % 7 == 0)
print('num是否能够同时被3和7整除:', num % 21 == 0)
5.2 or(逻辑或运算)
- 应用场景:如果两个或者多个条件中主要有一个满足就行,就用or来对这些条件进行连接,相当于生活中的或者
- 运算规则:条件1 or 条件2 - 两个条件只要有一个是True结果就是True,两个都是False结果才是False
num = int(input("请输入数字:"))
print('num是否能够被3或者7整除:', num % 3 == 0 or num % 7 == 0)
# 练习:判断指定的年是否是闰年
# 闰年分为普通闰年和世纪闰年两种,
# 普通闰年 - 能被4整除但是不能被100整除的年;世纪闰年 - 能被400整除的年
year = int(input("请输入年份:"))
print("是否是闰年:", (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0))
5.3 not(逻辑非运算)
- 应用场景:如果一个条件正向写情况很多很复杂,反向写却很简单的时候,我们就将条件反向写,再加not
- 运算规则:not 条件 - 对指定条件进行否定
age = 23
# 年龄不大于等于18
print(not age >= 18)
# 判断num是否不能同时被3和7整除
print(not num % 21 == 0)
# 判断x是否不是数字类型
x = '12'
print(type(x) != int and type(x) != float)
六. 赋值运算符
赋值运算符:=, +=, -=, *=, /=, %=, //=, **=
注意1:所有的赋值运算符都是将某个数据保存到某个变量中
注意2:所有的赋值运算都没有结果 print(a = 10) 报错
6.1 =
变量 = 数据 (将右边的数据保存到左边的变量中)
a = 10
6.2 +=, -=, *=, /=, %=, //=, **=
变量 += 数据 (将变量中保存的数据和+=后面的数据进行加法运算,然后将运算结果再赋值给变量)
注意:这儿的变量必须是已经赋值过的变量
c = 10
c += 2
print(c) # 12
(其余同理)
6.3 运算符优先级
- 数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符(最低)
- 数学运算符中:** > *、/、%、// > +、-
- 有括号先算括号里面的