知识点
1、上节内容回顾。
格式化输出
%s %d
%%
编码:
ascii 只能显示英文,特殊字符,数字。
万国码:unicode 最开始16位,中文不够32位 4个字节。
占用资源多。
升级:utf-8 utf-16 utf-32
utf-8:最少用一个字节,8位表示一个英文。
欧洲16位,两个字节。
亚洲 24位,三个字节。
gbk:中国国产,只能用于中文和ascii码中的文字。
2、数据类型。
int:1,2,3用于计算。
bool:True,False,用户判断。
str:存储少量数据,进行操作
'fjdsal' '二哥','`13243','fdshklj'
'战三,李四,王二麻子。。。。'
list:储存大量的数据。
[1,2,3,'泰哥','12353234',[1,2,3]]
元祖:只读。
(1,2,3,'第三方',)
dict:字典{'name':'云姐','age':16}
字典{'云姐':[],'二哥':[200,200,200,。。。。。。]}
集合:{1,2,34,'asdf'}
3、数据类型转换
#int --> str i=1 s=str(i) #str --> int不能转换带字母和特殊字符的 s='123e' i=int(s)#结果报错 s='123' i=int(s)#结果为123 #int --> bool 非零值转换成True,零转换为False i=3 b=bool(i) i=0 b=bool(i) #bool --> int #True --->1#bool型的True转换int是1 #False --->0#bool型的False转换int是0 #PS:while 1效率高于while True while True: pass while 1: pass #str --> bool #s='' ---> False#str型的空字符串转换int是1 #s='0' --->True#非空字符串都为True
4、int数据类型操作方法
bit_length:二进制最小有效位数
i=100
print(i. bit_length())
解析:
十进制 | 二进制 | Bit_length |
1 | 0000 0001 | 1 |
2 | 0000 0010 | 2 |
3 | 0000 0011 | 2 |
100 | 0110 0100 | 7 |
5、字符串的索引和切片
索引(从左往右是从0开始,即:a是0;从右往左是从-1开始,即:g是-1)
s='abcdefg' s1=s[0] print(s1)#结果为a s2=s[3] print(s2)#结果为d s3=s[-1] print(s3)#结果为g s4=s[-4] print(s4)#结果为d
切片(顾头不顾尾,取不到尾部那位数)
s='abcdefg' s1=s[0:3] print(s1)#想取的结果是abcd,但结果是abc s2=s[1:5] print(s2)#想取的结果是bcdef,但结果为bcde s3=s[:] s4=s[0:] print(s3,s4)#s3和s4都是取整个字符串的,即把变量s里面的字符串全取出来,结果为abcdefg s5=s[0:-1] print(s5)#结果为abcdef,但g不取,因为g是尾部 s6=s[0:0] print(s6)#想取的结果是a,但结果是空字符串 s7=s[4:0:-1]#s[首:尾:步长] print(s7)#想取的结果为edcba,但结果为edcb s8=s[4::-1] print(s8)#这个结果就是edcba s9=s[0:4:2]#跳着取数 print(s9)#结果为ac s10=s[-1::-1] s11=s[::-1] print(s10,s11)#从右往左取整个变量s里面的数 s12=s[-1:-3:-1] print(s12)#结果为gf s13=s[-1:-5:-2] print(s13)#结果为ge
6、字符串操作方法
s='xiaoLeXianSheng' s1=s.capitalize()#让字符串首字母大写,其他字母小写 print(s1)#结果为Xiaolexiansheng s2=s.upper()#让字符串字母全部大写 s3=s.lower()#让字符串字母全部小写 print(s2,s3)#结果为XIAOLEXIANSHENG,xiaolexiansheng s4=s.swapcase()#字母大小写反转 print(s4)#结果为XIAOlExIANsHENG
s='xiao le_xo3cv' s5=s.title()#只要用空格或特殊字符还有数字隔开的单词都首字母大写 print(s5)#结果为Xiao Le_Xo3Cv
s='xiaoLeXianSheng' s6=s.center(35)#居中,不填写填充物,默认为空白填充 s7=s.center(35,'1')#居中,填充物可以自己设定#、~、!等等 print(s6,s7)#结果为 xiaoLeXianSheng ,1111111111xiaoLeXianSheng1111111111
s='xxx\txx' s8=s.expandtabs()#只要字符串出现‘\t’的,在‘\t’前面字符自动补全到8位,超过8位的补全到16位 print(s8)#结果为xxx xx
#公共方法 s='xiaoLeXianSheng' s9=len(s)#检测长度 print(s9)#结果为15
s='xiaoLeXianSheng' s10=s.startswith('ia')#检测以什么开头,默认检查全部字符 s11=s.startswith('i',1,6)#检测字符串中1到6的字符串是否以i开头,是返回True print(s10,s11) s12=s.endswith('eng')#检测以什么结尾,默认检查全部字符 s13=s.endswith('n',10,13)#检测以什么结尾,但顾头不顾尾,比如:变量s的10到13的是Shen,理论上结果返回True,但结果为False print(s12,s13)
#find通过元素找索引,找不到返回-1 #index也是通过元素找索引,但找不到会报错,其他查找方式跟find一样 s='xiaoLeXianSheng' s14=s.find('a') s15=s.find('ao') s16=s.find('A') s17=s.find('o',1,5) s18=s.find('e',6,-2) s19=s.index('A') print(s14,s15,s16,s17,s18,s19)
#strip 默认删除前后空格,可以添加删除的元素,但只会删除前后的,遇到字符就停下来,不会删除字符里面的元素 s=' xiaoLeXianSheng ' s20=s.strip() print(s20,) s='@x@ iaoLeXia *nSheng*' s21=s.strip(' @*x')#添加指定删除的元素为空格、@、*和x,但字符串里面的不删除 print(s21) #rstrip 只删除后面的指定元素,默认删除空格 s='***xiaoLeXianShen**g**' s22=s.rstrip('*') print(s22) s=' xiaoLeXianSheng ' s23=s.rstrip() print(s23) #lstrip 只删除前面的指定元素,默认删除空格 s='***xiaoLeXianShen**g**' s22=s.lstrip('*') print(s22) s=' xiaoLeXianSheng ' s23=s.lstrip() print(s23)
#count统计个数,没有返回0,也可以整体统计 s='xiaoLeXianSheng' s24=s.count('a') s25=s.count('A') s26=s.count('xi') print(s24,s25,s26)
#split 拆分分割,默认为空格为分割符号,也可指定元素为分割符号(PS:str转换成list的方法) s='xiao Le Xian Sheng' s27=s.split() print(s27) s='xiao,Le,Xian,Sheng' s28=s.split(',') print(s28) s='xiaoLeXianSheng' s29=s.split('a') print(s29)
#format的三种玩法,格式化输出 s='我叫{},喜欢{},再说一次我叫{}'.format('liuel','youxi','liule') print(s) s1='我叫{0},喜欢{1},再说一次我叫{0}'.format('liuel','youxi') print(s1) s3='我叫{name},喜欢{hobby},再说一次我叫{name}'.format(hobby='youxi',name='liule') print(s3)
#replace 替换,默认全部替换,也可指定替换次数 s='xiaoLeXianShengxiaoLe' s30=s.replace('xiaoLe','小樂') print(s30) s31=s.replace('xiaoLe','小樂',1) print(s31)
#is系列 #isalnum 字符串是否由字母或数字组成 #isalpha 字符串是否由字母组成 #isdigit 字符串是否由数字组成 s='xi1' s32=s.isalnum() s33=s.isalpha() s34=s.isdigit() print(s32,s33,s34)
7、for循环
#for循环 s='asdfg' for i in s:#把变量s的字符赋值给变量i,经过for循环输出 print(i)
if 'd' in s: print('存在d这个元素')
课后习题
1、变量name='aleX leNb'完成以下操作
#1)移除变量name对应的值两边空格,并输出结果 name='aleX leNb' s=name.strip('') print(s)#结果为aleX leNb #2)移除变量name左边的'al'并输出结果 name='aleX leNb' s=name.lstrip('al') print(s)#结果为eX leNb #3)移除变量name左边的'Nb'并输出结果 name='aleX leNb' s=name.rstrip('Nb') print(s)#结果为aleX le #4)移除变量name开头'a'和最后的'b'并输出结果 name='aleX leNb' s=name.strip('ab') print(s)#结果为leX leN #5)判断变量name是否以'al'开头,并输出结果 name='aleX leNb' s=name.startswith('al') print(s)#结果为True #6)判断变量name是否以'Nb'结尾,并输出结果 name='aleX leNb' s=name.endswith('Nb') print(s)#结果为True #7)将变量name对应值中的所有'l'替换为'p',并输出结果 name='aleX leNb' s=name.replace('l','p') print(s)#结果为apeX peNb #8)将变量name对应值中的第一个'l'替换为'p',并输出结果 name='aleX leNb' s=name.replace('l','p',1) print(s)#结果为apeX leNb #9)将变量name对应值中根据所有'l'分割,并输出结果 name='aleX leNb' s=name.split('l') print(s)#结果为['a', 'eX ', 'eNb'] #10)将变量name对应值中根据第一个'l'分割,并输出结果 name='aleX leNb' s=name.split('l',1) print(s)#结果为['a', 'eX leNb'] #11)将变量name对应值变大写,并输出结果 name='aleX leNb' s=name.upper() print(s)#结果为ALEX LENB #12)将变量name对应值变小写,并输出结果 name='aleX leNb' s=name.lower() print(s)#结果为alex lenb #13)将变量name对应值首字母'a'变大写,并输出结果 name='aleX leNb' s=name.capitalize() print(s)#结果为Alex lenb #14)判断变量name对应值的字母'l'出现几次,并输出结果 name='aleX leNb' s=name.count('l') print(s)#结果为2 #15)如果判断变量name对应值的前四位'l'出现几次,并输出结果 name='aleX leNb' s=name.count('l',0,3) print(s)#结果为1 #16)从变量name对应值中找出'N'对应的索引(如果找不到则报错),并输出结果 name='aleX leNb' s=name.index('N') print(s)#结果为7 #17)从变量name对应值中找出'N'对应的索引(如果找不到则返回-1),并输出结果 name='aleX leNb' s=name.find('N') print(s)#结果为7 #18)从变量name对应值中找到'X le'对应的索引,并输出结果 name='aleX leNb' s=name.find('X le') print(s)#结果为3 #19)请输出变量那么对应值的第2个字符 name='aleX leNb' s=name[2] print(s)#结果为e #20)请输出变量那么对应值的前3个字符 name='aleX leNb' s=name[0:3] print(s)#结果为ale #21)请输出变量那么对应值的后2个字符 name='aleX leNb' s=name[-2:] print(s)#结果为Nb #22)请输出变量那么对应值的中'e'的索引位置 name='aleX leNb' s=name.find('e') print(s)#结果为2 #如果要找第二个'e'所在的索引方法如下 name='aleX leNb' s=name.find('e') s+=1 s1=name.find('e',s,-1) print(s1)#结果为6
2、有字符串s='132a4b5c'(第一题和第三题由于讲解的老师出错题,但老师说不管用什么办法都要做出来,比如:拼接)
#1)切片形成新的字符串s1,s1='123' s='132a4b5c' s1=s[0]+s[2]+s[1] print(s1)#结果为123 #2)切片形成新的字符串s2,s2='a4b' s='132a4b5c' s2=s[3:6] print(s2)#结果为a4b #3)切片形成新的字符串s3,s2='1245' s='132a4b5c' s3=s[0]+s[2]+s[1]+s[4]+s[-2] print(s3)#结果为12345 #4)切片形成新的字符串s4,s4='3ab' s='132a4b5c' s4=s[1:-2:2] print(s4)#结果为3ab #5)切片形成新的字符串s5,s5='c' s='132a4b5c' s5=s[-1] print(s5)#结果为c #6)切片形成新的字符串s6,s6='ba3' s='132a4b5c' s6=s[-3:0:-2] print(s6)#结果为ba3
3、使用while循环和for循环分别打印字符串s='asdfer'中每一个元素
#for循环 s='asdfer' for i in s: print(i) #while循环 s='asdfer' i=0#定义一个变量i,把0赋值给i while 1:#while循环语句的条件为1永真 print(s[i])#利用字符串的索引输出结果 i+=1#变量i自加1 if i==len(s):#if判断语句,判断变量i的值是否等于变量s的长度,以便于退出循环(PS:len()计算变量的长度) break
4、实现一个整数加法计算器
如:content=input('请输入内容:')#如用户输入:5+9或5+ 9或5 + 9,然后进行分割进行计算
#两个数相加或两个数以上相加的方法 content=input('请输入需要相加的数,如:5+9>>>:').strip()#以防用户输入数字是在前后都加上了空格,用删除前后空格strip的操作方法,其实也可以不用strip操作方法 s=content.split('+')#变量content用split操作方法把‘+’变成分割的符号,进行分割 num=0#定义变量num for i in s:#利用for循环把变量content的元素一个个赋值给变量i num+=int(i)#把变量i的数相加 print(num)#输出变量num #两个数相加的方法,如果要计算三个数以上的相加,会报错 content=input('请输入需要相加的数,如:5+9>>>:').strip()#以防用户输入数字是在前后都加上了空格,用删除前后空格strip的操作方法,其实也可以不用strip操作方法 i=content.find('+')#用find方法找出'+'所在的索引位置 x=int(content[0:i])#用切片的方法找出'+'前面的数字,并赋值给变量x y=int(content[i+1:])#用切片的方法找出'+'后面的数字,并赋值给变量y print(x+y)#两个变量相加,并输出结果
5、用户输入任意字母和数字,统计数字的个数
s=input('请输入任意字母和数字:').strip()#以防用户输入数字是在前后都加上了空格,用删除前后空格strip的操作方法 count=0#定义一个变量count并把0赋值给它 for i in s:#用for循环把用户输入的字符串一个个的赋值给白能量i if i.isdigit():#用isdigit的操作方法判断变量s赋值给变量i的字符是否为数字,如果是变量count自加1 count+=1 print(count)#输出结果
附加题
输入一串字母和数字,判断数字有多少个,相连接的数字算一个,比如:aasd123cvb23z1,这里的数字就只有3个
x=input('请输入一串字母和数字>>>').strip() for i in x: if i.isalpha(): x=x.replace(i,' ') print(x) y=x.split() print(y) print(len(y))