day2 and day3 总结-python基础-坚持就是胜利
今日份快捷键学习,pycharm中按CTRL+ALT+L 自动规范化操作,不过和QQ的快捷键会有冲突,建议更改QQ的
知识点:
1.编码
2.while循环
3.运算符
4.数字int
5.布尔值
6.字符串
7.列表
8.元祖
正文开始,果然提前预习的好处就是上课的时候更容易听讲,查漏补缺,继续坚持,fighting!!!
1,编码
1.1编码历史变更
编码可以理解为谍战片中电报的密码本,如果要想让电脑识别要输入的文本,需要将文本转换为电脑能识别的机器语言
由于发明计算机的是美国人,所以最开始的编码表就是美国人所设定,所设定的这个表就为ASCII码,ASCII码包含字母大小写、数字以及特殊符号。ASCII码使用8bit,一个字节表达一个字符,所以做多显示为2**8-1个字符,也就是255个字符,例如00000001 a
后面由于计算机的广泛传播,ASCII码已经完全不能满足人们的日常需要,这个时候就出现了万国码,unicode,使用16bit,2个字节表示一个字符,后面使用后发现并不能实现,这个时候就进行了升级,此时采用32bit,也就是四个字节表示一个字符,虽然基本包含了所有的字符,但是,使用这种编码占用空间就很大;最终在后期的升级下,采用了现在大范围使用的UTF-8编码格式,对于英文以及传统的特殊字符采用ASCII编码,也就是8bit,一个字节,对于欧洲地区采用16bit,也就是2字节表示一个字符,对于亚洲区域则采用24bit,也就是三个字节显示一个字符。
过于国内的字符编码,在unicode和utf-8没有大规模使用的期间,我国有自己的一套独立的编码格式,由最开始的GB2312到后面的GBK在到最新的GB18130,对于国内的编码的格式主要是,英文等传统特殊符号采用ASCII码就行,对于中文则采用16bit,也就是2字节表示,这样就造成不同国家不同的字符规格。
实例
'old男孩'在GBK中是7字节,在utf-8是9字节
在python 2.7版本中,默认为ASCII码,不支持中文,如果需要输入中文必须在文首输入以下
# -*- encoding:utf-8 -*-
1.2进制的区别
进制主要有二进制,八进制,十进制,十六进制
二进制:只有01
八进制:0-7
十进制:0-9
十六进制:0-E
1.2.1二进制转十进制以及十进制转换二进制
二进制转化成十进制 0010 1101 ---> 0*2**7+0*2**6+1*2**5+0*2**4+1*2**3+1*2**2+0*2**1+1*2**0 1*2**5+1*2**3+1*2**2+1*2**0 = 32 + 8 + 4 + 1 = 45 十进制转化成二进制 : 对2取余,逆向排列 42 ——-> 0010 1010
2.while循环
while循环是for循环之外另外的一种常用循环,主要使用方法如下,对于while循环主要是有三种退出方式,一为有条件退出,二为添加中断标志(break),三为调用系统中断,例如exit(),quit()
2.1 单while循环
#while简单循环 count = 0 while count < 3: print(count) count += 1 #结果为循环显示0-2
2.2 循环中的break语句
break语句就是中断的意思,碰到他则跳出循环
#while循环中的break语句 count = 0 while count <100: print('code',count) if count == 5: print('中断!') break count +=1 #结果 code 0 code 1 code 2 code 3 code 4 code 5 中断!
2.3循环中的continue语句
continue语句就是跳过本次循环进行下一次循环
#while循环中的continue语句 count = 0 while count < 100: count += 1 if count > 5 and count < 95: continue print('code', count) print('到底了!')
2.4 while与else循环
while与if循环一致都是有else循环的
#while与else循环 count = 0 while count <5 : count += 1 print('code',count) else: print('正常退出!') print('到底了!') #结果 code 1 code 2 code 3 code 4 code 5 正常退出! 到底了!
2.5 while中的特殊退出
如果在正常循环中加入break,则不管这个循环是否运行完毕,都会马上终止。循环只要不被break打断,都会执行else语句。
#while循环的特殊退出 count= 0 while count <5: count += 1 if count == 3:break print('code',count) else: print('正常退出!') print('到底了!') #结果 code 1 code 2 到底了!
3.运算符
3.1基本数学运算符:+(加) -(减) *(乘) /(除) //(取整) %(取余) **(取幂)
3.2 比较运算: >(大于) <(小于) ==(等于) >=(大于) <=(小于) !=(不等于) <>(不等于)
3.3 赋值运算:=(赋值) +=(自加) -=(自减) *=(自乘) /=(自除) //=(自取整) **=(自幂运算) %=(自取余)
重点3.4 逻辑运算:and(与) or(或) not(非)
3.4.1 运算符俩边都为不等式
1,3>4 or 4<3 and 1==1 F
2,1 < 2 and 3 < 4 or 1>2 T
3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1 T
4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8 F
5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 F
6,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 F
3.4.2 运算符俩边都是数字
规律是x or y , x为真,值就是x,x为假,值是y;x and y, x为真,值是y,x为假,值是x。
8 or 4 8
0 and 3 0
0 or 4 and 3 or 7 or 9 and 6 3
3.4.3 运算符俩边是混合模式
print(0 or 2 < 1 and 2 , '...1') F
print(0 or 2 > 1 and 2 , '..2') 2
print(1 or 2 > 1 and 2 , '..3') 1
print(2 or 2 < 1 or 2 , '..4') 2
print(0 and 2 < 1 and 2 , '..5') 0
print(0 and 2 > 1 and 2 , '..6') 0
print(1 and 2 > 1 and 2 , '..7') 2
print(1 and 2 < 1 or 2 , '..8' ) 2
print(2 and 2 < 1 or 2 , '..9') 2 # 规律首先判断大于小于,然后判断and ,or
print(2 and 2 > 1 or 2 , '..10') T
print(False and 2) F
print(True and 2) 2
print(False or 2) 2
print(True or 2 ) T
3.5 成员运算:in(在里面) not in(不能再里面)
3.6 逻辑运算优先级:()>not>and>or
4.数据类型之int
int就是整数,在python3中没有int和long的区分,全部都是int型,只要记住是整数运算就好
对于int的用法
bin(234)快速给出数字的二进制的表示形式
print(i.bit_length()) # 获取十进制转化成二进制的有效位数 *
5.数据类型之布尔值
对于布尔值只有俩个数值,真与假,对应的就是1和0
布尔值与str类型的转换
# bool 值 True False # str ---> bool 非空即True # s1 = 'fdsa范德萨了f' # s2 = '' # print(bool(s2)) # s1 = '' # if s1: # print('非空') # else: # print('此数据为空') # bool ---> str 无意义 # b1 = True # print(str(b1),type(str(b1)))
6.数据类型之字符串
6.1 字符串的定义:字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一般引号内的内容称之为字符串,一般input得到的内容都是字符串,对于数字如果需要做比较,需要对其进行强制转换。
6.2 字符串的特性:有序,不可变,重新对其赋值,会开发新的内存地址,前后的内存地址不一致,例如
a ='我爱你!' print(id(a)) a = '我爱你中国!' print(id(a)) #结果 1276541360624 1276542558704 可以明显发现俩者的内存地址不同 #id()在python中是查看变量的内存地址
6.3 字符串的使用方法
6.3.1字符串的切片
字符串的切片原则上只有一个,顾头不顾尾!!!!
msg = '真相永远只有一个' print(msg[0])#打印第一个 print(msg[0:3])#打印前三个 print(msg[:8])#打印全部 print(msg[3:7])#打印第四个到第七个 print(msg[1:])#打印打二个到最后一个 print(msg[-1])#打印最后一个 print(msg[0:4:2])#打印前四个,按照步长2 print(msg[-7:-1])#从倒数第七个到倒数第二个 print(msg[-8:])#倒数第八个到最后一个 print(msg[-8:0])#打印为空
print(msg[:5:-1])#第一个参数指向最后一个,第二个参数到正数第三个,倒序输出
print(msg[-1:-9:-1])#倒着打印字符串 #结果 真 真相永 真相永远只有一个 远只有一 相永远只有一个 个 真永 相永远只有一 真相永远只有一个 个一有只远永相真
重要 6.3.2 字符串的其他常用方法
.upper与.lower #字符全部大写或者字符全部小写,验证码的不区分大小写
#普通用法 >>> s = 'AlexB' >>> s.upper() 'ALEXB' >>> s.lower() 'alexb' #一般用的场景比较多的地方为,验证码,不区分大小写,将输入的字符自动大写或者小写
.startwith与.endwith #字符串是否以什么开头或者结尾,可以切片寻找
>>> s1='aleXhahuhu' >>> s1.startswith('al') True >>> s1.endswith('hu') True >>> s1.endswith('ha') False #用的比较多的就是判断读取或者是返回的值是不是指定的数值,结果返回布尔值
.splite和.join #一个是将字符串切分,一个是将字符串拼接在一起,用法如下
#.splite的用法,将str分离成列表 #用法1 >>> s2 ='武汉 天津 成都' >>> s2.split() #默认使用空格切分 ['武汉', '天津', '成都'] #用法2 >>> s2 ='武汉|天津|成都' >>> s2.splite('|')#对于其他分离也可以,不过需要输入对应的'字符' #用法3 >>> s2 ='武汉|天津|成都' >>> s2.split('|',1) ['武汉', '天津|成都'] #对于其他分离,也可以指定分离次数,例如只分离一次 #坑 >>> s2 ='|武汉|天津|成都' >>> s2.split('|') ['', '武汉', '天津', '成都'] #对于分离标志符,如果为空,前面也会分离出空
#.join的用法 将列表中的元素连接起来,用法刚好和.splite相反 >>> s ='abc' >>> msg = '-' >>> msg.join(s) 'a-b-c' #用法就是将s中每个元素用join连接在一起
.isdigitt()#判断字符串中的数据是否是数字
msg = '2' print(msg.isdigit()) msg1 = 'abc' print(msg1.isdigit()) #结果 True False
还有其他的判断语句,isupper判断是否是大写字母,islower判断是否是小写字母
.replacce()#字符串的替换
msg = '0101010101010111' print(msg.replace('0','-1',3)) # .replace(old,new,count),可以选择替换次数 #结果 -11-11-110101010111
.find()#在字符串中查找一个字符,并返回其索引(可切片)与.index功能类似,只是.find找不到返回-1,.index报错
msg = '0101010101010111' print(msg.find('0',3,9)) # .find(sub,the begin,the end) #结果 4 #只返回第一个查找到的值
.count()#统计字符
msg = '0101010101010111' print(msg.count('0')) print(len(msg))#计算字符串的长度 #结果 7 16
.strip()#默认字符串俩头的空格换行符以及缩进符或者对特定的字符进行去除,input后默认加.strip,也可以指定特殊字符,只去除左侧用lstrip,去除右侧用rstrip,指定分割次数
msg = ' ****11111**** ' msg1 = msg.strip() msg2 = msg1.strip('*') print(msg1) print(msg2) #结果 ****11111**** 11111
.center()#在字符左右加特定的字符
msg = '我爱你中国!' msg2 = msg.center(50,'*') print(msg2)#相当于把msg放在一个50字符的字符串的中间,其他用*补齐 #结果 **********************我爱你中国!**********************
.format()#格式化字符串
#格式化输出的三种方式
#第一种
msg = '我是{},我今年{}岁,性别{}'.formate{'gao','18','男'}
#第二种
name =input("Name:") age =int(input("Age:")) job = input("Job:") salary = input("Salary:") info = ''' -----info of {0}----- Name = {0}; Age = {1}; Job = {2}; Salary = {3} '''.format(name,name,age,job,salary) print(info) #结果为 Name:jack Age:18 Job:student Salary:100 -----info of jack----- Name = jack; Age = jack; Job = 18; Salary = student
#第三种
msg = '我是{name},我今年{age}岁,性别{sex}'.formate{name ='gao',age ='18',sex = '男'}
str的非常用方法(只需要了解即可)

