python基础实战6-python字符串

1字符串的表达方式

字符串是 Python 中最常用的数据类型。我们可以使用引号 ( ' 或 " ) 来创建字符串。

字符串表达方式

a = " I ' m Tom" #一对双引号

b =’Tom said:" I am Tom" ' #一对单引号

c = ‘Tom said: " I\'m Tom" ' #转义字符

d = ' ' ' Tom said: "I'm Tom " ' ' ' # 三个单引号

e = " " " Tom said:"I'm Tom" " " "# 三个双引号

总结:

  • 双引号或者单引号中的数据,就是字符串
  • 如果使用一对引号来定义字符串,当出现符号冲突时,可以使用转义字符
  • 使用三个单引号、双引号定义的字符串可以包裹任意文本

1.1 转义字符

在Python中具有特殊含义的字符,以 \ 开头

转义字符描述
\(在行尾时)续行符
\\代表一个反斜线字符\
\'单引号,用来显示一个单引号
\''双引号,用来显示一个双引号
\a响铃
\b退格(Backspace)
\e转义
\000
\n换行,将当前位置移到下一行开头
\v纵向制表符
\t横向制表符,用来表示一个制表符
\r回车,将当前位置移到本行开头
\f换页
\oyy八进制数,yy代表的字符,例如:\o12代表换行
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

2 字符串的运算

在python中,字符串可以使用以下运算符:

+

*

in 

not in

is

is not

==

!=

可以使用*运算符来实现字符串的拼接,可以使用*运算符来重复一个字符串的内容,可以使用in和not in来判断一个字符串是否包含另外一个字符串,我们也可以用[]和[:]运算符从字符串取出某个字符或某些字符。

2.1 使用+和*运算符实现字符串的拼接和重复操作。

s1 = 'hello' + ' ' +'world'
print(s1) #结果 hello world

s2 = '!' * 3
print(s2)#结果 !!!

s1 += s2   #s1 = s1 + s2
print(s1) # 结果:hello world!!!

s1 *= 2  #s1 = s1 * 2
print(s1) #结果:hello world!!!hello world!!!

2.2 比较运算,比较两个字符串的相等性或大小

字符串在计算机内存中也是以二进制形式存在的

字符串的比较其实比的的是:每个字符对应的编码的大小

例如A的编码是65,而a的编码是97,所有'A' < 'a'的结果相当于就是65 < 97的结果,结果为True。

'boy' < 'bad',因为第一个字符都是'b' 比不出大小,所以实际比较的是第二个字符的大小。因为'o' < 'a'的结果是False,所以'boy' < 'bad'的结果也是False。

如果不清楚两个字符对应的编码是多少,可以使用ord函数来获得。

例如ord('A')的值是65,而ord('黄')的值是40644

s1 = 'how are you'
s2 = 'I am fine'
print(s1 == s2) # false
print(s1 > s2) #True

print(s2 == 'I am fine') #True
print(s2 == 'i am fine') # False
print(s2 != 'i am fine') # True

s3 = '黄一'
print(ord('黄'),ord('一')) # 40644 19968
s4 = '李三五'
print(ord('李'),ord('三'),ord('五')) #26446 19977 20116
print(s3 > s4,s3 <= s4) #True False

注意:字符串的比较运算比较的是字符串的内容,python中还有一个is运算符(身份运算符),如果用is来比较两个字符串,它比较的是两个变量对应的字符串是否在内存中相同的位置(内存地址),简单的说就是两个变量是否对应内存中的同一个字符串。

s1 = 'hello world'
s2 = 'hello world1'
s3 = s2
#比较字符串的内容
print(s1 == s2,s2 == s3) #False True
#比较字符串的内存地址
print(s1 is s2,s2 is s3) # False True

总结:s1 == s2比较的是字符串里面的内容,只要内容相同结果就是True,不同就是False;而s1 is s2则比较的是内存地址,两者内存是不一样的所以False。

 2.3 成员运算

用in 和not in判断一个字符串中是否存在另外一个字符或字符串

in 和not in运算通常称为成员运算,会产生布尔值True或False

s1 = 'hello world'
print('he' in s1) # True
s2 = 'sensitive'
print(s2 in s1) #False

2.4 获取字符串长度

 获取字符串长度使用内置函数len

s = 'hello, world'
print(len(s))  # 12
print(len('sensitive')) # 9

3 字符串的下标和切片

3.1 下标/索引

“下标”又叫“索引”,就是编号,就好比学校里,每个学生的学号,通过这个学号就能找到相应的学生的基本信息。

如果有字符串:name = ’abcdef‘,在内存中的实际存储如下:

如果想取出部分字符,那么可以通过下标的方法。(在计算机中,下标从0开始)

name = 'abcdef'

print(name[0])
print(name[1])
print(name[2])

运行结果:

 以name = 'abcdef'为例,要把e取出来,该怎么取?

 从上图可以看出,e对应的索引是4

print(name[4]) #取字母e

取name = 'abcdef' 最后一个字母?

print(name[5]) # f
print(name[-1]) # f

 字符串索引机制:

1、 0~len(name) -1

2、-len(name) ~ -1

3.2 字符串切片 

切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。

切片的语法:[起始:结束:步长],也可以简化使用[起始:步长]

注意:选取的区间从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身),步长表示选取间隔。

