python——字符串

248 阅读6分钟

字符串

不可变类型

字符串的创建

字符串是 Python 中最常用的数据类型。我们可以使用引号 ( '" ) 来创建字符串。创建字符串很简单,只要为变量分配一个值即可

    name = "tom"
    name1 = 'tom'
    name2 = """tom"""
 
 

字符串的输入输出

输入

name = input() # input()无论输入的什么类型,返回的都是字符串
age = input("请输入你的年龄:")  # 12
print(type(age))    # 结果为:str类型

格式化输出

name = "TOM"
age = 18
heigth = 180.5

print("我的名字是%s"%name)
print("我今年%d岁了"%age)
print("我的身高是%.2f"%heigth)
print("大家好,我叫{},我今年{}岁,我的升高是{}".format(name,age,heigth))
print(f"大家好,我叫{name},我今年{age}岁,我的身高是{heigth}")

字符串索引

“索引” ⼜叫**“下标”**,就是编号。⽐如⽕⻋座位号,座位号的作⽤:按照编号快速找到对应的座位。

字符串中一个元素一个索引,元素包括:字母,数字,符号,空格

索引顺序:   0     1     2     3      4      ...     n
            -n-1 -n   -n+1   -n+2   -n+3    ...     -1
例:var="hello world"
print(var[1])
print(var[5])
print(var[-1])

#输出结果
>>>e
>>>        # 空格
>>>d

切片

**切⽚是指对操作的对象截取其中⼀部分的操作。字符串、列表、元组都⽀持切⽚操作

不包含结束位置下标对应的数据, 正负整数均可; 步⻓是选取间隔,正负整数均可,默认步⻓为1

切片:var1[ 数字1:数字2 :步长]  数字2对应的元素不会取
name = "hello python"

print(name[2:5])    # 从2开始,到5结束(不会拿到5本身)
print(name[2:5:1])  # 从2开始,到5结束,步长为1(不会拿到5本身)
print(name[:5])     # 从0开始,下表为5结束(不会拿到本身)
print(name[1:])     # 从1开始,一直到结束
print(name[:])      # 拿取所有
print(name[::2])    # 从0开始,步长为2,拿取所有
print(name[:-1])    # 从0开始,到最后一个数结束(-1代表最后一个数,不包含-1本身)
print(name[-4:-1])  # 从倒数第四个开始,到倒数第一个结束(不包含-1本身)
print(name[::-1])   # 从-1开始,倒着打印字符串,步长为1
print(name[::-2])   # 从-1开始,倒着打印字符串,步长为2
print(var2[:-4:-1]) # 从-1开始到-4结束(不拿到本身))倒着打印字符串

常用字符串操作方法

查找;所谓字符串查找⽅法即是查找元素在字符串中的位置或出现的次数。

①find(): 检测某个元素是否包含在这个字符串中,如果在,返回这个字符串开始的位置下标,否则则返回-1

#字符串序列.find(⼦串, 开始位置下标, 结束位置下标)

#开始和结束位置下标可以省略,表示在整个字符串序列中查找

var2 = "hello and python and hello world"
print(var2.find("and"))  # 返回首先找到的“and"的首字母的索引值
print(var2.find("and", 8, 20))  # 查找到下标(索引值)为8-20,and首字母下标
print(var2.find("gze"))  # 若没有返回-1

index() :检测某个元素是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则报异常。

#用法与find()相同,只是在没查找到元素时,会报错    
# 字符串序列.index(⼦串, 开始位置下标, 结束位置下标)

# print(var2.index("szhga")) # 报错
print(var2.index("and"))  # 返回首先找到的“and"的首字母的索引值
print(var2.index("and", 8, 20))  # 查找到下标(索引值)为8-20,and首字母下标

count() :返回某个元素在字符串中出现的次数

# 字符串序列.count(⼦串, 开始位置下标, 结束位置下标) 

var = "hello and python and hello world"

print(var.count("and"))         # 查看在字符串var中,and出现了多少次
print(var.count("ands"))        # 如果没有,则返回0次
print(var.count("and",8,20))    # 在一个区间内查找and出现的次数

修改

对字符串当中的内容进行修改

①replace():替换内容

#注意:替换次数如果超出⼦串出现次数,则替换次数为该⼦串出现次数
# 字符串序列.replace(旧⼦串, 新⼦串, 替换次数) 

var = "hello and python and hello world"

print(var.replace("and","和"))       # 将里面所有的and替换为和
print(var.replace("and","和",1))     # 将and替换为和,只替换一次

②split():切割字符串

# 字符串序列.split(分割字符, num)
#注意:**num表示的是分割字符出现的次数**


print(var.split(" "))  # split()返回的是列表类型
>>结果:['hello', 'and', 'python', 'and', 'hello', 'world']
print(var.split("and"))
>>结果:['hello ', ' python ', ' hello world']
print(var.split("and", 1))
>>结果:['hello ', ' python and hello world']

③- .join() :⽤⼀个字符或⼦串合并字符串,即是将多个字符串合并为⼀个新的字符串

list1 = ["hello", "python", "i", "love", "you"]
t1 = ("hello", "python", "i", "love", "you")
set1 = {"hello", "python", "i", "love", "you"}

print("__".join(list1))     # 将列表转化为字符串,并且使用指定符号隔开
print(",".join(t1))         # 将元组转化为字符串,并且使用指定符号隔开
print("|".join(set1))       # 将集合转化为字符串,并且使用指定符号隔开

大小写转换

#capitalize() :将字符串第⼀个字符转换成⼤写

var = "hello and python and hello world"

print(var.capitalize())	# 将字符串第⼀个字符转换成⼤写。 

#title()将字符串中的每个单词首字母变为大写

print(var.title())

#upper()将字符串全部转换为大写

print(var.upper())

#lower()将字符串全部转换为小写

print(var.lower())


# strip() 将字符串左右两侧空格删除

var1 = "   hello python   "
print(var1.strip())

判断

var = "hello python"

# startswith()判断字符串是否以指定元素开头

print(var.startswith("hello"))
print(var.startswith("and"))
print(var.startswith("and", 5, 10))

# endswith()检查字符串是否以指定元素结尾

print(var.endswith("python"))
print(var.endswith("and"))
print(var.endswith("th", 5, -2))

# isalpha()判断字符串是否全为字母

var2 = "hello"
print(var2.isalpha())

# isdigit():判断字符串是否都为数字

var4 = "123455"
print(var4.isdigit())

# isalnum()判断字符串是否只为字母和数字组成

var5 = "13235surges"
print(var5.isalnum())

# isspace() 判断字符串是否全为空格

var6 = "   "
print(var6.isspace())

字符串运算

+ : 字符串中的加号,为合并、拼接的效果

a = '10'
b = '20'
print(a + b)   # >>结果:1020

# in :在字符串里面
var6 = "hello"
print("h" in var6)

# not in :不在字符串里面
print("a" not in var6)

# r:取消转义符
print(r"hello \n python")

练习

练习一: 输入一个字符var1 = "hello python I love you", 将每个单词单独提取出来,并将首字母转化为大写(不能用title()方法

var1 = "hello python I love you"
list1 = var1.split(" ")
for data in list1:
    print(data.capitalize(),end=" ")
    

练习二: 将字符串var2 = "1a2b3c4d5e6f"中的数字提取,并且累加

#方法一
var2 = "1a2b3c4d5e6f"
result = 0
for data in var2:
    if data.isdigit():
        result+=int(data)

print(result)

#方法二
var2 = "1a2b3c4d5e6f"
result = 0
for data in var2:
    if data in "1234567890":
        result+=data

print(result)