Python基础教程(4)数据类型之字符串str

TangLu 未命名 2019-12-12 4529 0

一、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


企业微信截图_20220106153124.png


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}")


评论