一、基本语法
1. 字符串可以用单引号,双引号,三引号进行表达
str1='abc'
print(str1) #abc
str2="abc"
print(str2) #abc
str3='''abc'''
print(str3) #abc
2. 句子中本身含有单引号,用双引号表示字符串
print('It's OK') #invalid syntax语法错误
print("It's OK") #It's OK
3. 句子中本身含有双引号,用单引号表示字符串
print('He said: "Are you OK?"') #He said: "Are you OK?"
4. 三引号中的字符串可以换行写,三引号既可以使用三个单引号,也可以使用三个双引号,但其后要保持一致
print('''abcdefg
hijklmn''')
'''
abcdefg
hijklmn
'''
5. 字符串中如果含有特殊字符,会按照转义后的含义输出
\n 换行符 \t 制表符
print('''abcdefg\nhijklmn''')
'''
abcdefg
hijklmn
'''
如何让转义字符不生效:
filepath='D:\note.txt'
print(filepath) #因为有转义字符\n,不会打印出正确的完整路径
/*D:
ote.txt*/
1. 在转义字符前加\,转义字符不生效
filepath='D:\note.txt'
print(filepath) #D:\note.txt
2. 在整个字符串前加r,转义字符不生效
filepath=r'D:\note.txt'
print(filepath) #D:\note.txt
3. 将\换成/,因为在操作系统中,可以用/表示路径
filepath='D:/note.txt'
print(filepath) #D:/note.txt
二、字符串拼接
print('1' + '2') #12
print('1' + 2) #报错TypeError: can only concatenate str (not "int") to str
print('1' * 2) #11
type(): 返回对象的数据类型
print(type(1)) #<class 'int'>
print(type('1')) #<class 'str'>
str(), int(), float(): 将对象强制转换成对应数据类型
int1=1
print(type(int1)) #<class 'int'>
str1=str(int1)
print(str1) #1
print(type(str1)) #<class 'str'>
print(int('1')) #1 将字符串转换成int
print(int(1.5)) #1 将浮点数转换成int 向下取整
print(str(1.5)) #1.5 将浮点型转换成str
print(float(1)) #1.0 将整型转换成float
print(float('1')) #1.0 将str转换成float
转换不能转两次,转换要根据实际类型来
print(int('1.2')) #报错ValueError: invalid literal for int() with base 10: '1.2' '1.2'->1.2不是整型,不能再将1.2换成1,所以报错
print(int('a')) #报错ValueError: invalid literal for int() with base 10: 'a'
三、字符串下标
1. 正下标,从0开始
str1='abcdefg'
print(str[0]) #a
2. 负下标,从-1开始
str1='abcdefg'
print(str1[-1]) #g
3. 只能通过下标访问字符串,不能通过下标修改字符串,因为字符串属于不可变对象
str1='abcdefg'
str1[1]='B' #报错TypeError: 'str' object does not support item assignment
四、字符串切片
[起始值:终止值:步长] 包含起始值,不包含终止值
str1='abcdefg'
print(str1[1:4]) #bcd
print(str1[-6:-3]) #bcd
print(str1[1:]) #bcdefg
print(str1[2:0:-1]) #翻转 cb
print(str1[-5:-7:-1]) #翻转 cb
print(str1[0:6:2]) #ace
print(str1[:]) #abcdefg
print(str1[::-1]) #翻转整个字符串 gfedcba
字符串切片会生成一个新的字符串,与原字符串无关
str1='abcdefg'
print(str1[1:4]) #bcd
print(str1) #abcdefg
五、格式化字符串
1. %
%s str型 %d int型 %f float型:默认保留6位小数
resp='我叫%s,今年%d岁,存款%f元'%('Apple',18,100)
print(resp) #我叫Apple,今年18岁,存款100.000000元
如果前面的占位符比后面的参数多,会报错
resp='我叫%s,今年%d岁,存款%f元'%('Apple',18,100)
print(resp) #TypeError: not enough arguments for format string
如果后面的占位符比前面多,会报错
resp='我叫%s,今年%d岁,存款100元'%('Apple',18,100)
print(resp) #TypeError: not all arguments converted during string formatting
至少显示n位:在%后面加上需要显示的位数(总共显示的位数),不足的位数用空格补齐
resp='我叫%10s,今年%5d岁,存款%20f元'%('Apple',18,100)
print(resp) #我叫 Apple,今年 18岁,存款 100.000000元
如果超过n位:按照正常显示,因为是至少显示n位,超过的话也可以显示
resp='我叫%1s,今年%1d岁,存款%1f元'%('Apple',18,100)
print(resp) #我叫Apple,今年18岁,存款100.000000元
数字可以不补空格,补0,在位数前面加上0就可以
resp='我叫%1s,今年%03d岁,存款%1f元'%('Apple',18,100)
print(resp) #我叫Apple,今年018岁,存款100.000000元
显示默认是右对齐,如果要改成左对齐,在位数前加上负号-
resp='我叫%-10s,今年%-3d岁,存款%-20f元'%('Apple',18,100)
print(resp) #我叫Apple ,今年18 岁,存款100.000000 元
浮点型改变小数位数:.保留位数
resp='我叫%s,今年%d岁,存款%.2f元'%('Apple',18,100)
print(resp) #我叫Apple,今年18岁,存款100.00元
2. .format
顺序取值
resp='我叫{},今年{}岁,存款{}元'.format('Apple',18,100.11)
print(resp) #我叫Apple,今年18岁,存款100.11元
如果前面的占位符比后面的参数多,会报错
resp='我叫{},今年{}岁,存款{}元'.format('Apple',18)
print(resp) #IndexError: Replacement index 2 out of range for positional args tuple
如果前面的占位符比后面的参数少,不会报错
resp='我叫{},今年{}岁,存款100元'.format('Apple',18,100.11)
print(resp) #我叫Apple,今年18岁, 存款100元
下标取值
从0开始
resp='我叫{1},今年{3}岁,她叫{0},今年{2}岁'.format('Apple','Banana',10,20)
print(resp) #我叫Banana,今年20岁,她叫Apple,今年10岁
多个下标可以使用多次
resp='我叫{0},她叫{0},他也叫{0}'.format('Apple')
print(resp) #我叫Apple,她叫Apple,他也叫Apple
下标和顺序取值不能混用
resp='我叫{0},今年{1}岁,存款{}元'.format('Apple',18,100.11)
print(resp) #ValueError: cannot switch from manual field specification to automatic field numbering
至少显示n位,在{}加上:n
resp='我叫{0:10},今年{1:10}岁,存款{2:10}元'.format('Apple',18,100.11)
print(resp) #我叫Apple ,今年 18岁,存款 100.11元
由上述可以看出,字符串默认左对齐,数字默认右对齐,可以修改对齐方式
<: 左对齐 >: 右对齐 ^: 居中对齐
resp='我叫{0:>10},今年{1:^10}岁,存款{2:<10}元'.format('Apple',18,100.11)
print(resp) #我叫 Apple,今年 18 岁,存款100.11 元
数字补0:在空格处补0
resp='我叫{0:10},今年{1:>010}岁,存款{2:^010}元'.format('Apple',18,100.11)
print(resp) #我叫Apple ,今年0000000018岁,存款00100.1100元
3. f
python3.6以后版本支持
a='Apple'
b='Banana'
resp=f'我叫{a}, 你叫{b}'
print(resp) #我叫Apple, 你叫Banana
如果要在字符串中显示{},要加两个{}
a='Apple'
b='Banana'
resp=f'我叫{{{a}}}, 你叫{{b}}'
print(resp) #我叫{Apple}, 你叫{b}
六、字符串方法
find()
寻找某个字符在字符串中的位置,如果找不到返回-1
str1='abcdefg'
print(str1.find('a')) #0
print(str1.find('p')) #-1
index()
寻找某个字符在字符串中的位置,如果找不到报错
str1='abcdefg'
print(str1.index('a')) #0
print(str1.index('p')) #ValueError: substring not found
strip()
去掉字符串前后的空格或者其他字符
str1=' ab cd efg '
print(str1.strip()) #ab cd efg
str1='********ab cd efg*********'
print(str1.strip('*')) #ab cd efg
去掉左边的空格或其他字符:lstrip()
str1='********ab cd efg*********'
print(str1.lstrip('*')) #ab cd efg*********
去掉右边的空格或其他字符:rstrip()
str1='********ab cd efg*********'
print(str1.rstrip('*')) #********ab cd efg
replace()
替换字符串中所有待替换的字符 replace(待替换的字符,替换后的字符)
str1=' ab cd efg '
print(str1.replace(' ','')) #abcdefg
startswith()
判断字符串是否以某些元素开头
str1='abcdefg'
print(str1.startswith('abc')) #True
print(str1.startswith('b')) #False
endswith()
判断字符串是否以某些元素结尾
str1='abcdefg'
print(str1.endswith('a')) #False
print(str1.endswith('fg')) #True
split()
切割字符串
以字符串中含有的字符最为切割符,作为切割符的字符消失,返回列表
str1='abcdefg'
print(str1.split('d')) #['abc', 'efg']
以字符串中不含有的字符最为切割符,源字符串变为列表返回
str1='abcdefg'
print(str1.split('p')) #['abcdefg']
join()
拼接符.join(字符串) 用拼接符将字符串连接起来
str1='abcedfg'
print('-'.join(str1)) #a-b-c-e-d-f-g
七、补充:变量命名
1. 可以包含字母,下划线,数字,只能以字母或下划线开头,不能以数字开头
2. 不能有空格,可以用下划线分割其中的单词
3. 不能以python关键字和函数名做变量名