#索引是通过下标取某一个元素
#切片是通过下标取某一段元素

#格式:字符串变量[start:end]
#字符串变量[start : end : step] 默认是从左向右一个一个取元素
#step: 
#    1.步长
#    2.方向    step为正数时,从左向右取数
               step为负数时,从右向左取数

s = 'Hello world'
print(s)

print(s[4]) # o字符串里的第4个元素

print(s[3:7]) # lo w 包含下标3,不含下标7

print(s[:]) # Hello world取出所有元素(没有起始和结束位之分),默认步长为1

print(s[1:]) # ello world从下标为1开始,取出 后面所有的元素(没有结束位)

print(s[:4])  # Hell 从起始位置开始,取到 下标为4的前一个元素(不包括结束位本身)

print(s[:-1]) # Hello worl 从起始位置开始,取到 倒数第一个元素(不包括结束位本身)

print(s[-4:-1]) # orl 从倒数第4个元素开始,取到 倒数第1个元素(不包括结束位本身)

print(s[1:5:2]) # el 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身)

print(s[7:2:-1]) # ow ol 从下标为7的元素开始(包含下标为7的元素),倒着取到下标为2的元素(不包括下标为2的元素)

# python 字符串快速逆置w
print(s[::-1])  # dlrow olleH 从后向前,按步长为1进行取值

4 字符串的常见操作

字符串的常见操作包括

获取长度len
查找内容find,index,rfind,rindex
判断startswith,endswith,isalpha,isdigit,isalnum,isspace
计算出现次数count
替换内容replace
切割字符串split,rsplit,splitlines,partition,rpartition
修改大小写capitalize,title,upper,lower
空格处理ljust,rjust,center,lstrip,rstrip,strip
字符串拼接join

注意:在python中,字符串是不可变的!所有的字符串相关方法,都不会改变原有的字符串,都是返回一个结果,在这个新的返回值里,保留了执行后的结果!

4.1 len函数

len函数可以获取字符串的长度。

mystr = '你最近过得好嘛!我过的超级好丫!!!'
print(len(mystr)) # 获取字符串的长度为18

4.2 查找

4.2.1 find

find:从左向右查找,只要遇到一个符合要求的则返回位置,如果没有找到任何符合要求的则返回 -1

#取出e564de54s4e5496sed4f98e46as4f648.gif
path = 'https://www.baidu.com/img/dong_e564de54s4e5496sed4f98e46as4f648.gif'
i = path.find('_')
print(i) #打印下划线所在的位置
image_name = path[i+1:]
print(image_name)


i = path. Find('#')
print(i)

运行结果:

4.2.2 rfind

rfind从右向左查找,只要遇到一个符合要求的则返回位置,如果没有找到任何符合要求的则返回-1

#rfind 
#快速取出.gif
path = 'https://www.baidu.com/img/dong_e564de54s4e5496sed4f98e46as4f648.gif'
i = path.rfind('.')
zhui = path[i:]
print(zhui)

4.2.3 count

count:统计指定字符的个数

'''
查找字符串中有几'.'
'''
path = 'https://www.baidu.com/img/dong_e564de54s4e5496sed4f98e46as4f648.gif'
n = path. Count('.')
print(n)

4.2.4 index

index与find的区别:index也表示查找,但是如果找不到会报错

path = 'https://www.baidu.com/img/dong_e564de54s4e5496sed4f98e46as4f648.gif'
i = path. Index('#')
print(i)

