03-字符串
1.字符串的定义
字符串是由字母、数字和特殊字符组成的序列。
2. 创建字符串
——使用单引号、双引号、或者三个单(双)引号
(段落)
name = "好"
number = "18"
paragraph = '''Hello!
Hallo!'''
paragraph_two = """Hello!
Hallo!"""
print(name + number)
为什么Python同时支持三种创建字符串的方法?
- 单引号,双引号
#string = 'I'm Lilei.' 报错
string = "I'm Lilei." #支持单引号
string = "I'm Lilei."
string2 ='"不好"' #支持双引号
print(string1)
print(string2)
避免单双引号混用
- 三个引号
string3 = '111\
\
222\
\
333\
'
print(string3) #结果不能分段
string3 = '''111
222
333
'''
print(string3)
相关信息
- 可以原样输出(保留段落格式)
- 实现多行注释
使用len()
获取字符串长度
string = "0123456789"
print(len(string))
10
Process finished with exit code 0
3. 获取字符
1. 通过索引获取
1. 提取单个字符
string = "123456789"
# 1
select = string[0]
print(select)
# 9
select = string[8]
print(select)
select = string[-1]
print(select)
select = string[len(string)-1]
print(select)
2. 提取多个字符
select = string[0:3] #取到前面一位
print(select)
123
不连续字符串
string = "0123456789"
#13579
select = string[1:10:2]
# [start:end:sep] sep默认为1 start默认为最开始一位(正序为0) end默认为遍历(正序为最后一位+1,倒叙-1)
#02468
select = string[0:9:2]
print(select)
#02468
select = string[::2] # start默认为最开始一位 end遍历可省略
print(select)
注意
sep正负控制方向,大小控制步长
#9876543210
select = string[-1::-1]
print(select)
select = string[::-1] #相同
print(select)
select = string[-1:-11:-1] #倒叙从-1开始
print(select)
# select = string[-1:-11] 后者比前者小,不加-1默认无法显示
string = "I'm Lilei."
select = string[-2:-11:-1]
3.
1. .upper()
将字符串全部大写
2. .lower()
将字符串全部转换为小写
3. .captalize()
将字符串首字母转换为大写,其余转换为小写。(只针对第一个字母)
4. .title()
将字符串中每个单词的首字母转化为大写,其余为小写。
print(select)
up_str = string.upper()
print(string.upper())
print(up_str)
low_up_str = up_str.lower()
print(low_up_str)
cap_str = string.capitalize()
print(cap_str)
title_str = string.title()
print(title_str)
ieliL m'I
I'M LILEI.
I'M LILEI.
i'm lilei.
I'm lilei.
I'M Lilei.
5. .startwith()
检测字符串是不是以特定字符或单词开头,并返回布尔值
string = "I'm Lilei."
start_i_str = string.startswith("i")
print(start_i_str)
start_I_str = string.startswith("I")
print(start_I_str)
start_I_str = string.startswith("I'm")
print(start_I_str)
6. .endwith()
检测字符串是不是以特定字符或单词结尾,并返回布尔值
end_doc_str = string.endswith(".")
print(start_i_str)
7. .count()
计算特定字符串或者单词在目标字符串中存在的次数
count_i_str = string.count("i")
print(count_i_str)
False
True
True
False
2
8. .find()
寻找特定字符或单词在特定 字符串中第一次出现的下标。(后面出现的不再记入)
如果查找的字符不存在,则返回-1
。
find_i_str = string.find("i")
print(find_i_str)
find_1_str = string.find("1")
print(find_1_str)
5
-1
9. .index()
寻找目标字符或单词在特定字符串中,第一次出现的下标。如果是查找单词,那么 index() 返回目标单词的第一个字符的下标。
如果查找的单词不存在则会报错。
find_i_str = string.index("i")
print(find_i_str)
# 5
# index_1_str = string.index("1")
# print(index_1_str)
index_1_str = string.index("1")
ValueError: substring not found
10. .isdigit()
判断字符串是不是纯数字字符串,如果存在非数字(比如下方空格)则报错
string = "12345678" #True
isdigit_ = string.isdigit()
print(isdigit_)
string2 = "123 45678" #False
isdigit_2 = string2.isdigit()
print(isdigit_2)
11. .isalpha()
判断字符串是不是纯字母字符串,如果存在非字母(比如下方空格)则报错
string = "goodjob" #True
isalpha_=string.isalpha()
print(isalpha_)
string2 = "good job" #False
isalpha_2 = string2.isalpha()
print(isalpha_2)
12. .isalpha()
(10)(11)
string = "1niceday" #True
isalnum_=string.isalnum()
print(isalnum_)
string2 = "1nice day" #False
isalnum_2 = string2.isalnum()
print(isalnum_2)
13. .isupper()
判断是否全部为大写
string = "I'm Lilei."
up_str = string.upper()
print(up_str)
up_result = up_str.isupper()
print(up_result) # True 空格等其他内容不作判断
string2 = "你好"
print(string2)
up_str2 = string2.upper()
print(up_str2)
up_result = up_str2.isupper()
print(up_result) # False 不存在字母
14..islower()
判断是否全部为小写
string = I'M LILEI.
low_str = string.lower()
print(low_str)
low_result = low_str.islower()
print(low_result) # True
string2 = "你好"
low_str2 = string2.lower()
print(low_str2)
low_result = low_str2.islower()
print(up_result) # False
string2 = "你好a"
low_str2 = string2.lower()
print(low_str2)
low_result = low_str2.islower()
print(low_result) # True 存在字母,且字母都为小写
15. .isspapce()
判断是否全部为空字符
(空格),纯空格返回True
,否则返回False
string = ""
place_ = string.isspace()
print(place_) #False
string = " "
place_ = string.isspace()
print(place_) #True
string = " " #文本换行,但是实际没有换行
place_ = string.isspace()
print(place_) #True
16. .strip()
默认去掉字符串前后的空白字符
,如果指定参数,则去掉指定字符。
去掉字符的个数不限,但是只能去掉连续的内容
想要去掉所有的内容,可以用[.replace()](#__21. `.replace())实现
string = " 0123456 "
print('string>>>', string, sep="")
strip_ = string.strip()
print('strip>>>', strip_, sep="")
string = " "
strip_ = string.strip()
print(strip_) # 什么都没有了
print("注意上方还有一个知识点")
string = "11101234561111"
print('string>>>', string, sep="") # 所有"1"都去掉,个数不限,但是
strip_ = string.strip("1")
print('strip"1”>>>', strip_, sep="") # 只能去掉连续的内容
string = "111 1234561111"
print('\nstring>>>', string, sep="")
strip_ = string.strip("1")
print('strip>>>', strip_, sep="") # 只能去掉连续的内容
string>>> 0123456
strip>>>0123456
注意上方还有一个知识点
string>>>11101234561111
strip"1”>>>0123456
string>>>111 1234561111
strip>>> 123456
\
⚠️注意
如果想去掉两种及以上内容,写出.strip(“”,“”)是 不对的
strip_ = string.strip("1","2")
TypeError: strip expected at most 1 argument, got 2
直接在strip(“”)写入两种(及以上)内容即可。去掉的内容不计前后顺序
string = "111 1234561111"
strip_ = string.strip("1 ")
print('strip"1 ">>>', strip_, sep="") # 不计前后顺序
strip_2 = string.strip(" 1")
print('strip" 1">>>', strip_2, sep="") # 不计前后顺序
strip_2 = string.strip("11")
print('strip"11">>>', strip_2, sep="") # 不计前后顺序,等价于.strip("1")
strip_2 = string.strip("2 1")
print('strip"2 1">>>', strip_2, sep="")
17. .lstrip()
默认去掉字符串左边(前边)的空白字符
string = " 0123456 "
strip_ = string.lstrip()
print(strip_)
18. .rstrip()
默认去掉字符串右边(后边)的空白字符
string = " 0123456 "
strip_ = string.rstrip()
print(strip_)
19. .split()
split(sep
)进行指定分割
string2= string_.split()
print(string2)
string3 = "1-2-3-4-5-6-7-8-9"
split_str3 = string3.split()
print(split_str3)
split_str3= string3.split("-")
print(split_str3)
string4 = "1---2--3-4-5-6-7-8-9"
split_str4 = string4.split("-")
print(split_str4)
split(sep
,maxsplit
)指定分割次数
20. .rplit()
rplit(sep, maxsplit)
从字符串右边进行分割,也可以传入参数sep
。maxsplit
指定分割次数
split_str4 = string4.split("-",3)
print(split_str4)
split_str4 = string4.rsplit("-",3)
print(split_str4)
不指定maxsplit
二者相同
21. .replace()
.replace(old,new,count)
,count
表示替换多少次,比如其中有4处可替换文本,但是count
数目等于3
,只替换前3
次
如果没有数目默认全部替换
string_ = "Ue b e r s e t z u n g"
print(string_)
string = string_.replace(" ","")
print(string)
4. join
以特定字符串进行间隔
"字符内容
".join(string)
string = "Übersetzung"
join_str = " ".join(string)
print(join_str)
5. 字符串格式化输出
2. 字符串变量“相加”
可以将字符串变量“相加”,即按先后顺序排列到一起
和数字加法不同,因此数字型和字符型不能相加
---
#Hi,welcome to Xiameng
#Hi,welcome to Xiameng
#Hi,welcome to Xiameng
#Hi, welcome to Xiameng
2. 一并输出数字
如果想一并输出数字,可以使用str
将数字(数字型变量)转换为字符串
time = 2024
string = str1 + str2 + str3 + str4 + str(2024)
print(string)
string = str1 + str2 + str3 + str4 + str(time)
print(string)
3. 在文本内部插入其他输入内容
如果想从一段文本中间插入内容,而不是补到末尾,可以使用带“{}”的字符串
+.format("")
将文本填入“{}”中
template_str = "Hi {}, welcome to Xiameng 2024"
print(template_str)
print(template_str.format("Lilei"))
string1 = str1 +"{}, "+ str2 + str3 + str4 + str(2024)
print(string1.format("Lilei"))
如果有多个“{}
”,则用,
分割填入的内容,按从左到右的顺序填充
string2 = "Hi {}, welcome to {}"
print(string2.format("W", "厦门"))
#---output---
#Hi W, welcome to 厦门
指定参数
4. 参数顺序指定(改变填充顺序)
string3 = "Hi {1}, welcome to {0}"
print(string3.format( "厦门","W"))
#---output---
#Hi W, welcome to 厦门
5. 参数名称指定(固定模版在先)
string = "Hi {name},welcome to {region}.".format(name="W", region="Germany")
print(string)
template_str = "Hi {name},welcome to {region}"
print(template_str.format(region="Germany", name="W")) #可以改变顺序
#---output---
#Hi W,welcome to Germany.
#Hi W,welcome to Germany.
5.2.直接读取变量(传入参数在先)
name = "Lilei"
region = "厦门"
string = f"Hi {name}, welcome to {region}"
print(string)
#---output---
#Hi Lilei, welcome to 厦门
6.插入数字型,并保留特定小数位
使用带“{:.type}”的数字型
+.format("")
将文本填入“{}”中
:.type
可以为下方的
string = "Money is {:.3f}".format(190) # .3f 浮点数保留三位小数
print(string)
#---output---
#Money is 190.000
6.2.(传入参数在先)
money = 190
string = f"Money is {money:.3f}"
print(string)
#---output---
#Money is 190.000
以上两次第二种方法均用到了f""
(““内为文本内容)的形式
6. %格式化(固定模版在先)
%d
整数%s
字符串%f
浮点数
1. 单个位置传入
string = "Money is %d" #i
print(string%13) #1
new_s = string % 13 #2
print(new_s)
string = "Money is %d" %13 #i1\ i2\ 3 是等价的
print(string)
#---output---#
#Money is 13
#Money is 13
#Money is 13
2. 多个位置传入
string = "Money is %d, %s"
new_s = string %(1300, "超有钱")
print(new_s)
print(string%(1300,'超有钱'))
string = "Money is %d, %s" %(1300,'超有钱')
print(string)
#---output---#
#Money is 1300, 超有钱
#Money is 1300, 超有钱
#Money is 1300, 超有钱
3.保留小数位
string = "Money is %.2f"
new_s = string % 18
print(new_s)
string = "Money is %.2f"
print(string%18)
string = "Money is %.2f" %18
print(string)
#---output---
# Money is 18.00
# Money is 18.00
# Money is 180.00
7. 字符串不可变性
字符串是不可变的,除重新赋值外,不可以改变字符串中的任何元素。
s = "hello"
print(s)
print(s[0]) #output:h
# s[0] = "a"
# Traceback (most recent call last):
# s[0] = "a"
# TypeError: 'str' object does not support item assignment
如果需要改变字符串中的元素,则需要新建一个字符串。
或者使用replace
替代掉之前的一些字符。
此外还可以使用**字符串拼接**
字符串拼接
s = "hello"
news = "a"+s[1:] #s[1:]为第1位到最后
print(news)
#---output---
#aello
8. 字符串转义
转义字符 | 含义 | 举例 |
---|---|---|
\\ | 在字符串中得到\ | s = "a\\b\\c" |
\b | 退格,删除\b 前一位的内容,类似删除键 | s = "a\\\b\\c" s = "a\b\\c" |
\t | 在字符串中得到制表符 | s = "a\tb\\c" |
\n | 换行 | s = "a\nb\\c" |
r 或R | 取消转义 | s = r"a\\\b\\c" s = r"a\b\c" |
output
a\b\c a\c \c a b\c a b\c
a\\\b\c a\b\c
9. 字符串的连接(含字符串“乘法”)
s1 ="Happy"
s2 = "Birthday"
print(s1+s2) #形成了一个新的字符串
print(s1,s2) #两个独立的字符串(且输出默认有空格间隔)
# “乘法”
s1 ="-Happy"
print(s1*10)
print(s1*10,end="-\n")
HappyBirthday
Happy Birthday
-Happy-Happy-Happy-Happy-Happy-Happy-Happy-Happy-Happy-Happy
-Happy-Happy-Happy-Happy-Happy-Happy-Happy-Happy-Happy-Happy-
10.读取用户输入input()
1. 使用input
user_input = input()
print(user_input)
#---terminal---
# 123
# output
# 123
2. 在input
里面输入打印提示
user_input = input("Enter your name>>>")
print(user_input)
Enter your name>>>W
W
注:input
里面得到的都是字符串
(.venv) ➜ pythonProject ✗ ipython
In [1]: type(input(':>>>'))
:>>>good job
Out[1]: str
In [2]: type(input(':>>>'))
:>>>123
Out[2]: str
In [3]: type(input(':>>>'))
:>>>123.1
Out[3]: str
In [4]: type(input(':>>>'))
:>>>(1,2,3,4)
Out[4]: str
In [5]: type(input(':>>>'))
:>>>[1,2,3,4]
Out[5]: str
In [6]: type(input(':>>>'))
:>>>{1,2,3,4}
Out[6]: str
In [7]: type(input(':>>>'))
:>>>['a':19,'b':19]
Out[7]: str
In [8]: type(input(':>>>'))
:>>>True
Out[8]: str
如果想要输入其他类型,需要进行类型转换
3. 类型转换
方法1: 强制类型转换
In [9]: n = int(input(':>>>'))
:>>>12
In [10]: type(n)
Out[10]: int
In [11]: #list存在一些问题
In [1]: l = list(input(">>>"))
>>>123
In [2]: l #该输入内容会被强制转换为列表
Out[2]: ['1', '2', '3']
In [3]: type(l)
Out[3]: list
In [4]: list(input(">>>"))
>>>[1,2,3]
Out[4]: ['\udce3', '[', '1', ',', '2', ',', '3', ']']
#所以按照之前list的格式放入input反而是错误的
- 适合:确定变量类型中的:数字(整数、浮点数)、字符串、布尔型
- 不适合:列表、元组、字典、集合;不确定的变量类型
方法2:使用eval()
In [1]: s = eval(input(':>>>'))
:>>>12
In [2]: s, type(s)
Out[2]: (12, int)
In [3]: s = eval(input(':>>>'))
:>>>12.1
In [4]: s, type(s)
Out[4]: (12.1, float)
In [5]: s = eval(input(':>>>'))
:>>>(1,2,3)
In [6]: s, type(s)
Out[6]: ((1, 2, 3), tuple)
In [7]: s = eval(input(':>>>'))
:>>>[1,2,3]
In [8]: s, type(s)
Out[8]: ([1, 2, 3], list)
In [9]: s = eval(input(':>>>'))
:>>>{1,2,3}
In [10]: s, type(s)
Out[10]: ({1, 2, 3}, set)
In [11]: s = eval(input(':>>>'))
:>>>True
In [12]: s, type(s)
Out[12]: (True, bool)
eval()
不能识别的内容
- 空白的内容
:>>>
Traceback (most recent call last):
print(eval(input(':>>>')))
File "<string>", line 0
SyntaxError: unexpected EOF while parsing
- ❌未加引号的字符串
In [13]: s = eval(input(':>>>'))
:>>>string
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[13], line 1
----> 1 s = eval(input(':>>>'))
File <string>:1
NameError: name 'string' is not defined
string
被识别为了一个变量,由于这个变量没有给出所以报错
print(string)
s = eval(input(':>>>'))
print(s)
# string
# :>>>string
# string
eval()
如何实现数据类型转换
字符串是外部存在引号。eval()
则是把这样的引号去除。
上文的
string
没有这样的引号,如果没有定义,用于给其他变量赋值等也会报错
- 加入引号
:>>>"string"
string
实现运算两个数字间的运算
print(eval(input(':>>>')))
#------
# :>>>1+1
# 2
In [14]: eval(input(':>>>'))
:>>>1+1
Out[14]: 2
In [15]: eval(input(':>>>'))
:>>>2-3
Out[15]: -1
In [16]: eval(input(':>>>'))
:>>>2/3
Out[16]: 0.6666666666666666
In [17]: eval(input(':>>>'))
:>>>2*3
Out[17]: 6
练习
通过一个input,实现两个数字的运算
add = input('two numbers separated by" ">>>').split(" ")
print(eval(add[0]) + eval(add[1]))
print(float(add[0]) + float(add[1]))
sub = eval(input('two numbers separated by" ">>>').replace(" ","+"))
print(sub)