python是解释性语言
1)注释
2)标识符要求
3)关键字
4)语句
5)缩进
6)数据和数据类型
int,float,str,bool
输入输出函数 ->print();input()
1)基数;位权;表示方法
print(oct(100)) #0o144
进制转换
1)手动转换方法:辗转取余法、累计求和;二进制、八进制和十六进制的转换
2)自动转换方法:print(\bin()\oct()\hex())
计算机存数据存的是数字的补码
1)原码:符号位+真值
2)反码(负数才有反码):符号位不变,其余变反
3)补码(负数才有补码):反码基础上加一
语法:变量 = 数据
说明:
变量名 - 自己命名
1)、标识符,不能是关键子,不能数字开头,见名知意,
2)、满足PEP8的命名规范(所有字母小写,多个单词之间用下划线隔开),
3)、不使用系统提供的类型名、函数名和模块名。
= --> 赋值符号,固定写法
数据 -->任何有结果的表达式,包括:独立数据、运算表达式(除了赋值运算)、函数调用表达式。
使用变量就是使用变量中保存的数据。
print('年龄:',age)
print(x)
print(10 + 20 + age)
str1 = 'hello word!'
print(str1[6])
print('abcd'[2])
变量 = 新值(赋值类型不限)
age = 22
print(age,'岁达到结婚年龄!') #22 岁达到结婚年龄!
age = 'hello'
print(age) #hello
变量名1,变量名2,变量名3,…= 数据1,数据2,数据3,…
a,b,c = 1,2,3
print(b) #2
print(a,b,c) #1 2 3
x = 100
y = 200
x,y = y,x #交换变量的值
print(x,y) #200 100
x1 = 1
x2 = 2
x3 = 3
x1,x2,x3 = x3,x1,x2 #交换变量值
print(x1,x2,x3) #3 1 2
变量1 = 变量2 = 变量3 = … = 数据
a1 = a2 = a3 = 30
print(a1,a2,a3) #30 30 30
注:前面没有赋值定义过的变量不能使用
1)先在堆中储存(申请储存空间大小由被储存数据大小决定)
2)将数据保存在内存区域中
3)让变量和数据关联(变量保存数据储存的地址)
id(变量) - 获取变量中关联的数据再内存中的地址
num = 10
print(id(num)) #140707488919584
num = 20
print(id(num)) #140707488919904
**注:**变量中存储的是数据存储的地址,重新给变量赋值后地址改变成新数据的存储地址。
python支持的运算符:数学运算符,比较运算符,逻辑运算符,赋值运算符,位运算符
数学运算符:+(加),-(减),*(乘),/(除),%(取余,取模),//(整除),**(幂运算)
1)+(加),-(减),*(乘),/(除)与数学中一样的用法
2)% -取余
数字1 % 数字2
print(5 % 2) #2.5
3)// - 整除(求商取商的整数部分:向下取整/向小取整)
应用:取定长数字最高位
num = 511
print(num//100) #3
4)** - 幂运算:m**n计算m的n次方
print(3 ** 2) #9
print(12+3*4//5-6**2) #-22
比较运算符(关系运算符):>,<,==,>=,<=,!=
注:1、所有比较运算的结果都是是bool类型
2、数字数据不能和字符串数据比较
print(10 > 5) #True
print(10 < 5) #False
python支持比较运算符的连写来表示范围
x = 10
print(0 < x <10) #True
print(3 < 4 > 2) #True
python中的逻辑运算符:and(逻辑与),or(逻辑或),not(逻辑非)
1)运算规则:
操作对象都是布尔值:两个都是True结果才是True,只要有一个为False结果就是False
2)应用场景:希望两个或多个条件同时满足才能执行,就使用逻辑与,与并且的意思相同
**例:**写出学生是否能拿奖学金,要求:绩点超过4,操评分高于85,同时满足?
grade = 4.5
score = 90
print('是否能拿奖学金:',grade > 4 and score > 85) #True
1)运算规则
a、操作对象都是布尔值:两个中只要有一个条件为True就为True,全为False结果才是False,
2)应用场景:希望两个或者多个多个条件只要有一个满足就可以使用逻辑或运算,相当于或者的意思。
例:写出学生是否能拿奖学金,要求:绩点超过4或者操评分高于90。
grade = 4.5
score = 80
print('是否能拿奖学金:',grade > 4 or score > 90) #True
**例:**写出判断指定年是否是闰年的条件:1)能被四整除但是不能被100整除 2)直接能被400整除
year = 2012
m1 = year % 4 == 0 #能被4整除
m2 = year % 100 != 0 #不能被100整除
m3 = year % 400 == 0 #能被400整除
print('是否为闰年:',(m1 and m2) or m3) #True
# print('是否为闰年:',year % 4 == 0 and year % 100 != 0 or year % 400 == 0) #True
1)运算规则:True变False,False变True
not True ->False 一句话不是对就是错,不是错就是对
not False ->True
2)应用场景:不满足某个条件就执行什么,就用not。
例:写出num是否不能同时被3和7整除。
num = 63
print('是否不能被3和7整除:',not(num % 3 == 0 and num % 7 == 0)) #结果False
注:其他数据的布尔值确定方法–所有为0为空的数据都为False,其他都是True
逻辑运算符语法上可以操作任何数据
用法解释:
数据1 and 数据2 -> 如果数据1的布尔值是True,结果是数据2;如果数据1的布尔值是False,结果就是 数据1。
数据1 or 数据2 -> 如果数据1的布尔值是True,结果是数据1;如果数据1的布尔值是False,结果是数据2。
在逻辑运算中的and和or在一些特殊情况下会出现短路操作,造成的原因:表达式1 and 表达式2 -->如果表达式1是False,那么表达式2不会执行。在有些情况下需要执行表达式二,由于and的特点就会形成短路,执行不到。
例:
def fun():
print('执行函数')
# print(True and fun()) #会打印‘执行函数’
print(False and fun()) #就执行不了fun()函数
print(True or fun()) #就执行不了fun()函数
=、+=、-=、*=、/=、%=、//=、**=
1)复合赋值运算符左边的变量必须是赋值过的变量。
2)所有赋值运算符的右边都可以是任意有结果的表达式。
“=” 的用法(赋值符号)
a = 10 #给a赋值10
age = 18 #给age赋值18
+=、-=、*=、/=、%=、//=、**=
a += 100 #表示a = a + 100 -->a = 110
print(a)
a /= 2 #同上表示a = a/2 -->a = 55
其余赋值运算符原理同上。
数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符(最低)。
** > *,/,%,// > +,-
位运算符:操作最底层的运算符(直接操作数据在内存中存储的补码,特性决定了它的特点)。
特点:效率高,内存消耗少。
位运算运算符:&(按位与)、|(按位或)、^(异或)、~(按位取反)、>>(右移)、<<(左移)
数字1 & 数字2 -> 两个都是1结果就是1,否者结果为0
特点:某一位上的数和1与可以对这一位上的数进行保存,和0与会与这一位进行
print(5 & 9)
'''
5:0000 0101(补)
9:0000 1001(补)
5 & 9 --->0000 0001 ----> 1
-5:10000101(原) - 11111011(补)
-9:10001001(原) - 11110111(补)
-5 & -9 --> 11110011(补) - 11110010(反) - 10001101(原) - 13
'''
print(-5 & -9)
应用:可以用来判断数字的奇偶性(让被判断的数和1进行按位与运算,结果如果是0说明是偶数否者是奇数)
'''
10101011 & 00000001 ->00000001 ->为奇数
'''
数字1 | 数字2 - ->只要有一个是1,结果就是1,两个都是0结果才是0
例:
7 | -16
'''
7:00000111
-16:10010000(原) - 11101111(反) - 11110000(补)
00000111 7为正数的源码、反码和补码相同
11110000(补) 6的补码
--------
11110111(补) 7| -16
7|-16 --> 11110111(补) --> 11110110(反) --> 10001001 --> -9
'''
print(7|-16) #-9
数字1 ^ 数字2 - 不同为1,相同为0(通常用作加密处理)
print(18 ^ 9) #27
print(27 ^ 9) #18
'''
18 00010010
9 00001001
18 ^ 9 --> 00011011 --> 27
27 00011011
9 00001001
27 ^ 9 --> 00010010 -->18
'''
18异或19会得到27,27再异或9又会得到18。
用法:~ 数字
'''
27 00011011
~27 --> 11100100
'''
#数字1 >> 数字2 -->数字1 // 2**数字2
#数字1 << 数字2 -->数字1 * 2**数字2
print(100 << 2) #100*2**2 == 400
print(100 >> 2) #100//2**2 == 25
'''
原理:
右移:以9为例
9 00001001 --> 右移一位 --> 00000100 --> 4 == 9//2**1
左移:以9为例
9 00001001 --> 左移一位 --> 00010010 --> 18 == 9*2**1
'''