运行结果

 4.2.5 rindex

类似于index(),不过是从右边开始。如果找不到则会报错

4.3 判断

可以通过字符串的startswith、endswith来判断字符串是否以某个字符串开头和结尾;

还可以用is开头的方法判断字符串的特征,这些方法都返回布尔值。

1.startswith():判断字符串是否以指定的字符串开头,返回布尔值结果

2.endswith():判断字符串是否以指定的字符串结尾,返回布尔值结果

3.isdigit():判断字符串是否由数字构成,返回布尔值结果

4.isalpha():判断字符串是否以字母构成,返回布尔值结果

5.isalnum():判断字符串是否以数字和字母构成,返回布尔值结果

6.isspace():判断字符串里是否只包含空格,返回布尔值结果

7.isupper():判断是否全部都是大写字母,返回布尔值结果

8.islower():判断是否全部都是小写字母,返回布尔值结果

s1 = 'hello world!'
#startswith方法检查字符串是否以指定的字符串开头返回布尔值
print(s1.startswith('He')) #False
print(s1.startswith('hel')) #True

#endswith方法检查字符串是否以指定的字符串结尾返回布尔值
print(s1.endswith('!'))

s2 = 'abc123456'

#isdigit方法检查字符串是否由数字构成返回布尔值
print(s2.isdigit()) #False

#isalpha方法检查字符串是否以字母构成返回布尔值
print(s2.isalpha()) #False

#isalnum方法检查字符串是否以数字和字母构成返回布尔值
print(s2.isalnum()) # True

#isspace方法判断字符串里是否只包含空格

s3 = ''
print(s3.isspace()) #False s3是一个空字符串

s4 = '  '
print(s4.isspace()) #True 只有空格

s5 = '  d'
print(s5.isspace()) # False 除了空格还有其他内容


#isupper方法判断字符串是否全部都是大写字母
s6 = 'HELII'
result = s6.isupper() # 判断是否全部都是大写字母
print(result) #True


#islower判断是否全部都是小写字母
s7 = 'hello'
r = s7.islower()
print(r)  #True

模拟文件上传


'''
模拟文件上传,键盘输入上传文件的名称(abc.jpg),判断文件名(abc)是否大于6位以上,扩展名是否:jpg,gif,png格式
如果不是则提示上传失败,如果名字不满足条件,而扩展名满足条件则随机生成一个6位数组成的文件名,打印成功上传xxxxx.png
判断名字
'''
import random

file = input('输入图片文件全称:')
#判断扩展名
if file.endswith('jpg') or file.endswith('gif') or file.endswith('png'):
    #判断文件的名字
    i = file.rfind('.')
    name = file[:i]
    #len(name)
    if len(name)<6:
        #重新构建名字,产生字母和数字的组合名称
        filename = ''
        s = 'shSAHFWEOGHOAAEFAaoehagagh324564faljfeaeawehfiaghsajfioe123456789'
        for a in range(6):
            index = random.randint(0,len(s)-1) # 随机产生下标
            filename += s[index]  #获取下标匹配的字母
        #filename 文件名 和后缀进行拼接
        file = filename + file[i:]
        #完整的文件全称名字
    print('成功上传%s文件' %file)
else:
    print('文件格式错误,上传失败!')

 运行结果

 

简单登录验证

需求:

admin123  15811119999 200325
用户名或者手机号码登录 + 密码:

用户名:全部小写,首字母不能是数字,长度必须6位以上
手机号码:纯数字 长度11位
密码必须是6位数字

以上条件符合则进入下层验证:
判断用户名+密码 是否是正确的,正确则成功,否则登录失败
flag = True
while flag:
    name = input('用户名/手机号码:')
    #判断
    if (name.islower() and not name[0].isdigit() and len(name) >= 6) or (name.isdigit() and len(name) == 11):
        # 继续输入密码,密码输入错误允许多次输入
        while True:
            password = input('密码:')
            #判断是否是6位数字
            if len(password) == 6 and password.isdigit():
                #验证name + 密码,正确性
                if (name == 'admin123' or name == '15811119999') and password=='200325':
                    print('用户登录成功!')
                    flag = False
                    break
                else:
                    print('用户名或者密码有误!')
                    break
            else:
                print('密码必须是6位数字')
    else:
        print('用户名或手机号码格式错误!')

4.4 替换

