变量和运算符

变量和运算符

1.变量

语法:变量名 = 数据

说明:变量名是程序员自己命名

要求:

1.首先得是标识符

2.不能是关键字

规范:

1.见名知意

2.满足PEP8的命名规范(所有字母小写,单词之间用下划线隔开)例如:teacher_name = ‘jack’

3.不使用系统提供的类型名,函数名和模块名

= : 是赋值符号

数据:任何有结果的表达式 包括:独立的数据,运算表达式

(除了赋值运算),函数调用表达式

print('print')
a = 260
b = 2
c = 0.1314
print(a * b + c)

使用变量:

  1. 变量中保存的数据能做什么,变量就能做什么

  2. 使用变量的时候,其实就是在使用变量中保存的数据

修改变量的数据(重新给变量赋值)
变量 = 新值
python 中同一个变量可以保存不同类型的值

同时给多个变量赋值:
a,b,c = 10,20,30
交换两个变量的值:
x = 100
y = 200
x,y = y,x
同时给不同变量赋相同的值
x1 = x2 = x3 = 5

没赋值过的变量不能直接使用!

2.变量赋值的原理

内存:

1.栈区间:系统自动操作
2.堆区间:程序员写代码申请和释放

c语言中:

先在堆区间申请内存,和变量绑定,再将值赋给变量
重新赋值,必须和之前申明的数据类型一致

python中:

先申请内存开辟空间,看数据需要多大,就开多大空间,再和数据绑定
重新赋值的时候,先从新开辟一个新的内存取余,需要多少空间就开辟多少空间,把新赋的值添加进去,原来的值如果不用就将其删除

定义变量和给变量赋值的原理:

1.先再堆中申请内存(申请多大看被赋值的数据需要多大内存)
2.将数据保存再内存区域中
3.让变量和保存数据的内存进行关联(让变量保存数据对应的内存地址

id函数

id(变量) - 获取变量中关联的数据再内存中的地址

num = 10  #id - 140720389517856
print(id(num))
num = 20  #id - 140720389518176
print(id(num))

3.数学运算符

python支持的运算符:数学运算符,比较运算符,逻辑运算符,赋值运算符,位运算
数学运算符:+,-,*,/,%,//,**
  1. 加减乘除和数学中的加减乘除功能一样
  2. 取余(%):取计算后的余数
num = 678
print(num % 100)  #结果为78
  1. 整除(//):求商取商的整数部分(向下取整,向小取整)
print(5//2)  #结果为2
print(-5//2)  #结果为-3
  1. 幂运算(**)
print(2**2)  #结果为4
比较运算符(关系运算符):> ,<, ==, <=, >=, !=
  1. 所有比较运算的结果都是布尔值

  2. 数字数据不能和文本数据相比较

  3. python支持比较运算符的连写来表示范围

print(10 < 20 <30)
  1. 可以将运算结果赋值给变量
逻辑运算符:and or not

逻辑与运算:and

  1. 运算规则:
    操作对象都是布尔值:同为True,才为True,有一个False,结果为False,同为False,为False

  2. 应用场景:希望两个或多个条件同时满足才做什么逝去,就是用逻辑与运算,相当于生活中的并且
    练习一:写出学生是否能拿奖学金的要求:(绩点超过4,操评分高于85,同时满足)

grade = 3.8
     score = 80
if grade > 4 and score > 85:
        print('能拿奖学金')
     else :
        print('不能拿奖学金')

逻辑或运算:or

  1. 运算规则
    操作对象为布尔值时:只要有一个为True,则为True,全为False,才为False
  2. 应用场景:
    希望两个或多个条件只要有一个满足就能使用逻辑或运算

练习二:写出学生是否能拿奖学金的要求:(绩点超过4或操评分高于85)
练习三:写出判断指定年是否为闰年,year:2012

练习二:

grade = float (input('请输入绩点:'))
score = int (input('请输入成绩:'))
if grade > 4 or score > 85:
  print('能拿奖学金')
else :
  print('不能拿奖学金')

练习三:

 year = int(input('请输入年份:'))
 if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
     print('是闰年')
 else :
     print('不是闰年')

逻辑非运算:not
运算规则:True变成False,False变成True
应用场景:对某个条件进行否定,就用not
练习:写出一个数是否不能同时被3和7整除

 num = 21
 if not(num % 3 == 0 and num % 7 == 0):
     print('不能被同时整除')
 else :
     print('能同时被整除')

4.操作对象不是布尔值的时候
逻辑运算符语法上可以操作任何数据
如何确定一个数是布尔值,只有0和空字符串为False,其他均为 True
数据1 and 数据2 ->数据1的布尔值是True,结果就是数据2,如果数据一的布尔值是False,结果就是数据一
数据1 or 数据2 ->如果数据一的布尔值是True,结果就是数据1,如果数据一的布尔值是False,结果就是数据

print(0 and 1)  #0
print(1 or 0)  #1
print(0 or 1)  #1
print(1 or 2)  #1
print(not 0)  #True

5.短路操作
and的短路操作:
条件1 and 条件2 ->如果条件一是False,条件二是不会执行的
or的短路操作:
条件1 or 条件2 ->如果条件1的结果是True,条件二是不会执行的

赋值运算符:=,+=,-=,*=,/=,%=,//=,**=

所有的赋值运算都是用来给变量赋值的
所有的赋值运算符的左边都必须是变量,复合赋值运算符,左边的变量必须是已经赋值过的变量
所有赋值运算符的右边都可以是任意有结果的表达式

  1. =(a=10)
  2. +=,-=,=,/=,%=,//=,=
    变量 += 数据 -> 变量 = 变量 + 数据
    运算优先级:数学运算符>比较运算符>逻辑运算符>赋值运算符(最低)
  3. >,/%,//>+,-

4.位运算

位运算的特点:效率高,内存消耗少

位运算运算符有哪些:按位与运算(&),按位或运算(|),按位异或运算(^),按位取反

(~),左移(《)右移(》)

  1. 按位与(&):
    本身规律:所有位运算都是直接操作数据在内存当中的补码
    数字1 & 数字2 两个都是1,结果为1,否则是0
    应用:判断数字的奇偶性
    让一个数和1 与,可以判断这个数的奇偶性,结果是0为偶数,否则是奇数。
print(40&1)  #结果为0,即为偶数
  1. 按位或运算(|):

    数字1 |数字2:只要有一个1结果就是1,两个都是0,结果就是0

练习:7|16

7的原码:00000111
16的原码:00010000
结果:0001011123
  1. 异或(^)

    数字1 ^ 数字2:不同为1,相同为0

  2. 左移(<<)和右移(>>):快速高效率的乘或整除2的n次方

    数字1 >> 数字2 -> 数字1 // 2 ** 数字2
    数字1 << 数字2 -> 数字1 * 2 ** 数字2

你可能感兴趣的:(变量和运算符)