社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python基础--Day03--字符串的深入使用

小小的python学习社 • 2 周前 • 58 次点击  
资料已经打包好了,需要的关注公众号发送“111”领取

字符串是计算机编程中表示文本数据的一种数据类型。它是由字符组成的序列,可以包含字母、数字、标点符号和其他特殊字符。

一、字符串的转义符

转义有两层含义:

  1. 将一些普通符号赋予特殊功能,比如\n,\t

  2. 将一些特殊符号变为普通符号,比如\",\\

以下是一些常见的转义字符及其含义:

\n:换行符,表示在字符串中创建一个新行。

\t:制表符,表示在字符串中插入一个水平制表符(Tab)。

\b:退格字符,b代表backspace,可以把一个退格符看成一个backspace键

\":双引号,用于在字符串中包含双引号字符。

\':单引号,用于在字符串中包含单引号字符。

\\:反斜杠,用于在字符串中包含反斜杠字符本身。

s1 = 'D:\Program Files\nancy\table\back\Python 3.8\python.exe'print(s1)"""    D:\Program Files    ancy    ablack\Python 3.8\python.exe"""
s2 = 'D:\Program Files\\nancy\\table\\back\Python 3.8\python.exe'print(s2)   # D:\Program Files\nancy\table\back\Python 3.8\python.exe
# # raw-string  告诉解释器该字符串中无特殊字符s3 = r'D:\Program Files\nancy\table\back\Python 3.8\python.exe'print(s3)   # D:\Program Files\nancy\table\back\Python 3.8\python.exe
s4 = "i'm \"yuan!\""s5 = 'i\'m "yuan!"'print(s4)   # i'm "yuan!"print(s5)   # i'm "yuan!"

二、格式化输出

格式化输出是一种将变量值和其他文本组合成特定格式的字符串的技术。它允许我们以可读性更好的方式将数据插入到字符串中,并指定其显示的样式和布局。

在Python中,有多种方法可以进行格式化输出,其中最常用的方式是使用字符串的 f-strings(格式化字符串字面值)。

2.1、%占位符

# (1) % 占位符
name = "yuan"age = 18height = 185
s = """     员工信息:     姓名:%s     年龄:%s     身高: %s""" % (name, age, height)print(s)"""    员工信息:     姓名:yuan     年龄:18     身高: 185"""

在这个示例中,我们使用 %s 占位符将变量 name 的值插入到字符串 "Hello, %s!" 中,然后通过 % 运算符进行格式化。在执行格式化时,% 运算符的左侧是字符串模板,右侧是要按顺序插入的值。

2.2、f-string格式--【推荐使用】

格式化字符串字面值(Formatted String Literal,或称为 f-string)来进行格式化输出。适用于 Python 3.6 及以上版本

# (2) f-str
name = "yuan"age = 18height = 185.123456# 宽度是15个字符,用?填充,居中显示    靠左对齐,宽度是20个字符    靠左对齐,宽度是20个字符,显示前5个字符s = f"姓名:{name:?^15},年龄:{age:<20},身高:{height:<20.5} "print(s)# 姓名:?????yuan??????,年龄:18                  ,身高:185.12
name = "abcdefg"age = 45height = 155.123456# 宽度是15个字符,用-填充,居中显示    靠左对齐,宽度是20个字符    靠左对齐,宽度是20个字符,显示前5个字符s = f"姓名:{name:-^15},年龄:{age:<20},身高:{height:<20.5} "print(s)# 姓名:----abcdefg----,年龄:45                  ,身高:155.12"""汇总总结:    s = f"姓名:{name:?^15},年龄:{age:<20},身高:{height:<20.5}    姓名:{name:15}   宽度是15个字符,字符串默认是左对齐,数字默认是右对齐    身高:{height:.5}  默认不增加宽度,只增加精度,只显示前5个有效数字    身高:{height:20.5}  宽度是20,精度是5  宽度.精度
    年龄:{age:<20},身高:{height:<20.5}  宽度为20的左对齐,  < 左对齐
