Python学习--day 08
- 视频来源:python视频 900集
048.字符串逆序和练习
- 逆序输出,使用str[a :b : -1]。
只要是逆序输出,就需要前大后小(指同正同负),代表从后面开始逆序输出。
正常的正序输出,就需要前小后大(指同正同负),代表从前面开始正序输出。
str = 'abcdefg'
print(str[ : :-1]) #输出gfedcba,什么都不填就是整个逆序输出
print(str[-1:-5:-1]) #输出gfed
- 练习题
我的答案:
str = 'hello world'
print(str[-1:-6:-1])
print(str[0:6])
print(str[::-1])
print(str[-7:-10:-1])
print(str[2:-3]) #注意,可以非同正或同负,只要保证编号是争正确的就好
- 步长——使用str[a :b : x],x代表步长,正负表示取的方向
print(str[::-2])
——指代逆序输出,隔一个一取值,在这里会输出drwolh
049.字符串内置函数之大小写
- 字符串的内建函数(内建函数:声明一个字符串,默认可以调用内建函数,系统准备好的函数)
capitalize()
——将字符串的第一个字符转换为大写
title()
——将字符串内的每一个单词的首字母变为大写,返回字符串
istitle()
——看每个单词的首字母是不是已经大写了,返回一个布尔类型的数据
upper()
——将全部字母转成大写的形式
isupper()
——是不是都大写了
islower()
——是不是都小写了
lower()
——将大写全部转为小写
len()
——求字符串的长度,返回值是int - 案例:验证码案例
IndexError:string index out of range——下标错误
randint(a,b)——取到的数字是包括a和b的
s = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0987654321'
ran = random.randint(0,len(s)-1) #注意是len(s)-1,而不是len(s)
其他的就是按照流程,从s中随机抽取字符,形成字符串,作为验证码。
验证验证码的时候需要将验证码两边都提前变成大写或小写。
050.字符串内建函数之查找
- find()
in
——result = 'l' in s
,返回值是True
find(str, beg = 0, end = len(string))
——检测str是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1。
s1 = 'index lucy lucky goods'
position = s1.find('R') # 没有找到,返回-1
print(position)
position = s1.find('l') # 如果找到,返回第一次出现的位置。
print(position)
p = s1.find('l',position+1) #找第二个出现的位置
print(p)
- 出现了一个新的错误类型:
报错:TypeError: find() takes no keyword arguments
,没有关键字参数,即不用写beg = ,直接写参数就好
p = s1.find('l',beg = position) # 错误写法,正确写法:p = s1.find('l',position)
print(p)
# 报错
- rfind()、lfind()
rfind()
——指从右边开始寻找特定的字符串
lfind()
——指从左边开始寻找,与find一样
url = 'https://www.baidu.com/img/bd_logo1.png'
p = url.rfind('/') # 从右侧开始检测/
print(p)
#查看url中的文件名
filename = url[p+1:] #注意是p+1
print(filename)
# 查看文件格式
p = url.rfind('.')
kz = url[p+1: ]
print(kz)
- index()以及rindex()、lindex()
index(str, beg = 0, end = len(string))
——跟find方法一样,只不过如果str不在字符串中会报一个异常
异常类型:ValueError: substring not find
,指代字串没有找到 - replace()——替换
replace(old, new[, max])
——将字符串中的str1替换成str2,如果max指定,则替换不超过max次
s1 = 'index lucy lucky goods'
s2 = s1.replace(' ','#')
print(s2)
# 或者可以替代''将内容消除
s3 = s1.replace(' ','')
print(s3)
051.字符串内建函数之编码和判断开头结尾
中文的网络应用经常涉及。
- 编码encode()
encode(encoding = 'UTF-8', errors = 'strict')
——以encoding方式指定编码格式,如果出错默认报一个ValueError的异常,除非errors指定的是‘ignore’或者‘replace’
编码格式 | 说明 |
---|---|
UTF-8 | 现在使用这个就好。。(unicode的升级) |
gbk | 中文 |
gb2312 | 简体中文 |
unicode | 国际统一的一个编码 |
- encode()使用案例:
msg = '上课了'
result = msg.encode('utf-8')
print(result)
- 解码decode()
decode()对字节使用。 - incode()使用案例:
m = result.decode('utf-8')
print(m)
- startswith()
判断是否以xxx开头,区分大小写,是返回True不是返回False
s = 'hello'
result = s.startswith('he')
print(result)
- endswith()
判断是否以xxx结束(比如网络判断上传的文件内容是不是png、bmp)
filename = '笔记.doc'
result = filename.endswith('txt')
print(result)
- 项目实战
发现自己在写if和else的时候,经常忘记后面的“:”
path = input('请输入文件路径:') # D:\Google云硬盘\382818074394553067.jpg
# 判断是不是图片类型
# 先找文件名,再看结尾的文件类型
p = rfind('\\') #要使用转义
filename = path[p+1:] #要p+1
if filename.endswith('jpg') or filename.endswith('bmp'):
print('是图片,允许上传')
else:
print('不是图,重传')
052.字符串内建函数之判断是否是数字
-
注意
print(r'\')
会报错,使用r原样输出后在\后面必须有一定的内容,不能只有\。 -
isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。
-
isalpha():如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回Falue。(判断字符串是不是全是字母)
-
isdigit():如果字符串至少有一个字符并且所有字符都是数字则返回True,否则返回Falue。(判断字符串是不是全是数字)【与isnumeric()一样】
-
示例:使用isdigit()防止用户将ll视作11,可以防止不必要的错误。
s = 'abcd6'
result = s.isalpha()
print('result=',result) # False
s1 = '6688'
result = s.isdigit()
print('result=',result) # True
# isdigit的妙用
sum = 0
for i in range(3):
num = input('请输入数字')
if num.isdigit(): #判断用户的输入是不是数字,万一有ll当成11可是有可能的
num = int (num)
sum += num
- isspace()
如果字符串中只包含空白,则返回True,否则返回False。
053.字符串内建函数之join+split+count
- join()——用于连接字符的
join(seq)
——以指定的字符串作为分隔符,将seq中的所有元素(的字符串表示)合并为一个新的字符串(返回的是新的字符串)。seq不仅仅可以使用字符串,还可以使用列表【list】。
newstr = '_'.join('abc')
print(newstr)
# 输出是a_b_c
- python列表的创建:list
list = [‘a’, ‘b’, ‘c’] - max(str)、min(str)
返回字符串中最大的字母或最小的字母 - rjust()——了解
rjust(width [,fillchar])
——返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串 - lstrip()
截掉字符串左边的空格或指定字符。【同理自己类比rstrip()】
s = ' hello '
s = s.lstrip() # 去除空格
print(s + '8')
# 输出 hello8
- strip([chars])
在字符串上执行lstrip()和rstrip() - split()
split(str="", num = string.count(str))——以str为分隔符截取字符串,如果num有指定值,则截取num+1个子字符串,没指定num则有多少截取多少。
分隔字符串,将分割后的字符串放到列表中。
s = 'hello world heelo kitty'
result = s.split(' ') #用空格切分
print(result)
# 输出 ['hello', 'world', 'heelo', 'kitty' ]
# 注意将结果放到了一个列表里面
- count()
count()求字符串中某一个字符的个数。
s.count(' ')
——数一下字符串有几个空格
str = 'shudgudgfs'
num = str.count('s')
# 数一下str中有多少个s
054.作业
- 习题6:输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符。
我的答案:
s1 = input('please input string A: ')
s2 = input('please input string B: ')
len2 = len(s2)
for i in range(len2): # 经过老师指点,可以换成for i in s1
s1 = s1.replace(s2[i],'')
print(s1)
- 补充知识(依据上面的第6题进行扩展)
for i in s1
——字符串也可以放到for中进行循环,可以遍历打印,相当于range。
s1 = input('请输入第一个字符串:')
s2 = input('请输入第二个字符串:')
s3 = ''
for i in s1:
if i not in s2:
s3+=i
055.作业
- 习题7——小易喜欢的单词具有以下特征:单词每个字母都是大写,单词没有连续相等的字母。
我的答案:
s1 = input('please input your word:')
n = len(s1)-1
if s1.isupper():
for i in range(n):
if s1[i]==s1[i+1]:
print('NO')
break
else:
print('YES')
else:
print('NO')
老师没有使用isupper(),使用的是s1[i]<‘A’、s1[i]>'Z’判断。
突然发现今天写了好多,MARKDOWN已经5000+字数了,本来还想在看几个,大概是最近开始要有很多新知识或者之前没有注意的知识了,脚步要放慢了。今天就这样啦。