python番外篇——字符串的数据类型转换及内置方法
目录
字符串的数据类型转换及内置方法
类型转换
类型转换是python解释器提供的,直接就可以使用的方法。
str可以转换所有基本数据类型
# int 把整型转换成字符串并打印转换后的类型
print(str(11), type(str(11)))
# float 把浮点型转换成字符串并打印转换后的类型
print(str(11.11), type(str(11.11)))
# list 把列表转换成字符串并打印转换后的类型
print(str([1, 2, 3, 4]), type(str([1, 2, 3, 4])))
# dict 把字典转换成字符串并打印转换后的类型
print(str({'name': 'jason'}), type(str({'name': 'jason'})))
# tuple 把元组转换成字符串并打印转换后的类型
print(str((1, 2, 3, 4)), type(str((1, 2, 3, 4))))
# set 把集合转换成字符串并打印转换后的类型
print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4})))
# bool 把布尔型转换成字符串并打印转换后的类型
print(str(True), type(str(True)))
内置方法
数据类型的内置方法是数据类型通过句点的方式可以直接调用出来的方法(每个类型都有自己的内置方法)
优先掌握的方法
s1 = 'hello world'
# 1.索引取值
print(s1[0]) # h
# 2.切片操作
print(s1[2:4]) # ll (顾头不顾尾,取出2到3的所有字符)
#2.1反向切片
print(s1[::-1]) # dlrow olleh (-1表示从右往左依次取值)
# 3.步长
print(s1[2:9:1]) # llo wor (第三个参数是步长 默认是1 依次获取)
print(s1[2:9:2]) # lowr (间隔一个取一个)
# 索引取切片扩展
print(s1[-1]) # d (获取最后一个字符)
print(s1[-1:-5:-1]) # dlro (第三个参数还可以控制索引的方向)
print(s1[-5:-1]) # worl
# 4.统计字符串中字符的个数
print(len(s1)) # 11
'''获取字符串的长度,即字符的个数,但凡存在于引号内的都算作字符'''
# 5.成员运算 in 和 not in
print('ll' in s1)
print('tony' not in s1 )
# 6.strip移除字符串首位指定的字符(使用频率较高)
name = ' jason '
print(len(name))
res = name.strip() # 默认移除字符串首尾的空格
print(res, len(res))
name1 = '$$$$jas$on$$$$'
print(name1.strip('$')) #括号内指定字符,移除首尾指定的字符,
username = input('username>>>>:').strip()
if username == 'jason':
print('我想去干饭了!!!')
# 7.按照指定的字符切割字符串(切分split\rsplit)
data = 'jason|123|DBJ'
print(data.split('|')) # ['jason', '123', 'DBJ']
name, pwd, hobby = data.split('|') # 解压赋值
print(data.split('|', maxsplit=1)) # ['jason', '123|DBJ']
'''
split会按照从左到右的顺序对字符串进行切分,可以指定切割次数
rsplit方向刚好与split相反,从右往左切割,也可以指定切割次数
'''
print(data.rsplit('|', maxsplit=1)) # ['jason|123', 'DBJ']
"""split方法 切割 完得到的结果是 列表 数据类型"""
# 7.1 括号内不指定字符,默认以空格作为切分符号
str3='hello world'
print(str3.split()) # ['hello', 'world']
# 8.循环
str5 = '今天你好吗?'
for line in str5: # 依次取出字符串中每一个字符
print(line)
''' 结果:
今
天
你
好
吗
?
'''
字符串除了有上面那些我们必须要熟练掌握的方法以外还有一些我们需要掌握的其他方法,让我们学起来吧~
需要掌握的方法
strip, lstrip, rstrip
'''移除字符串首尾的指定字符 可以选择方向'''
s1 = '$$$jason$$$'
print(s1.strip('$')) # jason
print(s1.lstrip('$')) # jason$$$ left--左边
print(s1.rstrip('$')) # $$$jason right--右边
lower, upper, islower, isupper
'''大小写相关操作'''
s2 = 'JaSoN666Sb'
print(s2.lower()) # 将所有的英文字母变为小写 jason666sb
print(s2.upper()) # 将所有的英文字母变为大写 JASON666SB
print(s2.islower()) # 判断字符串中所有的英文字母是否是纯小写 结果是布尔值
print(s2.isupper()) # 判断字符串中所有的英文字母是否是纯大写 结果是布尔值
插入一个小知识(图片验证码)
'''图片验证码:由一串有数字、大写字母、小写字母组成'''
# 问:为什么以前的验证码大小写不能忽略,而现在的验证码却可以忽略大小写,是如何实现的
code = 'JaSOn6'
print('这是返回给用户的图片验证码:%s' % code)
user_code = input('请输入验证码>>>:').strip()
if code.lower() == user_code.lower(): # 验证码忽略大小写-->只需要统一转大写或者小写即可
print('验证码正确')
else:
print('验证码错误')
startswith, endswith
'''判断字符串的开头或者结尾是否是指定的字符'''
s3 = 'jason kevin jason tony 666'
# startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
print(s3.startswith('j')) # True
print(s3.startswith('jason')) # True
print(s3.startswith('tony')) # False
# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
print(s3.endswith('6')) # True
print(s3.endswith('666')) # True
print(s3.endswith('jason')) # False
格式化输出之format
方式1 占位符:%s %d,在传值时,必须严格按照位置与%s一一对应
方式2 format方法(不依赖位置的传值方式)
# 方式1: 跟占位符一致,使用 {} 来占位
print('my name is {} my age is {}'.format('jason', 18))
# my name is jason my age is 18
# 方式2: 把format传入的多个值当作一个列表,根据索引取值,索引位可以‘反复使用’
print('my name is {0} my age is {1}'.format('jason', 18))
# my name is jason my age is 18
print('my name is {0} {0} {0} my age is {0} {1}'.format('jason', 18))
# my name is jason jason jason my age is jason 18
# 方式3:指名道姓!
# format括号内的数据在传参数时完全可以打乱顺序,但仍然能指名道姓地为指定的参数传值
print('my name is {name} my age is {age} {pwd} is password'.format(name='jason', age=18, pwd=123))
# my name is jason my age is 18 123 is password
print('my name is {name} {name} my age is {age} {age} {pwd} is password'.format(name='jason', age=18, pwd=123))
# my name is jason jason my age is 18 18 123 is password (没错,它也可以重复使用)
# 方式4:直接使用已经出现过的变量
name = 'jason'
age = 18
print(f'my name is {name} my age is {age}')
# my name is jason my age is 18
name = 'jason'
age = 18
print(f'my name is {name} {name} my age is {age} {age}')
# my name is jason jason my age is 18 18 (没错,它也可以重复使用)
拼接字符串(+ * join)
s1 = '三月不努力 四月变垃圾'
s2 = '年少不努力 妄为少年人'
print(s1 + s2) # 如果字符串很大 加号效率较低
# 三月不努力 四月变垃圾年少不努力 妄为少年人
print(s1 * 10) # 乘号之后的数字是重复次数
'''join:按照指定的分隔符进行拼接,拼接的结果为字符串'''
print('|'.join(s1)) # 三|月|不|努|力| |四|月|变|垃|圾
print('$'.join(['jason', 'kevin', 'justin', 'tony'])) # jason$kevin$justin$tony
'''join方法相当于是将括号内的元素进行了for循环'''
l1 = [11, 'jason', 'kevin']
print('|'.join(l1)) # join的元素必须都是字符串才可以, 否则报错
替换字符串中指定的字符(replace)
s6 = 'jason is DSB DSB DSB DSB jason jason jason'
# 用新的字符替换字符串中旧的字符
# 将jason替换成老刘
print(s6.replace('jason', '老刘')) # 默认一次性替换所有
# 指定替换的个数
print(s6.replace('jason', '老刘', 2)) # 通过数字控制替换的个数 从左往右
'''很多文本编辑器里面的替换功能 就可以使用replace完成'''
判断字符串中是否是纯数字(isdigit)
# 判断字符串是否是纯数字组成,返回结果为True或False
s7 = 'jason123'
print(s7.isdigit()) # False
print('123'.isdigit()) # True
print('123.21'.isdigit()) # False
score = input('score>>>:')
if score.isdigit():
score = int(score)
else:
print('学习有时枯燥有时好玩儿')
哇!!学习了那么多的关于字符串的方法了呀~
但是,还有哦,现在来看看一些需要我们了解的方法吧~
需要了解的方法
查找指定字符对应的索引值
s1 = 'jason justin kevin tony'
# find:从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1
print(s1.find('s')) # 2 从左往右查找 查找一个就结束
print(s1.find('k', 1, 9)) # -1 意思是没有找到
# index:同find,但在找不到时会报错
print(s1.index('s')) # 2
print(s1.index('k', 1, 9)) # 找不到直接报错 不推荐使用
# count:统计字符串在大字符串中出现的次数
msg = "hello everyone"
print(msg.count('e')) # 统计字符串e出现的次数
# 4
print (msg.count('e',1,6)) # 字符串e在索引1~5范围内出现的次数
# 1
文本位置改变
name = 'tony'
print(name.center(30, '-')) # 总宽度为30 将tony居中显示
print(name.ljust(30, '*')) # 总宽度为30 tony靠对齐显示
print(name.rjust(30, '$')) # 总宽度为30 tony右对齐显示
print(name.zfill(50)) # 总宽度为50,字符串右对齐显示,不够用0填充(zero 零)
特殊符号
斜杠与一些英文字母的组合会产生特殊的含义
print('ja\tson\nke\avin')
'''如果想取消它们的特殊含义 可以在字符串的前面加一个字母r'''
# print(r'ja\tson\nke\avin')
name = 'tony\thello' # \t表示制表符(tab键)
print(name)
# tony hello
print(name.expandtabs(1)) # 修改\t制表符代表的空格数
# tony hello
captalize:首字母大写
message = 'hello everyone nice to meet you!'
message.capitalize()
# Hello everyone nice to meet you!
swapcase:大小写翻转
message1 = 'Hi girl, I want make friends with you!'
message1.swapcase()
# hI GIRL, i WANT MAKE FRIENDS WITH YOU!
title:每个单词的首字母大写
msg = 'dear my friend i miss you very much'
msg.title()
# Dear My Friend I Miss You Very Much
太棒了!这么多的字符串相关的方法都了解啦,接下来的就是熟练运用了!!!