"""

# 拓展 f-str  {表达式}
name = "yuan"age = 18height = 185
# {}里面放的是表达式,所以不仅仅只是放变量s = f"""     员工信息:     姓名:{name}     年龄:{age}     虚岁:{age + 1}     身高: {height}     其他:{1 + 1 > 2}     其他:{type(1 + 1 > 2)}"""print(s)"""    员工信息:     姓名:yuan     年龄:18     虚岁:19     身高: 185     其他:False     其他:"""
宽度与精度

格式描述符形式为:width[.precision]

  • width正整数,设置字符串的宽度。

  • precision非负整数,可选项,设置字符串的精度,即显示字符串前多少个字符。

填充与对齐

格式描述符形式为:[pad]alignWidth[.precision]

  • pad填充字符,可选,默认空格。

  • align对齐方式,可选<(左对齐),>(右对齐),^(居中对齐)。

虽然 %s 是一种用于字符串格式化的方式,但自从 Python 3.6 版本起,推荐使用格式化字符串字面值(f-string)或 .format() 方法来进行字符串格式化,因为它们提供了更简洁和直观的语法。

三、字符串序列操作

3.1、索引和切片

在编程中,索引(Index)和切片(Slice)是用于访问和操作序列(如字符串、列表、元组等)中元素的常用操作。

字符串属于序列类型,所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

  • 索引用于通过指定位置来访问序列中的单个元素。在大多数编程语言中,索引通常从0开始,表示序列中的第一个元素,然后依次递增。而负索引从 -1 开始,表示序列中的最后一个元素。使用方括号 [] 来访问特定索引位置的元素。

  • 切片用于从序列中获取一定范围的子序列。它通过指定起始索引和结束索引来选择需要的子序列。切片操作使用方括号 [],并在方括号内使用 start:stop:step 的形式。注意,start的元素可以获取到,stop的元素获取不到,最后一个元素是[stop-1]对应的元素。

s = "hello yuan"
# (1) 索引的语法 字符串对象[索引],获取的是某一个字符print(s[6], type(s[6]))  # y     "y"print(s[0])              # hprint(s[-1])             # n
# (2) 切片的语法:字符串对象[开始索引:结束索引]print(s[0:5])   # hello  左闭右开print(s[6:9])   # yuaprint(s[6:10])  # yuan  不建议,因为已经超出了索引的范围print(s[6:11])  # yuan  不建议,因为已经超出了索引的范围print(s[6:])    # yuan  缺省  默认取到最后print(s[:5])    # hello 缺省  默认从头开始print(s[:])     # hello yuan    缺省  从头取到尾print(s[6:9])   # yuaprint(s[-4:-1]) # yua   负数也是从-4 到-1  而不是 -1到 -4print(s[6:-1])  # yua
# 切片的语法扩展:字符串对象[开始索引:结束索引:步长=1]s = "heoll yuan"print(s[::1])  # hello yuan step=1: 从左向右一个个取print(s[::2])  # hloya      step=2: 从左向右 两个取一个print(s[::3])  # hlyn       step=3: 从左向右 三个取一个print(s[::-1])  # nauy olleh    step=-1: 从右向左一个个取  【字符串反转】print(s[::-2])  # nu le         step=-1: 从右向左 两个取一个
print(s[0:3])   # helprint(s[3:0])   # 从低到高,需保证步长为正,从高到底,需保证步长为负  因为默认步数为正,所以输出为空,取不到任何字符print(s[3:0:-1])    # lle 从索引为3开始到索引为0 但不包含0    从高到底,步长必须为负数print(s[-2:-4:-1])  # au  从索引为-2开始到索引为-4 但不包含-4

3.2、其它操作

# (1) 字符串不能修改
s1 = "yuan" s1 = "rain"print(s1)  # rain  这样是修改变量的值,是可以的# s1[0] = "R" # TypeError: 'str' object does not support item assignments1 = "Rain"  # 修改字符串,只能这样重新赋值,不能修改字符串内部某个字符的值
# (2) 内置函数:lens = "hello yuan"print(len(s))               # 10print(s[-1])                # nprint(s[len(s) - 1])        # nprint(len([1, 2, 3]))       # 3     len就是一个内置函数和字符串没关系,就是计算元素的长度print(len({"k1": "v1"}))    # 1
# (3) 拼接 + 和 *s1 = "hello"s2 = "yuan"print(1 + 2)            # 3print(s1 + " " + s2)    # hello yuan
# 案例name_str = ""name1 = "rain"# name_str = name_str + name1       # name_str = "rain"name_str += " "+name1
name2 = "eric"# name_str = name_str + name2       # name_str = "raineric"name_str += " "+name2
name3 = "yuan"# name_str = name_str + name3       # name_str = "rainericyuan"name_str += " "+name3print(name_str)     # rain eric yuan
# 把10个"*"这样的字符串拼接在一起print("*" * 10)   # **********

# (4) in 返回布尔值  没有单词的概念,就是子串是否在主串内部print("rain" in "rain eric yuan")       # Trueprint("rai" in "rain eric yuan")        # Trueprint("rains" in "rain eric yuan")      # Falseprint("rains" not in "rain eric yuan")  # True
if "rain" in "rain eric yuan":      # "rain eric yuan" 优秀名单    print("奖励他")                    # 奖励他else:    print("惩罚他")

if "rain" not in "rain eric yuan":          # "rain eric yuan" 黑名单    print("奖励他")else:    print("惩罚他")                    # 惩罚他

四、字符串内置方法

# (1) 字符串转大写:upper(),字符串转小写:lower()s = "Yuan"s2 = s.upper()   # 字符串内置方法都会单独开辟一个空间,存放新生成的变量,原变量s指向的“Yuan”空间都不变print(s)            # Yuanprint(s2)           # YUANs3 = s.lower()print(s)            # Yuanprint(s3)           # yuanprint("Hello World".upper())    # HELLO WORLDprint("Hello World".lower())    # hello world

# (2) startswith:判断是否以xxx开头和endswith:判断是否以xxx结尾  返回布尔值name = "张三丰"# 判断是不是姓张print(name.startswith("张"))         # Trueprint(name.startswith("张三"))       # Trueprint(name.startswith("丰"))         # Falseprint(name.endswith("丰"))           # Trueprint(name.endswith("三丰"))          # Trueimg_url =  "https://tenfei03.cfp.cn/creative/vcg/800/new/VCG41N639526572.jpg"print(img_url.endswith(".jpg"))     # Trueprint(img_url.endswith(".png"))     # False
# (3)  find和index都是查找某子字符串的索引,find找不到返回-1,index找不到报错s = "hello yuan"print(s.find("yuan"))       # 6print(s.index("yuan"))      # 6print(s.find("Yuan"))       # -1      查找不到,返回-1# print(s.index("Yuan"))      # ValueError: substring not found 查找不到,报错

# (4) strip方法:去除两端空格或换行符\n# 案例1:name = input("姓名:")print(name)         # lihahaprint(len(name))    # 17ret = name.strip()  # strip可以传参,如果不传参默认是去除两端的空格或者换行符print(ret)          # lihahaprint(len(ret))     # 6
# 案例2:去掉换行符print("\nyuan\n")           # 有换行  yuan   有换行print("\nyuan\n".strip())   # yuan
# 案例3:s = "##abcd#####"print(s.strip("#"))     # abcd        消除左右两端的# strip处理的都是字符串左右两端print(s.rstrip("#"))    # ##abcd     只处理尾部的print(s.lstrip("#"))    # abcd#####
# (5) isdigit:判断字符串是否为数字字符串print("apple".isdigit())    # Falseprint("123".isdigit())      # Trueprint("123元".isdigit())     # Falseprint("123.45".isdigit())   # False
age_str = input("age:::")   # 场景使用:判断输入的年龄必须是整数,不然就无法进行转换和判断
if age_str.isdigit():    age = int(age_str)      # 如何输入的年龄合法,就进行转换    print(age)              # 12else:    print("非法输入!")      # 如果输入的年龄不合法,就进行报错提示
# (6) split()和join()# 案例1cities = "北京 哈尔冰 重庆 大连"ret = cities.split(" ")print(ret)                  # ['北京', '哈尔冰', '重庆', '大连']print(len(ret))             # 4
ret = ['北京', '哈尔冰', '重庆', '大连']# ret.join(",")             # 因为join是字符串的内置方法,所以不能这样使用列表ret去调用,print(",".join(ret))        # 北京,哈尔冰,重庆,大连   只能使用字符串“,”去调用join方法处理参数ret列表
# 案例2info = "yuan|19|185"ret = info.split("|")print(ret)              # ['yuan', '19', '185']print(ret[0])           # yuanprint(ret[1])           # 19print(ret[2])           # 185
# (7) replace(): 子字符串替换# 案例1cities = "北京 哈尔冰 重庆 大连"ret = cities.replace(" "",")print(cities)       # 北京 哈尔冰 重庆 大连print(ret)          # 北京,哈尔冰,重庆,大连
# 案例2sentence = "PHP is the best language.PHP...PHP...PHP..."ret = sentence.replace("PHP""JAVA")print(ret)  # JAVA is the best language.JAVA...JAVA...JAVA...
# 案例3comments = "这个产品真棒!我非常喜欢。服务很差,不推荐购买。这个餐厅的食物质量太差了,味道不好。我对这次旅行的体验非常满意。这个电影真糟糕,剧情一团糟。这个景点真糟糕,再也不来了!"
ret = comments.replace("差""***")print(ret)# 这个产品真棒!我非常喜欢。服务很***,不推荐购买。这个餐厅的食物质量太***了,味道不好。我对这次旅行的体验非常满意。这个电影真糟糕,剧情一团糟。这个景点真糟糕,再也不来了!
ret2 = ret.replace("糟""***")print(ret2)# 这个产品真棒!我非常喜欢。服务很***,不推荐购买。这个餐厅的食物质量太***了,味道不好。我对这次旅行的体验非常满意。这个电影真***糕,剧情一团***。这个景点真***糕,再也不来了!
ret3 = ret.replace("不推荐""***")print(ret3)# 这个产品真棒!我非常喜欢。服务很***,***购买。这个餐厅的食物质量太***了,味道不好。我对这次旅行的体验非常满意。这个电影真糟糕,剧情一团糟。这个景点真糟糕,再也不来了!
ret = comments.replace("差""***").replace("糟""***").replace("不推荐""***")print(ret) # 这个产品真棒!我非常喜欢。服务很***,***购买。这个餐厅的食物质量太***了,味道不好。我对这次旅行的体验非常满意。这个电影真***糕,剧情一团***。这个景点真***糕,再也不来了!
# (8) count:计算字符串中某个子字符串出现的次数
sentence = "PHP is the best language.PHP...PHP...PHP..."print(sentence.count("PHP"))  # 4
资料已经打包好了,需要的关注公众号发送“111”领取
 结语 

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python学习视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

资料获取方式:↓↓↓↓
1.关注下方公众号↓↓↓↓,在后台发送:111 即可免费领取

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185837
 
58 次点击