1、什么是字符串
- 是python内置的一种基本数据类型,是一个不可变量。
- 字符串的驻留机制:仅保存一份相同且不可变类型字符串的方法。
- 不同的值被存放在字符串的驻留池中,python对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新的空间,而是把改字符串的地址赋给新创建的变量。
2、字符串的定义方式及驻留机制
(1)定义方式
代码:
a = 'python'
b = "python"
c = '''python'''
print(a,id(a))
print(b,id(b))
print(c,id(c))
运行结果:
(2)驻留机制的几种情况(交互模式时)
- 字符串的长度为0或1
- 符合标识符的字符串
- 字符串只在编译时驻留,而并非运行时
- [-5,256]之间的整数数字
因为pycharm对字符串进行了优化处理
3、字符串的6大特性
索引 切片 重复 连接 成员操作符 for循环遍历(迭代)
(1).索引
s = 'hello'
# 元素的下标一般从0开始
print(s[0])
print(s[1])
运行结果:
(2).切片:将产生新的字符串
s = 'hello'
# 切片的规则:
# s[start:end:step] 从start开始到end-1结束,步长:step
print(s[0:3])
print(s[1:2])
print(s[0:4:2])
# 显示所有字符
print(s[:])
# 显示前3个字符(0 1 2)
print(s[:3])
# 从第0个开始到最后一个的前一个结束
print(s[:-1])
# 对字符串倒序输出
print(s[::-1])
# 显示除了第一个字符以外的其他全部字符
print(s[1:])
运行结果:
(3).重复
s = 'hello'
# 将字符串s连续打印5次
print(s * 5)
运行结果:
(4).连接
s = 'hello'
print(s + ' word!')
运行结果:
(5).成员操作符
s = 'hello'
# 判断h是否在字符串s中
print('h' in s)
运行结果:
(6).for循环遍历 (迭代)
for i in s:
print(i)
运行结果:
示例1:回文数的判断
例如:121就是一个回文数
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因>此它不是一个回文数。
代码:
num = input('Num:')
if num == num[::-1]:
print('这是一个回文数')
else:
print('不是')
运行结果:
5.字符串去除两边空格
(1).去掉空格
>>> s = ' hello '
>>> s
' hello '
# 去除两边的空格
>>> s.strip()
'hello'
#去除右边的空格(right)
>>> s.rstrip()
' hello'
#去除左边的空格(left)
>>> s.lstrip()
'hello '
(2).去掉指定字符
>>> s = 'helloh'
# 去掉两边的h
>>> s.strip('h')
'ello'
# 去掉右边的h
>>> s.rstrip('h')
'hello'
# 去掉左边的h
>>> s.lstrip('h')
'elloh'
4、字符串的查找
5、字符串的大小写转换
- 因为字符串是不可变结构,所以产生新的字符串。
c = 'python'
print(c.upper())
运行结果:
c = 'test'
print(c.capitalize())
运行结果:
c = 'test title'
print(c.title())
运行结果:
6、字符串内容对齐的操作方法
#center 表示居中对齐,默认用空格补齐剩余元素
print('学生管理系统'.center(30))
居中对齐,选用*号补齐剩余元素
print('学生管理系统'.center(30,'*'))
ljust 表示左对齐
print('学生管理系统'.ljust(30,'*'))
# rjust 表示右对齐
print('学生管理系统'.rjust(30,'*'))
7、字符串的分离和连接
(1).分离
代码:若不指定分隔符,默认为空格。
split: 与rsplit的区别就是rsplit是从右边开始分割。
- .split(’|’) :指定分隔符为|
s = '172.25.254.66'
# split:分离; 通过指定的字符进行分离
s1 = s.split('.')
print(s1)
# 倒序输出字符串
print(s1[::-1])
运行结果:
- .split(sep=’|’) :通过sep参数指定分隔符
c = 'test |title'
print(c.split(sep='|'))
运行结果:
- 通过参数.maxsplit指定最大分割次数
c = 'test |title|python'
print(c.split(sep='|',maxsplit=1)) ##只有一次分割机会,所以只分割前面第一部分,即从左边开始
运行结果:
(2).连接与合并
date = '2019-01-15'
# 以-为分隔符进行分离
date1 = date.split('-')
print(date1)
# join:连接; 通过指定的字符进行连接
print(''.join(date1)) ##默认以空格连接
print(':'.join(date1)) # 通过#进行连接
运行结果:
8.字符串判断相关操作
- 判断字符串里每个元素是否为某种类型,一旦有一个元素不满足,就返回False
(1) digit:数字;判断某个字符串是否为数字
print('123'.isdigit())
print('123abc'.isdigit())
运行结果:
(2)title:标题;判断某个字符串是否为标题(第一个字母大写,其余字母小写)
print('Hello'.istitle())
print('HeLLo'.istitle())
运行结果:
(3)upper:大写字母;将字符串转换为大写
print('hello'.upper())
# 判断字符串是否为大写
print('hello'.isupper())
运行结果:
(4) lower:小写字母
print('HELLO'.lower())
print('HELLO'.islower() )
运行结果:
(5) alpha:字母
print('123'.isalpha())
print('abc'.isalpha())
运行结果:
(6)alnum:数字或字母
print('hello123'.isalnum())
运行结果:
(7)isidentifier():判断是不是合法的标识符
(8)isspace():判断字符串是否全部由空白字符组成(回车、换行、水平制表符)
9、字符串开头结尾的匹配和字符串的替换
(1).匹配开头
# 定义字符串
url1 = 'file:///mnt'
url2 = 'ftp://172.25.254.250/pub'
url3 = 'https://172.25.254.250/index.html'
# startswith() 表示以...开头
if url3.startswith('http://'):
print('获取网页')
else:
print('未找到网页')
运行结果:
(2).匹配结尾
# 定义字符串
filename = 'hello.logg'
# endswith() 表示以...结尾
if filename.endswith('.log'):
print(filename)
else:
print('error filename')
运行结果:
(3)字符串的替换
c = 'test |title|python'
print(c.replace('test','kongy'))
运行结果:
10、字符串的比较操作
print('app'>'banana')
print(ord('a'),ord('b')) ##获取a,b的原始值,即ASSCL码值
print(chr(97),chr(98)) ##求其对应的字符
运行结果:
11、字符串的格式化
1:
name = 'kongying'
age = 18
fruit = 'apple'
print(f'my name is {name},i am {age}yeas old,i like {fruit}')
运行结果:
2:
name = 'kongying'
age = 18
fruit = 'apple'
print('my name is %s,i am %d yeas old,i like %s' %(name,age,fruit))
运行结果:
3:‘’.format()
name = 'kongying'
age = 18
fruit = 'apple'
print('my name is {0},i am {1} yeas old,i like {2}'.format(name,age,fruit))
运行结果:
字符串的综合练习
1.判断变量名是否合法
需求:
1.第一个字符是否为字母或者下划线
2.如果是,继续
3.如果不是,报错
4.依次判断除了第一个字符以外的其他字符
5.判度是否为字母、数字或者下划线
分析:
1.判断变量名的第一个元素是否为字母或者下划线 s[0]
2.如果第一个元素符合条件,判断除了第一个元素之外的其他元素s[1:]
代码:
while True:
s = input('变量名: ')
if s == 'exit':
print('退出')
break
if s[0].isalpha() or s[0] == '_':
for i in s[1:]:
if not(i.isalnum() or i == '_'):
print('%s变量名不合法' %s)
break
else:
print('%s变量名合法' %s)
else:
print('%s 变量名不合法' %s)
.根据出勤记录判断是否会被奖赏
需求:
给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个
字符:
'A' : Absent,缺勤
'L' : Late,迟到
'P' : Present,到场
如果一个学生的出勤纪录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),
那么这个学生会被奖赏。
你需要根据这个学生的出勤纪录判断他是否会被奖赏。
示例 1:
输入: "PPALLP"
输出: True
示例 2:
输入: "PPALLL"
输出: False
代码:
s = input(‘请输入考勤记录:)
if s.count('A') <= 1 and s.count('LLL') == 0:
print(True)
else:
print(False)
s = input()
print(s.count('A') <= 1 and s.count('LLL') == 0)
4.句子反转
需求:
hello westos python
python westos hello
代码:
print(' '.join(input().split()[::-1]))
5.从第一字符串中删除第二个字符串中所有的字符
需求:
They are students
aeiou
Thy r stdnts
代码:
s1 = input('s1:')
s2 = input('s2:')
# 遍历字符串s1
for i in s1:
# 依次判断s1中的每个字符是否在s2中
if i in s2:
# replace 表示替换;
# 将s1中与s2中相同的所有字符,替换为空字符
s1 = s1.replace(i,'')
print(s1)