str.rslip() #与正常的切分不同是从右来切分,不过生成的列表还是从左到右排序 str.swapcase () #大小写反转,小写变大写,大写变小写 str.capitalize() #首字母大写,其他全部变成小写(这个是个坑,谨记) 其他 str.isupper str.islower str.title
7.数据类型之列表
7.1列表的定义:一系列数据按照顺序排放在一起的集合叫列表,是python中的常用数据类型
7.2列表的特性:有序
7.3列表的常用方法
7.3.1列表的定义
空列表:li= []
li=['a','b','c','d','e']有5个索引值,为0-4
列表可嵌套:li =['a',['b','c'],'d'] li[1][1]='c'
7.3.2 列表的切片
和字符串的切片一样,都是顾头不顾尾

li = ['li','alex','wusir','haoran','zixin'] print(li[0:3])#取值前三个 print(li[:3])#取前三个 print(li[-5:])#取后五个 print(li[:6:2])#以步长2取值前5个 print(li[-1:-6:-1])#反向取值, #结果 ['li', 'alex', 'wusir'] ['li', 'alex', 'wusir', 'haoran', 'zixin'] ['li', 'alex', 'wusir'] ['li', 'wusir', 'zixin'] ['zixin', 'haoran', 'wusir', 'alex', 'li']
7.3.2 列表的增加

