2 字符串
2.1 定义
是字符序列,是有顺序的
2.2 字符串的表示
单引号 ’ ’ 、双引号" “、三引号’’’ ‘’’ / “”” “”"
# 单引号
str1 = 'It\'s a hot day!'
print(str1)
# 双引号
str1 = "It's a hot day!"
print(str1)
# 三引号
prompt = """请选择您要选择的业务:
1.存款
2.取款
3.查看明细
"""
2.3 转义字符与不转义表示
prompt = "请选择您要选择的业务:\n1.存款\n2.取款\n3.查看明细"
print(prompt)
# r =》raw =》原始 =》正则表达式
# r 不转义,作为原始字符串输出
prompt = r"请选择您要选择的业务:\n1.存款\n2.取款\n3.查看明细"
print(prompt)
运行结果
请选择您要选择的业务:
1.存款
2.取款
3.查看明细
请选择您要选择的业务:\n1.存款\n2.取款\n3.查看明细
2.4 字符串取值与切片
取单个字符
prompt = "Today is a hot day!"
# 取一个字符 =》下标法 => 从0开始
# 正下标/索引(从0开始) , 负下标/索引(从-1开始)
print(prompt[0]) # T
print(prompt[-1]) # !
取多个字符 =》切片
str[开始下标:结束下标:步长] 包含开始值,不包含结束值(左闭右开)
开始下标为空 =》 默认就是字符串的开始
结束下标为空 =》 默认就是字符串的结束
步长 =》 默认步长为1,默认从左往右
prompt = "Today is a hot day!"
print(prompt[0:5]) # Today
print(prompt[-4:-1]) # day
print(prompt[-4:]) # day!
print(prompt[::2]) # 跳过1个输出1个
print(prompt[::3]) # 跳过2个输出1个
如果步长为负,默认从右到左取值
print(prompt[::-1])
# -1 从右向左输出 !yad toh a si yadoT
print(prompt[4::-1]) # yadoT
print(prompt[0:5][::-1]) # yadoT
切片取值的步骤
1、看步长,如果step为正 ,表示从左到右截取,如果step为负,表示从右到左截取
2、确认start和end的位置
3、确认step的步长是多少
字符串是不可序列
字符串是不可变序列,如果定义好了,不能修改它的值
# 错误演示
prompt = "Today is a hot day!"
prompt[6] = 'I'
print(prompt[6])
# TypeError: 'str' object does not support item assignment
# 如果想修改字符串的内容,只能重新赋值
prompt = "Today is a hot day!"
prompt = "Today Is a hot day!"
print(prompt[6])
# 赋值运算从右到左
2.5 字符串的方法
1.判断系列
identifier合法标识符:由 字母、数字或下划线 组成,但是只能以字母和下划线开头
prompt = "Today is a hot day"
# dir 查看对象有什么方法
# print(dir(prompt))
# print(dir(str))
# help =》 查看方法如何用
# help(对象.方法)
# help(prompt.title)
# print(prompt.title())
mystr = '1234'
print(mystr.isdigit()) # T
mystr = '1234一二三q'
print(mystr.isnumeric()) # F
mystr = 'Hello world!'
print(mystr.istitle()) # F
print(mystr.isalpha()) # F
mystr='我是cali'
print(mystr.isalpha()) # T
mystr = "Today is a hot day!"
print(mystr.startswith("Today")) # T
print(mystr.startswith("hot",11)) # T
print(mystr.endswith("day!")) # T
2.查找统计类
mystr = "Today is a hot day"
print(len(mystr)) # 18
print(mystr.count("ay")) # 2
print(mystr.index('day')) # 2
print(mystr.find('cold')) #-1
3.转换类
upper() lower() title()
mystr = "Today is a hot day"
print(mystr.upper())
print(mystr.lower())
print(mystr.title())
运行结果:
TODAY IS A HOT DAY
today is a hot day
Today Is A Hot Day
split => 切割字符串 =>默认分隔符为一个或多个空格,得到的结果是一个列表
mystr = "cali#18#female"
print(mystr.split('#'))
print(mystr.split('#')[0])
mystr = "cali 18 female"
print(mystr.split())
运行结果:
['cali', '18', 'female']
cali
['cali', '18', 'female']
join =》 将列表拼接一个大字符串
“分隔符”.join(列表)
mystr = ['cali', '18', 'female']
print('#'.join(mystr))
a = "字符串拼接1"
b = "字符串拼接2"
c = "".join([a,b])
运行结果:
cali#18#female
字符串拼接1字符串拼接2
strip 去除首尾指定的字符,默认空白字符
如果指定了去除字符,那么从首尾连续取单个的字符看在不在指定的字符里面,如果在,则去除,直到取到不在指定字符里面,就结束
示:输入邮箱: linuxzhen520@163.com
my_email = " linuxzhen520@163.com "
print(my_email.strip())
my_email = "linuxzheniii520@163.cmom "
print(my_email.strip(' limo'))
运行结果:
linuxzhen520@163.com
nuxzheniii520@163.c
replace 查找替换功能
mystr = "Today is a hot day! d"
print(mystr.replace('day','Day')) #默认全部替换
print(mystr.replace('day','Day',1)) #只替换一次
运行结果:
ToDay is a hot Day! d
ToDay is a hot day! d
center() rjust() ljust()
str1 = 'welcome here'
str2 = 'choice1'
print(str1.center(30))
print(str1.center(30,'#'))
print(str2.rjust(30,'.'))
print(str2.ljust(30,'.'))
str1 = '欢迎您' #中文可能对不齐
print(str1.center(30))
运行结果:
welcome here
#########welcome here#########
.......................choice1
choice1.......................
欢迎您
2.6 字符串拼接
1.加号拼接
str1 = "i" + " am " + "lilei"
str2 = "beatfullan" * 3
print(str1)
print(str2)
2.join 用字符串将列表拼接成一个大字符串
str3 = "".join(["i" , "am", "lilei"])
print(str3)
3. 字符串格式化
3.1 使用% 占位符来进行格式化
%s 表示字符串
%d 表示整型十进制
%f 表示浮点数
%x 表示十六进制数
%o 表示八进制数
%% 表示百分号本身
name = "wen"
age = 18
print("i am %s, my age is %x"%(name, age))
# 基本格式 %[(name)][flags][width].[precision]typecode
# s,d,f,x,o为typecode
(name):命名
flags: +,-,' '或0。+表示正数前面填充"+"号;-表示左对齐;' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐,0表示使用0填充。
width表示显示宽度
precision表示小数点后精度
print("第一个格式化:%010x" % 10)
print("第二个格式化:%-11x" %10)
print("第三个格式化:% x"%10)
# flags标志位为 + 或者 空格 只对正数有用,表示和负数对齐。对字符串形式是没有用的
print("第四个格式化: %010.3f"%2.4352341)
print("第五个格式化:%.4f"%4.546456)
print("第六个格式化:%s %%"%("sc"))
练习:
f1 = 0.234345623
print("%.2f"%(f1*100))
#转化成百分位,保留2位小数,字符串形式展示
4.format 格式化
{变量名:[填充字符][对齐方式<^>][宽度][格式]}
name = "wen"
age = 18
print("format01 --> 姓名:{}, 年龄:{}".format(name,age))
print("format01 --> 姓名:{}, 年龄:{}".format(age,name))
print("format02 --> 姓名:{1}, 年龄:{1}".format(name,age))
print("format02 --> 姓名:{x}, 年龄:{y}".format(x=name,y=age))
#format格式化 {变量:[填充字符][对齐方式 <^>][宽度][格式]}
print("format03 --> {0:*>8}".format(10,20))
#变量为format中的第一个数,用*右对齐填充,共八个字符的宽度
print("format04 --> {num:@^10}".format(num=35))
#精度与进制
print("format05 -- > {1:*>15.2f}".format(1/3, 6.33333333333))
print("format06 --> {0:x}".format(10))
#千分位格式化
print("format07 -->{0:,}".format(123456789))
# f 标志位 格式化
#python3 才有
name = "wen"
age = 18
print(f"my name is {name:a^10}, my age is {age}")
字符串拼接练习:
a = "字符串拼接1"
b = "字符串拼接2"
c = a + b
print(c)
c = "".join([a,b])
print(c)
c = "{}{}".format(a,b)
print(c)
c = f"{a}{b}"
print(c)
print(len(c),c[6])
str1 = "8*y*cali*china**it*soft*linux*python"
# print(len(str1))
str2 = str1.replace("*","")
# print(str2)
print(f"{str2:*>36}")
f 标志位 格式化
#python3 才有
name = "wen"
age = 18
print(f"my name is {name:a^10}, my age is {age}")