day02 变量&运算符
一、变量
1.提供数据的方式
- 直接提供数据:不清楚数据意义;重复使用时需要反复写;修改麻烦
- 将数据保存到变量中,通过使用变量使用数据
age = 18
print(age) # 18
score1 = 88
score2 = 99
print((score1 + score2) / 2) # 93.5
msg = '红红火火恍恍惚惚' # 红红火火恍恍惚惚
print(msg)
msg = '嘻嘻嘻哈哈哈哈'
print(msg) # 修改方便 嘻嘻嘻哈哈哈哈
2.定义变量/创建变量
-
将数据保存到变量中
-
变量作用 - 保存数据
-
语法 - 变量名=数据
-
说明 :变量名 - 程序员自己定义
要求 - 标识符且不是关键字
规范 - 见名知义(看见变量名就大概知道保存的是什么数据)
不使用系统函数名(print、input()、type()…)、类名(int、float、bool、str)
所有字母小写,多个单词之间下划线隔开
- 需要保存到变量的具体数据 ,可以是某种具体的数据或者具体的结果
name = '懒洋洋'
address = '青青草原'
# print = 100
# print(print) # 用系统函数做变量,运行不报错,但是print函数原本功能失效;
int = 52
# print(int(10.5)) # 报错,且int失效
dog_name = '来福'
dogName = '乖乖' # 小驼峰写法
result = 100 + 20
print(result)
3.使用变量
- 使用变量中保存的数据(使用变量就是使用变量中保存的数据)
- 数据可以做的事情,保存数据的变量都可以做。
- 注意 - 必须先定义再使用
num = 88
print(num) # 打印变量中保存的数据 88
print('num') # num
print(num + 20) # 进行运算
print(type(num)) # <class 'int'>
print(bool(num)) # True
4.同时定义多个变量
- 变量名1=变量名2=变量名3=…=数据 - 同时定义多个变量赋值相同
- 同时定义多个变量赋不同值(变量数量必须和数据数量一致)
a = b = c = 34
print(a, b, c) #34 34 34
x, y = 12, 34
print(x, y) #12 34
# 案列交换两个变量的值
m = input('输入m的值:')
n = input('输入n的值:')
print('交换前:', m, n) # 交换前: 100 12
# # t = m; #t=22
# # m = n; #m=99
# # n = t; #传统做法 n=t=22
m, n = n, m # python做法
print('交换结果:', m, n) # 交换结果: 12 100
5.变量重新赋值
- 定义完变量后可以给变量重新赋值,重新赋值后,使用的是新的数据值
- 可以赋不同数据类型(C和Java不可以)
score = 120
print('重新赋值前 score:', score)
score = '优秀'
print('重新赋值后 score:', score)
# 重新赋值前 score: 120
# 重新赋值后 score: 优秀
二、变量底层逻辑
1.C语言
-
数据保存在运行内存:申请内存(申请多大?): int四个字节,申请四个字节的内存空间
匹配数据大小(过大-溢出;过小浪费);
考虑数据成长性。 -
重新赋值:在原内存上重新存值,考虑数据大小(不能超过 - 溢出);
不能给不同类型重新赋值。
2.python
-
申请内存:申请内存大小只与数据大小有关
缺点 - 计算数据所需空间大小导致执行效率相对较慢 -
重新赋值:重新根据数据大小申请新的内存保存数据,新的内存重新和变量a关联,将原数据内存释放
缺点:执行效率较慢; 可以赋值不同数据类型的数据。
3.id函数
- 获 取变量对应的内存地址
a=12
print(id(a))
a=15
print(id(a))
# 2034841447056
# 2034841447152
三、运算符:+、-、*、/、%、//、**
1. +、-、*、
print(10 + 23) # 33
print(10 - 23) # -13
print(10 * 23) # 230
2./(除)
- 运算结果一定是浮点数
print(10 / 23) # 0.43478260869565216
print(10 / 2) # 5.0
3.%(取余、取模) - 求余数
-
应用场景:判断一个数是否能被另外一个数整除(结果是否为0);
取整数的低位数 - 对10的n次方取余,可以获得这个数的后n位。
print(10 % 23) # 10
print(50 % 5)
num = 1562
print(num % 10) # 2
print(num % 100) # 62
4.//(整除)- 求商,向下取整
-
应用场景:求一个数中有多少个完整的另一个数 - 对10的n次方取整,可以获得这个数的后n位
去掉整数的低位数保留高位数
num1 = 2387
print(num1 // 3) # 795
print(2563 // 100) # 25
# 提取任意一个数的百位数
num2 = 59683
print(num2 // 100 % 10) # 6
print('{}的百位数是:'.format(num2), num2 // 100 % 10) # 哇塞 先整除再取余
print('{}的百位数是:'.format(num2), num2 % 1000 // 100) # 哇塞 先取余再整除
5.**(幂运算)
print(3 ** 4) # 81
print(3 ** -4) # 0.012345679012345678 3的4次方分之1
print(9 ** (1 / 3)) # 2.080083823051904 9开3次方根
四、比较运算符:> 、<、 ==(等于)、 !=、 >=、 <=
- 比较运算符运算结果:bool值 - True/False
print(100 != 30) # True
print(100.0 == 100.0) # True
print(1 / 2 == 4 / 2.0) # False 浮点数的大小比较是在一定范围内;浮动的
num = 669
print('num是否是奇数:', num % 2 == 1) # num是否是奇数: True
- python中的比较运算符支持范围连写表示范围:80<86<90
score = 85
# 判断分数是否大于等于85小于95
print('是否优秀成绩:', 85 <= score < 95) # 是否优秀成绩: True
五、逻辑运算符:and(逻辑与)、or(逻辑或)、not(逻辑非)
1.and(逻辑与)
- 应用场景:用来连接要求两个条件同时成立,相当于’并且‘
- 运算规则:条件1 and 条件2 - 同时成立结果位True,反之为False
False and False - False
# 判断num是否同时被3和8整除(余数为0)
num = 24
print('判断{}是否同时被3和8整除:'.format(num), (num % 3 == 0) and (num % 8 == 0))
# 判断num1是否是一个被7整除的偶数
num1 = 28
print('判断{}是否是一个被7整除的偶数:'.format(num1), num1 % 7 == 0 and num1 % 2 == 0)
# 判断24是否同时被3和8整除: True
# 判断28是否是一个被7整除的偶数: True
2.or(逻辑或)
-
多个条件要求至少一个条件成立,用or连接
-
运算规则:条件1 or 条件2 - 只要有一个条件成立:True
两个条件都不成立: False
-
思路不清晰时候一个一个条件写出来再逻辑连接
# 判断是num否是能够被3或7整除:
num2 = 5693
print('判断是num否是能够被3或7整除:', num2 % 3 == 0 or num2 % 7 == 0)
# 判断是num否是能够被3或7整除: False
# 判断指定的年是闰年: 普通闰年-被4整除不能被100整除
# 世纪闰年-被400整除
year = 2008
print('判断指定的年是否闰年:', (year % 4 == 0 and year % 100 != 0) or year % 400 == 0) # 判断指定的年是否闰年: True
3.not(逻辑非)
- 应用场景:对条件进行否定
- 运算规则:not 条件 - 对指定条件进行否定
not True - False
not False - True - not 被替代性很强
# 判断age是否不大于25
age = 19
print(not age < 25) # False
print(age >= 25) # False
# 判断是num否是不能够被3和7整除:
num2 = 5693
print('判断是num否是能够被3或7整除:', not (num2 % 3 == 0 and num2 % 7 == 0)) # 判断是num否是能够被3或7整除: False
print(num % 21 != 0) #换个思路
六、赋值运算符 : = 、 -=、+=、*=、/=、**=、%=
- 所有赋值运算符的最终功能都是完成对变量的赋值操作(数据保存到变量中)
- 赋值运算没有结果 ,无法提供数据
# print(b=20) #报错
1. =
变量名 = 数据 - 将数据直接保存到变量中
2. 符合运算符:+=、-=、*=、/=、**=、%=
- 变量 += 数据 - 先将变量中数据取出,和后面的数据相运算,将运算结果结果重新赋值保存到前面变量中
- 注意:复合的运算符前面的变量必须是已经赋值过后的变量
# 2.+=
num = 15
num += 2 # num=num+2
print(num) # 17
# 3.-=
num -= 1 # num=num-1=17-1
print(num) # 16
# 4.%=
num %= 4
print(num) # 0
# 5.*=
num1 = 33
num1 *= 3
print(num1) # 99
# 6.//=
num1 //= 3
print(num1) # 33
# 7.**=
num1 **= 3 #
print(num1) # 35937
七、运算符优先级
- 数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符
- 数学运算符 - 和数学一样:** > *、/、%、// > +、-
- and > or
- 有括号先算括号 - python中只有小括号