list = ['1','2','3','4'] #列表直接追加,新增的内容放在列表最后的位置 list.append('5')#列表最后一个增加5 #根据列表位置插入,插入后不会替换已有的内容,其他内容 list.insert(0,'abc')#列表第一个位置插入一个abc #迭代的对列表进行增加数据 a ='abc' li.extend(a) #将可迭代的数据添加到列表中
7.3.3 列表的删除

list = ['a','b',4,'c','d',4] #list的指定位置删除,默认删除最后一个,有返回值 list.pop()#按照位置删除,有返回值 #list的指定删除,没有返回值 list.remove('a')#指定删除列表中的'a' list.remove(4)#指定删除列表中的第一个4 #list的整体清除,不可逆,删了就删删了 list.clear() #列表的清除,只是清除列表内的数据,列表继续保持在内存中 #通用方法啊,全局删除 del list[2]#全局删除第三个 del list [1:3]#批量删除2到3,也可切片加步长删除 del list #全局删除,属于内存级别的删除, 列表的删除
7.3.4 列表的修改

#列表的按位修改 list[2]= 'abc'#列表第三个位置修改为abc #列表的切片批量修改 list[3:5]= 'abc'#列表批量修改,不够位则创建,不占用已有的位置 #列表的切片批量修改加步长 list[3:5:2] = 'ab'#如果有步长,则有几个位置改几个,否则就报错
7.3.5 列表的查找

