Python学习--day 08

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+字数了,本来还想在看几个,大概是最近开始要有很多新知识或者之前没有注意的知识了,脚步要放慢了。今天就这样啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值