替换内容replace(old,new,count) 默认全部替换,也可以通过count指定次数

s = '王五你好,张三李四可以进去吗?张三李四可以进去吗?'
result = s.replace('张三李四','****',1)
result2 = s.replace('张三李四','****')
print(result)
print(result2)

运行结果

 4.5 切割

4.5.1 split

以指定字符串为分隔符切片,如果 maxsplit有指定值,则仅分隔 maxsplit+1 个子字符串。返回的结果是一个列表。

mystr = '今天天气好晴朗,处处好风光呀好风光'
result = mystr.split() # 没有指定分隔符,默认使用空格,换行等空白字符进行分隔
print(result) #['今天天气好晴朗,处处好风光呀好风光'] 没有空白字符,所以,字符串未被分隔

result = mystr.split('好')  # 以 '好' 为分隔符
print(result) # ['今天天气', '晴朗,处处','风光呀,'风光']

result = mystr.split("好",2) # 以 '好' 为分隔符,最多切割成3份
print(result) # ['今天天气', '晴朗,处处', '风光呀好风光']

 4.5.2 rsplit

用法和splti基本一致,只不过是从右往左分隔

mystr = '今天天气好晴朗,处处好风光呀好风光'
print(mystr.rsplit('好',1))  #['今天天气好晴朗,处处好风光呀', '风光']

4.5.3 splitlines

按照行分隔,返回一个包含各行作为元素的列表。

mystr = 'hello \nworld'
print(mystr.splitlines())

4.5.4 partition

把mystr以str分割成三部分,str前,str和str后,三部分组成一个元组

mystr = '今天天气好晴朗,处处好风光呀好风光'
print(mystr.partition('好'))  # ('今天天气', '好', '晴朗,处处好风光呀好风光')

4.5.5 rpartition

类似于 partition()函数,不过是从右边开始.

mystr = '今天天气好晴朗,处处好风光呀好风光'
print(mystr.rpartition('好'))   # ('今天天气好晴朗,处处好风光呀', '好', '风光')

4.6 修改大小写

修改大小写的功能只对英文有效,主要包括,首字母大写capitalize,每个单词的首字母大写title,全小写lower,全大写upper。

4.6.1 capitalize

第一个单词的首字母大写

mystr = 'hello world'
print(mystr.capitalize()) # Hello world

4.6.2 title

每个单词的首字母大写

mystr = 'hello world'
print(mystr.title()) # Hello World

4.6.3 lower

所有都变成小写

mystr = 'hElLo WorLD'
print(mystr.lower()) # hello world

4.6.4 upper

所有都变成大写

mystr = 'hello world'
print(mystr.upper())  #HELLO WORLD

4.7 空格处理

4.7.1 ljust

返回指定长度的字符串,并在右侧使用空白字符补全(左对齐)

str = 'hello'
print(str.ljust(10))  # hello     在右边补了五个空格

4.7.2 rjust

返回指定长度的字符串,并在左侧使用空白字符补全(右对齐)

str = 'hello'
print(str.rjust(10))  #      hello在左边补了五个空格

4.7.3 center

返回指定长度的字符串,并在两端使用空白字符串补全(居中对齐)

str = 'hello'
print(str.center(10))  #  hello   两端加空格,让内容居中

4.7.4  strip

strip删除两端的空白字符 

s = '   helloworld@qq.com   \t\r\n'
#strip方法获得字符串修剪左右两侧空格之后的字符串
print(s.strip()) # helloworld@qq.com

4.7.5 lstrip

lstrip删除左边的空白字符

s = '   he    llo   '
print(s.lstrip())#he    llo

4.7.6 rstrip

rstrip删除右边的空白字符 

s = '   he    llo   '
print(s.rstrip()) #   he    llo

4.8 拼接

 字符串拼接 mystr .join(iterable)

把参数进行遍历,取出参数里的每一项,然后再在后面加上mystr

mystr = 'a'
print(mystr.join('hxmdq'))  #haxamadaq  把hxmd一个个取出,并在后面添加字符a. 最后的 q 保留,没有加 a
print(mystr.join(['hi','hello','good']))  #hiahelloagood

作用:可以把列表或者元组快速的转变成为字符串,并且以指定的字符分隔

txt = '_'
print(txt.join(['hi','hello','good'])) #hi_hello_good
print(txt.join(('good','hi','hello'))) #good_hi_hello

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再快一步`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值