Python基础教程(4)数据类型之字符串str
一、Python字符串介绍
· 在程序中使用字符串来表示文本内容
· 字符串属于不可变类型的数据,没有改、删、增这些操作,如果要改变原来的字符串只能重新赋值
· 使用单引号''或者双引号""引上的内容都属于字符串类型的数据,如果是多行字符串的话可以用三个单引号'''文本内容'''或者三个双引号"""文本内容"""来表示
· 字符串之间不能进行运算,但是可以使用加号+进行连接、逗号","进行分隔、“*”进行复制
· 字符串可以看作是字符形成的列表,所以字符串可以通过for循环进行遍历每个字符
· 数字也可以是字符串类型,但不可参与运算
二、使用print()函数输出字符串
1、直接输出字符串
#使用print输出字符串 print ('你好','张三') print ("Python")
2、输出多行字符串
#使用print输出多行字符串 print (''' 床前明月光 疑是地上霜 举头望明月 低头思故乡 ''')
3、字符串的换行符
#print通过end指定换行符,默认是\n print("hellow,world") print("hellow,world",end="\n") #如果想要多行print不进行换行的话可以通过end来指定换行符,如end="" print("hello",end="") print("world")
4、字符串的分隔符
#通过sep指定多个参数之间的分隔符,默认是空格
print("tanglu","yunwei",sep="*") #输出是tanglu*yunwei
三、字符串转义符
使用转义符可以表示出一些无法直接输出的特殊字符,或者反过来将这些原本有特殊作用的字符作为单纯的字符进行输出,常用的特殊转义符有以下几种
· \n:换行
· \r:回车
· \t:制表符,即TAB键
· \b:退格
print('abc\ndef') print('abc\rdef') #输出def print('abc\tdef\txyz') #输出abc def xyz print('abc\bdef') #输出abdef
原始字符串r可以将后面引号内的内容全部作为文本显示,里面的特殊字符将没有效果
print(r"D:\three\two\one\now")
四、Python字符串索引
使用索引可以对字符串进行切片,切片时的顺序都是从左往右切。字符串的第1个索引是从0开始,然后1,2,3...最后一位为-1(因为数字没有负0这个说法),倒数第二位为-2。索引可以设置步长,当步长为负数时取值方向就是从右向左
name = 'tanglu'
print (name[1]) # 输出结果是a
print (name[0:3]) # 从0号索引开始,取到第3号索引,但是顾头不顾尾,不会取最后一位,所以结果会是tan
print (name[-1]) # 取最后1位,因为没有负0
print (name[1:-1]) # 去掉第一个字母和最后一个字母(包头不包尾)
print (name[0:]) # 从头开始取到结尾,也就是全部索引
print (name[:]) # 也代表从头取到尾
print (name[0:5:2]) # 步长2
print (name[::-1]) # 从尾到头反向取
num = '132'
num2 = num[0]+num[2]+num[1]
print(num2) #输出结果为123
五、格式化输出方式
1、百分号%
使用%占位符进行格式化输出,使用占位符就代表告诉程序后续将使用什么样的数据进行填充
使用占位符%加上特定字母可以进行简单格式化输出,常用于在字符串中引用变量
%s:字符串,如果不确定使用哪种占位数,那么%s永远适用,它会把数据类型转换为字符串
%d:数字
name = 'tanglu' age = 18 print ("我叫%s,我今年%d" %(name,age))
%10s:字符串右对齐,占位符10位
%-10s:字符串左对齐,占位符10位
%.2s:截取2位字符串
%f:浮点数,默认保留小数点后6位数字,可以使用%.3f这样的形式来保留3位小数
num1 = 100 num2 = 200 print("十进制输出:%d,%d" %(num1,num2)) num3 = 3.1415926 print("浮点数输出:%.2f" %(num3)) str1 = "www.linuxe.cn" print("s的标准输出:%s" %str1) print("取出前三位:%.3s" %str1)
如果要输出百分号本身的话需要用2个%,而不能用反斜线。看例子更容易明白
name = input("请输入你的名字:") age = input("请输入你的年龄:") height = input("请输入你的身高:") msg = "你的姓名是:%s,年龄:%s,身高:%s,学习进度:5%%" %(name,age,height) print(msg)
2、format()函数
相对基本格式化输出采用%的方法,format()功能更强大,兼容性较好。该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号'{}'作为特殊字符代替'%' ,大括号中可以使用索引的编号或者关键字实现类似后项引用的功能
print ('hello{},you are{}'.format('tanglu','18')) print ('{0} {1}'.format('hello','world')) print ('{0} {1} {0}'.format('hello','world')) print ('{1} {1} {0}'.format('hello','world')) print ('{a} {tom} {a}'.format(tom='hello',a='world')) #输出结果依次是 #hello tanglu,you are 18 #hello world #hello world hello #world world hello #world hello world
3、f-strings
Python 3.6开始推出的最简单的格式化方法,可以实现数学运算、字符串连接等计算任务,也支持宽度和精度的格式化调整
name = tanglu age = 18 print (f"我叫{name},今年{age}岁!") number = 123.456 print(f"{number:10}") #将number变量的宽度设置为10,不足10位的将从左侧开始用空格填充,最后输出' 123.456' print(f"{number:x10}") #将number变量的宽度设置为10,不足10位的将从左侧开始用0填充,最后输出'000123.456' number =123.4567 print(f"{number:.3f}") #保留小数后3位
六、Python字符串常用函数
字符串是不可变对象,所有方法都不会更改原字符串的内容,所以通常要将方法处理过的内容赋值给一个新的变量。Python官方文档中提供了字符串方法的说明,参考地址https://docs.python.org/zh-cn/3/library/stdtypes.html#string-methods
str():将其他类型数据转为字符串
age=3 str(age)
capitalize():将字符串的首个字母转换为大写,其他字母都为小写
name = "tanglu is good man"
new_name= name.capitalize()
print (name) #原字符串不会变化
print (new_name) #输出结果为Tanglu is good man
title():将每个单词的首字母转换为大写,单词之间可以用空格、特殊字符或者数字隔开
join():实现字符串拼接,和+号不同的是可以自定义拼接字符,可以用它来把列表转换为字符串
upper():将字符串全部转换为大写,同理还有lower()将字符串全部转换为小写。常用于需要忽略大小写的地方
#如验证码通常是不区分大小写的,可以使用lower()方法将其全部转换为小写最后进行判断
secure_input = 'zgEf'
user_input = input('请输入验证码:')
if secure_input.upper() == user_input.upper():
print ('输入正确')
else:
print ('输入错误')
#或者使用在一些脚本的退出中
while True:
content = input(输入Q退出)
if content.upper() == 'Q':
break
print (content)
strip():去掉字符串指定内容,默认是去掉字符串左右两端的空格、空白符或者换行符,常用于实现用户登录程序的输入处理。详细说明见另一篇文章介绍:https://ywdba.cn/post-475.html
name = " tanglu "
newname = name.strip()
startswith():判断字符串是否以指定的内容开头,同理还有endswitch()方法判断结尾,常用来过滤某后缀的文件,如.doc。符合返回True,不符合则False
a = 'happybirthday'
b = a.startswith('happy')
print(b)
isalnum():判断字符串中是否只有字母或者数字,如果有特殊字符的话为假
isalpha():判断字符串是否全部是字母,是的话为真,否则为假
name = "tanglu"
print (name.isalpha()) #返回True
isdecimal():判断字符串是否全部是整数,是的话为真,否则为假(还有一个类似方法为isdigit(),但是该方法对于类似①这样的字符也会被识别为整数,不太严谨)
isspace():判断字符串是否只有空格,是的话为真,否则为假
find():查找字符串是否包含指定的内容,找到的话返回其下标,否则返回-1,可以用来取url中的路径
path = "https://ywdba.cn/test_xvkldnglksdahglkehg.jpg" i = path.find('-') #输出_的索引位置 image_name = path[i+1:]
index():和find()方法作用一样,查找字符串索引下标,区别在于如果找不到字符串的话会报ValueError: substring not found的错误,而不是-1
isalpha()、isdigit()、isnumeric():分别用于判断字符串是否是字母、数字或者中文数字
name = "tanglu"
print (name.isalpha()) #返回true
count():对符合条件的字符串数量进行统计
name = 'tanglu'
name2 = name.count('tang')
print (name2) #返回应该是1,因为只有一次tang
message = "linuxe.cn is a good linux study website"
print(message.count('linux')) #返回2
split():使用指定的字符串作为分隔符进行内容的切割,作为分隔符的字符串会"损失"掉,切割后的数据将存放在一个列表中,需要注意如果被切割的字符串是在字符的边上,那会出现" "这样的空字符串
name = 'hello,world,byebye'
name2 = name.split(',')
print (name2) #输出结果[hello','world','byebye']
name = 'hello|world|byebye'
name2 = name.split(sep='|') #指定分隔符
print (name2) #输出结果[hello','world','byebye']
name = 'hello|world|byebye'
name2 = name.split(sep='|',maxsplit=1) #指定了分割次数,超出次数的剩余部分作为一个整体
print (name2) #输出结果['hello', 'world|byebye']
replace():字符串替换
name = 'www.linuxe.com' name2 = name.replace('com','cn') print (name2) #输出www.linuxe.cn message = 'hello,world' new_message = message.replace('l','L',1) #第三个参数代表替换操作的次数 print (new_message) #输出heLlo,world
七、字符串常用方法综合示例
1、判断用户上传的文件名以及文件长度,必须是.jpg或.gif后缀且前缀大于5才可上传
upload_file = input("请输入上传文件的名字,需要是.jpg或.gif后缀:") #判断后缀 if upload_file.endswith(".jpg") or upload_file.endswith(".gif") : # 判断前缀 file_name_index = upload_file.find('.') file_name = upload_file[:file_name_index] if len(file_name)<5: print("文件名长度少于5位") else: print(f"你上传的文件是{upload_file}") else: print("上传文件格式错误")
2、生成6位随机字符串
import random ran_code = '' ran_code_ori = "zxcvbnmasdfghjklqwertyuiop123456789" for i in range(6): index = random.randint(0,len(ran_code_ori)-1) #len是取的整个长度,而索引下标是从0开始,所以这里正确的索引下表应该减1 ran_code += ran_code_ori[index] print(f"验证码如下:{ran_code}")
评论