#列表的查找方法 #1.索引 2.切片 3.切片加步长 4.for循环 列表的索引值 li[2]#返回列表的第三个索引值的数值 li[-1]#返回列表的最后一个索引值的数值 li[0:3]#返回列表的前三个值 li[0:3:2]#按照列表的切片和步长取值 li.index('a')#返回指定元素在列表中的索引值,从左到右找到的第一个匹配值,没有则返回报错 li.count('a')#返回指定元素在列表中的数量
7.3.6列表的循环
for i in list : print('i') #循环打印一个列表
list = [1,2,3,4,5,6,7,8,9] for i in list: print(i) #结果 循环输入列表
range(10)#创建一个0---9的列表
while循环为死循环,for循环为边界循环
#打印列表的索引值 list =[1,2,3,4,5,6,7,8,9] #方法一 print('方法一') count =0 for i in list: print(count+1,i) count+=1 #方法二 print('方法二') for i in enumerate(list): print(i) #方法三 print('方法三') for index,i in enumerate(list): print(index,i) #结果 方法一 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 方法二 (0, 1) (1, 2) (2, 3) (3, 4) (4, 5) (5, 6) (6, 7) (7, 8) (8, 9) 方法三 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9
7.3.7列表的其他用法
.sort #按照ASCII码来排序,不支持‘int’与‘str’作排序,还可以从大到小,如果要从大到小,则需要加入 reverse = True,如果有中文则按照unicode来排序
.reverse #列表翻转
列表也是相加或者乘法 例如 l1+l2 或者是l1 *10这样
l3 = l1.copy() #l3 copy l1 ,俩个列表在内存空间中完全独立,是浅copy
8.数据类型之元祖
8.1 元祖的特性:列表是有序的,可变的,元祖也是有序的,但是不可变,所以元祖也称为只读列表,例如names =('alex','wuwu','qiqi')。元祖本身是不可变的,不过如果元祖中包含可变元素,则可变元素可以改变。总结的话就是一句话,元祖的儿子不能改,孙子有可能更改。
8.2 元祖的功能:基本的index与count功能是有的,其他没有
#元祖的使用! >>> name =('alex','wuwu','qiqi') >>> print(type(name)) <class 'tuple'> >>> name[1] 'wuwu' >>> len(name) 3
8.3 元祖的使用场景:很明确显示的告知他人,此处的数据不可修改。