Python基础之字符串
介绍
字符串是Python中最常用的数据类型之一,使用单引号或双引号来创建字符串,使用三引号创建多行字符串。
一、基础语法
1、获取字符串长度函数 len(s)
注意空字符串 s="“是连续两个引号,中间没有任何东西,空串的长度为 0,len(s)=0, 但是 s=” "包含一个空格,s 不是空串,长度为 1。
len("abc") # 3
len("我们 abc") # 6
2、字符与编码的转换
s="Hi,你好"
for i in range(len(s)):
print(s[i],ord(s[i]))
# H 72
# i 105
# ,65292
# 你 20320
# 好 22909
print(chr(97)) # a
print(chr(98)) # b
字符串是不可变数字类型
s="123"
s[1]="4"
print(s)
# TypeError: 'str' object does not support item assignment
3、字符串切片
切片参数: (左闭右开)
• start 起始位置,默认索引从0开始
• stop 结束位置,默认最后一个元素
• step 步长,默认为1
s="abcdefghi"
print(s[0:-2]) # abcdefg
print(s[:-2]) # abcdefg
print(s[-2:]) # hi
print(s[:]) # abcdefghi
print(s[::-2]) # igeca
print(s[7:-1:-1]) # 没有交集
print(s[8:0:-1]) # ihgfedcb
4、字符串组成方式
4.1 "+"号直接拼接
print("a"+"b") # ab
4.2 %s %d %f
%s:格式化字符串
%d:格式化整数
%f:格式化浮点数,可指定小数点后的精度
name="张三"
age=18
print("姓名:%s,年龄:%d"%(name,age))
4.3 str.format()
name = "张三"
age = 18
print("姓名{},年龄{}".format(name,18)) # 姓名张三,年龄18
print("姓名{1},年龄{0}".format(18,name)) # 姓名张三,年龄18
4.4 f""
name="张三"
age=18
print(f"{name}的年龄是{age}") # 张三的年龄是18
5、字符串的常见操作
5.1 s.find()
返回该元素的最小索引
s='hello world'
print(s.find('o')) # 4 当元素有多个时,返回最小索引
print(s.find('c')) # -1 找不到则为-1
5.2 s.index()
返回该元素的最小索引
s='hello world'
print(s.index('o')) # 4
print(s.index('c')) # ValueError: substring not found
实际上,该方法与s.find()实现的功能一样,但是唯一不同的就是当元素不存在时,s.index()方法会报错。所以建议使用s.find()
5.3 s.split(sep=None)
以sep来分割字符串,并返回列表
sep默认为None,分割默认为空格
s="hello world"
print(s.split()) # ['hello', 'world']
s="hello world"
print(s.split('o')) # ['hell', ' w', 'rld']
5.4 s.startswith()
判断字符串是否以前缀开始,返回bool值
s='hello world'
print(s.startswith('he')) # True
5.5 s.endswith()
判断字符串是否以尾缀结束,返回bool值
s='hello world'
print(s.endswith('ld')) # True
5.6 s.strip()
默认去掉字符串左右的空格
s=' hello world '
print(s.strip()) #hello world
s.rstrip():去掉字符串右边的空格
s.lstrip():去掉字符串左边的空格
5.7 s.join()
将序列中的元素以指定的字符连接生成一个新的字符串
li = ["你好","世界"]
s = '~'.join(li)
print(s) # 你好~世界
二、字符串基础案例练习
1、输入一个字符串,统计它包含的大写字母、小写字母、数字的个数
s=input('enter:')
upper=0
lower=0
digit=0
for i in range(len(s)):
if s[i]>='A' and s[i]<='Z':
upper += 1
if s[i]>='a' and s[i]<='z':
lower += 1
if s[i]>='0' and s[i]<='9':
digit += 1
print('upper:',upper)
print('lower:',lower)
print('digit',digit)
# enter:abvH88
# upper: 1
# lower: 3
# digit 2
2、输入一个字符串,将其反向显示
方法一:
def reverseA(s):
t=''
for i in range(len(s)-1,-1,-1):
t=t+s[i]
print('reverseA:',t)
s=input('enter:')
reverseA(s)
# enter:abcde
# reverseA:edcba
方法二:
def reverseB(s):
t=''
for i in range(len(s)):
t=s[i]+t
print('reverseB:',t)
s=input('enter:')
reverseB(s)
# enter:abcde
# reverseB: edcba
3、输入一个字符串,去掉它左右多余的空格
def demo(s):
t=''
i=0
j=len(s)-1
while i<=j and s[i]==' ':
i += 1
while i<=j and s[j]==' ':
j -= 1
for m in range(i,j+1):
t += s[m]
return t
s=input('enter:')
demo(s)
print('length1:',len(s))
print('length2:',len(demo(s)))
# enter: abc
# length1: 6
# length2: 3
4、输入一个字符串,将其中小写字母变大写、大写字母变小写
如果 C 是一个大写英文字母,那么 ord(C)是它的编码,ord(C)-ord(“A”)是它相对"A" 的偏移量,ord(“a”)是"a"的编码,显然 ord(“a”)+ord(C)-ord(“A”) 是 C 对应的 小写字母的编码
def myUpper(s):
t=''
for i in range(len(s)):
if s[i]>='a' and s[i]<='z':
t += chr(ord('A')+ord(s[i])-ord('a'))
else:
t += s[i]
return t
def myLower(s):
t=''
for i in range(len(s)):
if s[i]>='A' and s[i]<='Z':
t += chr(ord('a')+ord(s[i])-ord('A'))
else:
t += s[i]
return t
s=input('enter:')
print('upper:',myUpper(s))
print('lower:',myLower(s))
# enter:myABC
# upper: MYABC
# lower: myabc
5、判断一个字符串是否对称
方法一:
编写一个函数把字符串反向,与原来比较
def demo(s):
t=''
for i in range(len(s)-1,-1,-1):
t += s[i]
return t
s=input('enter:')
if s == demo(s):
print('对称')
else:
print('不对称')
# enter:abcba
# 对称
方法二:
用 i,j 表示左右的下标,逐步比较(s[0],s[len(s)-1]) , (s[1],s[len(s)-2]) ,…
def demo(s):
i=0
j=len(s)-1
while i<j:
if s[i] != s[j]:
return 0
j -= 1
i += 1
return 1
s=input('enter:')
if demo(s)==1:
print('对称')
else:
print('不对称')
# enter:abcba
# 对称