上一节我们学习了注释、变量和基本数据类型中的Bool和Number。今天,让我们继续来认识一个新朋友——字符串。
字符串,虽然说是新朋友,但我们也对它或多或少也有一个懵懵懂懂的认识。还记得我们的第一行代码吗?"Hello world"就是一个字符串。今天,我们将来更加清晰地认识一下这个老朋友。
字符串的形式
字符串有多种形式,可以有以下几种:
- 单行字符串
使用单引号' . . . '
或者" . . . "
都可以获得一个字符串:
"""
单行字符串
"""
#使用单引号
print('hello world') #hello world
#使用双引号
print("hello world") #hello world
当字符串中需要出现引号时,选择不同的引号创建字符串
#字符串中需要出现单引号
print("I'm Feng_Forever") #I'm Feng_Forever
#字符串中需要出现双引号
print('"Yes ," He said.') #"Yes ," He said.
- 多行字符串
字符串可以使用三对引号""" . . ."""
或'''. . . '''
实现多行字符串的创建:
"""
创建多行字符串
"""
#使用三对双引号
print("""
*
* *
* * *
""")
#
# *
# * *
#* * *
#
#使用三对单引号
print('''
A
BBBBB
CCCCCCCCC
''')
#
# A
# BBBBB
#CCCCCCCCC
#
可以看到,字符串中会保留输出文本中的所有回车换行信息,如果不想包含,可以在行尾填加一个\
:
#去除第一行换行
print("""\
*
* *
* * *
""")
# *
# * *
#* * *
#
#去除第一第二行和最后一行的换行
print("""\
*\
* *
* * *\
""")
# * * *
#* * *
字符串操作
字符串连接
字符串可以用 +
连接到一起。
"""
字符串连接操作
"""
#使用加号将字符串连接
message="Hello"
name='Feng Forever '
print(message+", "+name) #Hello, Feng Forever
相邻的两个或多个字符串字面值 (引号引起来的字符)将会自动连接到一起
"""
字符串连接操作
"""
#使用加号将字符串连接
message="Hello"
name='Feng Forever '
print(message+", "+name) #Hello, Feng Forever
#相邻的字符串字面值将自动连接
print('hello ''Feng Forever') #hello Feng Forever
#可以用于长字符,方便查看
print(
"I have to remind myself that some birds aren’t meant to be caged."
"Their feathers are just too bright."
" And when they fly away, the part of you that knows it was a sin to lock hem up DOES rejoice."
" Still, the place you live in is that much more drab and empty that they’re gone. I guess I just miss my friend."
)
#I have to remind myself that some birds aren’t meant to be caged.Their feathers are just too bright. And when they fly away, the part of you that knows it was a sin to lock hem up DOES rejoice. Still, the place you live in is that much more drab and empty that they’re gone. I guess I just miss my friend.
字符串可用 *
进行重复
"""
重复字符串
"""
#使用*重复字符串
message="ha"
print(3*message) #hahaha
#不要忘了运算符之间的优先级哦
#加个括号是个好习惯
message="Hello"
name='Feng Forever '
print(message+", "+name*3) #Hello, Feng Forever Feng Forever Feng Forever
print((message+", "+name+'\n')*3)
#Hello, Feng Forever
#Hello, Feng Forever
#Hello, Feng Forever
#
字符串切片
字符串可以被索引,下标0开始代表第一个字符。下标-1开始代表最后一个字符(-0和0是一样的,都代表第一个字符)。
单个字符是一个长度为1的字符串
"""
字符串索引
"""
message="123456789"
print(message[0]) #1
print(message[1]) #2
print(message[-1]) #9
print(message[-2]) #8
print(type(message[1])) #<class 'str'>
要注意,若索引过大,超过可被索引的范围(索引越界),程序运行时就会报错并停止运行。
"""
索引越界
"""
message="Hello world"
#得到字符串长度
mes_len=len(message)
print(mes_len) #11
#别忘是索引是从0开始的。
#虽然字符串的长度为mes_len,但可用的索引最大值为 (mes_len-1)
#故mes_len索引越界
print(message[mes_len])
可以看到,程序时报错,提示有一个IndexError异常发生在第代码的13行,所以我们可以根据异常提示对第13行的代码进行修改。
关于异常,我会在后面的异常处理中详细说明,现在你只要有个简单的认识,大概知道哪里发生异常并能根据提示修改就够了。
索引的获得单个字符,而切片可以获得子字符串:
"""
字符串切片
"""
message="Hello world"
#切片的起点被包含,但不包含终点
print(message[1:4]) #ell
#若设定起点,则默认为0
print(message[:4]) #Hell
#若不设终点,则打印到字符串末尾
print(message[1:]) #ello world
#别忘了终点是不包含的啊~
print(message[1:-1]) #ello worl
字符串修改
字符串不可修改。在7个基本数据类型中(忘记的同学可以去看看上一节),Number、String、Tuple是不可变数据。因此,你对字符串的某个索引位置赋值会产生一个错误。
"""
字符串不可修改
"""
message="Hello world"
#修改字符串中的某个字符将会报错
message[2]='a'
字符串的常用内置方法
大小写转换
title()返回一个
"""
介绍一些常用的字符串函数
这些字符串函数返回一个被修改后的原字符串拷贝值,并不修改字符串本身
别忘了,字符串不可修改
"""
message="hello world"
#将字符串中的每个单词的首字母大写
print(message.title()) #Hello World
print(message) #hello world 字符串本身并不会被修改
#将字符串中的每个字母都转换为大写
print(message.upper()) #HELLO WORLD
message2="HELLO WORLD"
#将字符串中的每个字母都转换为小写
print(message2.lower()) #hello world
删除空白
"""
介绍一些常用的字符串函数
这些字符串函数返回一个被修改后的原字符串拷贝值,并不修改字符串本身
别忘了,字符串不可修改
"""
message3=" hello world "
#"!"用于突出右侧空格变化
print(message3+"!") # hello world !
#删除字符串中的左右侧的空格
print(message.strip()+"!") #hello world!
#删除字符串中的左空格,"
print(message3.lstrip()+"!") #hello world !
#删除字符串中的左空格
print(message3.rstrip()+"!") # hello world!
具体用法可参见附表
字符串转义符
字符\
可以转义很多特殊符号,比如\n
表示换行,\t
表示制表符(TAB),字符\
本身也需要转义,所以\\
表示的字符就是\
"""
转义字符
"""
print("Things that make you sad, \none day, you will laugh out and say it.")
#Things that make you sad,
#one day, you will laugh out and say it.
print('I\'m Feng_Forever') #I'm Feng_Forever
print("C:\\Program Files\\Intel\\Wifi\\Help") #C:\Program Files\Intel\Wifi\Help
有时,需要转义的地方过多,这时,则可以考虑在字符串前加r
直接输出原文本,避免输入大量的\
print(r"C:\Program Files\Intel\Wifi\Help") #C:\Program Files\Intel\Wifi\Help
更多常见转义字符,可参见附表
字符串格式化
"""
字符串格式化
"""
message = "{0} Love {1}".format('I', 'Python') # 位置参数
print(message) #I Love Python
message = "{a} Love {b}".format(a='I', b='Python') # 关键字参数
print(message) # I Love Python
message = "{0} Love {b}".format('I', b='Python') # 位置参数要在关键字参数之前
print(message) # I Love Python
message = '{0:.2f}{1}'.format(3.14159, 'GB') # 保留小数点后两位
print(message) # 27.66GB
小结
今天我们学习了字符串的形式、字符串的操作、字符串的函数、字符串的转义符以及字符串的格式化。并且也知道了字符串、数字以及元组是是不可变数据。那今天的学习就到此结束啦。
一起学习,一起成长!
附表
常用方法
字符串的方法 | 描述 |
---|---|
str.title() | 返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写。 |
str.lower() | 返回原字符串的副本,其所有区分大小写的字符均转换为小写 |
str.upper() | 返回原字符串的副本,其所有区分大小写的字符均转换为小写 |
str.lstrip([chars]) | 返回原字符串的副本,移除其中的左侧待移除字符char(默认为空格符) |
str.rstrip([chars]) | 返回原字符串的副本,移除其中的右侧待移除字符char(默认为空格符) |
str.strip([chars]) | 返回原字符串的副本,移除其中的两侧待移除字符char(默认为空格符) |
转义字符
转义字符 | 描述 |
---|---|
\ | 反斜杠符号 |
’ | 单引号 |
" | 双引号 |
\n | 换行 |
\t | 制表符(TAB) |
\r | 回车 |
printf 风格的字符串格式化
print('%c' % 97) # a
print('%c %c %c' % (97, 98, 99)) # a b c
print('%d + %d = %d' % (4, 5, 9)) # 4 + 5 = 9
print("我叫 %s 今年 %d 岁!" % ('小明', 10)) # 我叫 小明 今年 10 岁!
print('%o' % 10) # 12
print('%x' % 10) # a
print('%X' % 10) # A
print('%f' % 27.658) # 27.658000
print('%e' % 27.658) # 2.765800e+01
print('%E' % 27.658) # 2.765800E+01
print('%g' % 27.658) # 27.658
text = "I am %d years old." % 22
print("I said: %s." % text) # I said: I am 22 years old..
print("I said: %r." % text) # I said: 'I am 22 years old.'
转换符 | 含义 |
---|---|
‘d’ | 有符号十进制整数 |
‘i’ | 有符号十进制整数 |
‘o’ | 有符号八进制数 |
‘x’ | 有符号十六进制数(小写) |
‘X’ | 有符号十六进制数(大写) |
‘e’ | 浮点指数格式(小写) |
‘E’ | 浮点指数格式(大写) |
‘f’ | 浮点十进制格式 |
‘F’ | 浮点十进制格式 |
‘g’ | 浮点格式。 如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式 |
‘G’ | 浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式 |
‘c’ | 单个字符(接受整数或单个字符的字符串) |
‘r’ | 字符串(使用 repr() 转换任何 Python 对象) |
‘s’ | 字符串(使用 str() 转换任何 Python 对象) |
‘a’ | 字符串(使用 ascii() 转换任何 Python 对象) |
‘%’ | 不转换参数,在结果中输出一个 ‘%’ 字符 |
print('%5.1f' % 27.658) # ' 27.7'
print('%.2e' % 27.658) # 2.77e+01
print('%10d' % 10) # ' 10'
print('%-10d' % 10) # '10 '
print('%+d' % 10) # +10
print('%#o' % 10) # 0o12
print('%#x' % 108) # 0x6c
print('%010d' % 5) # 0000000005
符号 | 功能 |
---|---|
m.n | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
- | 用作左对齐 |
+ | 在正数前面显示加号( + ) |
# | 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’) |
0 | 显示的数字前面填充’0’而不是默认的空格 |