python笔记3—day3

知识点

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
View Code

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))

 

posted @ 2019-08-16 20:30  精灵飞舞之季的低语  阅读(172)  评论(0编辑  收藏  举报