一咐蝇、字符串中的元素
1.阻止轉(zhuǎn)義
在字符串的最前面可以添加r/R來阻止字符串中的轉(zhuǎn)義字符轉(zhuǎn)義
str1 = r'how are you\n fine'
str2 = R'\t 你好嗎?'
print(str1) # how are you\n fine
print(str2) # \t 你好嗎鸭栖?
2.python中可以把字符串看出是一個(gè)序列(容器)歌馍,容器中內(nèi)容是字符。
每一個(gè)字符可以稱為字符串中的元素
字符串是一個(gè)不可變的序列,它是有序的(不可變指的是字符串中的每個(gè)字符晕鹊,以及每個(gè)字符的位置不可變)
3.獲取字符串中的單個(gè)字符
語法:字符串[下標(biāo)] ----> 根據(jù)下標(biāo)獲取字符串中的字符
說明:
a.字符串:可以是字符串的變量松却,也可以是字符串值
b.[]:固定寫法
c.下標(biāo):0 ~ 字符串長度-1(從前往后);
-1 ~ -長度(從后向前)
注意:下標(biāo)是整數(shù)捏题,并且不能越界
python中的每個(gè)字符串的每個(gè)字符都會(huì)對應(yīng)一個(gè)下標(biāo)玻褪,下標(biāo)是根據(jù)字符在字符串中的位置,
從前往后依次增加的(第一個(gè)值是0)
str3 = 'python'
p->0 y->1 t->2 h->3 …… n->5
n->-1 o->-2 h->-3 …… p->-6
print(str3[0]) # p
print(str3[-6]) # p
print(str3[4]) # o
print(str3[-2]) # o
print('hello'[-1]) # o
index = 2
print(str3[index]) # t
# print(str3[6/2]) # TypeError: string indices must be integers
print(str3[6//2]) # h
練習(xí):獲取'good good study\n day day up!'中第一個(gè)day的d字母
str4 = 'good good study\n day day up!'
print(str4[-11],str4[17])
注意:一個(gè)空格算一個(gè)字符,一個(gè)轉(zhuǎn)義字符算一個(gè)字符(一個(gè)制表符/tab鍵也是一個(gè)字符)
print(len(' ')) # 輸入了tab鍵公荧,結(jié)果為1
4.獲取字符串中的部分字符(切片)
- a.語法:字符串[起始下標(biāo):結(jié)束下標(biāo)] ---> 獲取字符串中從起始下標(biāo)開始带射,到結(jié)束下標(biāo)前的所有的字符
默認(rèn)步長為1
注意:起始下標(biāo)對應(yīng)的字符要在結(jié)束下標(biāo)對應(yīng)的字符的前面,否則取不到值
str5 = '同九年循狰,汝何秀窟社!'
print(str5[1:5]) # 九年,汝
print(str5[-4:-1]) # 汝何秀
- b.語法:字符串[起始下標(biāo):結(jié)束下標(biāo):步長] ---> 從起始下標(biāo)開始獲取绪钥,每步長獲取一個(gè)灿里,獲取到結(jié)束下標(biāo)前為止
步長為正:從前往后取(起始下標(biāo)對應(yīng)的字符要在結(jié)束下標(biāo)對應(yīng)的字符的前面程腹,否則取不到值)
步長為負(fù):從后往前认坏酢(起始下標(biāo)對應(yīng)的字符要在結(jié)束下標(biāo)對應(yīng)的字符的后面,否則取不到值
str6 = '海賊王寸潦、一拳超人色鸳、一人之下、進(jìn)擊的巨人'
print(str6[1:10:2]) # 賊见转、拳人一
print(str6[-1:5:-2]) # 人的進(jìn)下人命雀、超
print(str6[1:0:-1]) # 賊
- c.切片時(shí)下標(biāo)可以省略,省略不同的下標(biāo)有不同的意義
省略起始下標(biāo): 字符串[:結(jié)束下標(biāo)] ----> 從開頭開始日扼铩(注意:這兒開頭可能是第一個(gè)字符吏砂,也可能是最后一個(gè)字符)
str7 = '閣下何不同風(fēng)起,扶搖直上九萬里'
print(str7[:4]) # 閣下何不
print(str7[:4:-1]) # 里萬九上直搖扶乘客,起風(fēng)
省略結(jié)束下標(biāo):字符串[起始下標(biāo):] ---> 從開始下標(biāo)取狐血,取到最后,取完為止
print(str7[-4:]) # 上九萬里
print(str7[-4::-1]) # 上直搖扶易核,起風(fēng)同不何下閣
兩個(gè)下標(biāo)都市僦: 字符[:] ----> 全部取完
print(str7[::-1]) # 產(chǎn)生一個(gè)逆序的字符串,結(jié)果是:里萬九上直搖扶耸成,起風(fēng)同不何下閣
注意:切片的時(shí)候下標(biāo)可以越界
print(str7[0:100]) # 閣下何不同風(fēng)起报亩,扶搖直上九萬里
print(str7[-100:3]) # 閣下何
二、字符串的運(yùn)算符
python中的字符串支持+井氢、*和比較運(yùn)算符
- 1.字符串的+號(hào)運(yùn)算符
字符串1 + 字符串2 ----> 將字符串1和字符串2拼接在一起產(chǎn)生一個(gè)新的字符串
注意:+號(hào)兩邊要么都是數(shù)字弦追,要么都是字符串,不能一樣一個(gè)
str1 = '玉樹臨風(fēng)美少年'
str2 = '攬鏡自顧夜不眠'
print(str1 + str2) # 玉樹臨風(fēng)美少年攬鏡自顧夜不眠
# str1 + 100 # TypeError: must be str, not int
new_str = str1 + ',' + str2 + '!'
print(new_str) # 玉樹臨風(fēng)美少年,攬鏡自顧夜不眠!
- 2.*
字符串1 * n ----> 字符串1重復(fù)n次花竞,產(chǎn)生一個(gè)新的字符串
n必須是整數(shù)
str3 = '家有千金劲件,行止由心! '
print(str3 * 3) # 家有千金,行止由心! 家有千金约急,行止由心! 家有千金零远,行止由心!
print(str3 * -1) # 結(jié)果為空
str4 = str1 + str3*2
print(str4) # 玉樹臨風(fēng)美少年家有千金,行止由心! 家有千金厌蔽,行止由心!
先算乘牵辣,再算加
- 3.比較運(yùn)算符
判斷相等
print('abc' == 'ab') # False
print('abc' != 'ab') # True
字符串比較大小
比較兩個(gè)字符串中從前往后每個(gè)字符的編碼值的大小,比較到兩個(gè)字符不相同為止
print('abcdef' > 'op') # False
print('zabcdef' > 'op') # True
print('zabcdef' > 'zbc') # False
print('zabcdef' > 'zabc')# True
print('你好' < 'abc') # False
可以用來判斷一個(gè)字符是否是數(shù)字字符,判斷一個(gè)字符是否是字母字符
print('-------------')
char = 'a'
print('0' <= char <= '9') # Char是否是數(shù)字字符:False
print('a' <= char <= 'z' or 'A' <= char <= 'Z') # Char是否是字母字符:True
print('\u4e00' <= char <= '\u9fef') # Char是否是中文:False
- 4.in和not in
字符串1 in 字符串2 ---> 判斷字符串1是否在字符串2中(字符串2中是否包含字符串1)奴饮,結(jié)果是布爾值
print('ab' in 'aabc') # True
print('ab' in 'adbc') # False
print('ab' not in 'aabc') # False
print('ab' not in 'adbc') # True
- len()函數(shù)
len()是python內(nèi)置函數(shù)纬向,功能是用來獲取序列的長度(容器中元素的個(gè)數(shù))
len(序列)
字符串的長度就是字符串中字符的個(gè)數(shù)
- len()函數(shù)
print(len('hello')) # 5
print(type(len(str3))) # <class 'int'>
str5 = '床前明月光\n疑是地上霜!'
str6 = r'床前明月光\n疑是地上霜戴卜!'
print(len(str5),len(str6)) # 12 13
str7 = '你好嗎逾条?\u4eff\u5cff'
print(len(str7)) # 6
print(str5[len(str5)-1]) # !
print(str5[-len(str5)]) # 床
三、格式化字符串
格式字符串
字符串的內(nèi)部投剥,通過格式占位符來表示字符串中變化的部分师脂,然后再后面用值來填充變化的部分
- 語法:帶有占位符的字符串 % (給占位符賦值的值)
- 注意:前面有多少個(gè)占位符,后邊()中就必須有多少值江锨,并且值的個(gè)數(shù)和值的類型要和前面的占位符一一對應(yīng)
%s ----> 字符串
%d ----> 整數(shù)
%f ----> 浮點(diǎn)數(shù)
%.nf ----> 保留小數(shù)點(diǎn)后n位小數(shù)(5舍6入)
%c ----> 字符(格式化字符及其ASCII碼)
name = '張三'
age = 18
money = 10.567
# 方法一:
message = '姓名:' + name + ' 年齡:' + str(age) + ' 薪資:' + str(money)
print(message) # 姓名:張三 年齡:18 薪資:10.567
# 方法二:
message = '姓名:%s吃警, 年齡:%d, 薪資:%f' % (name,age,money)
print(message) # 姓名:張三, 年齡:18, 薪資:10.567000
message = '姓名:%s泳桦, 年齡:%d, 薪資:%.2f' % (name,age,money)
print(message) # 姓名:張三汤徽, 年齡:18, 薪資:10.57
print('%d:%c' % (97,97)) # 97:a
四、字符串中的內(nèi)置函數(shù)
python內(nèi)部給我們提供了很多字符串相關(guān)的方法灸撰,使用方式:字符串.方法名(參數(shù))
- 1.字符串.capitalize()
將字符串的第一個(gè)字符轉(zhuǎn)換為大寫谒府,返回一個(gè)新的字符串
如果第一個(gè)字符不是字母,就不轉(zhuǎn)換
str1 = 'love'
print(str1.capitalize()) # Love
print(str1) # love
new_str = str1.capitalize()
print(new_str) # Love
- 2.字符串對齊
a. center(width, fillchar)
b. ljust(width, fillchar)
c. rjust(width, fillchar)
width --> 長度浮毯,新的字符串的總共的長度
fillchar --> 剩下的部分填充的字符完疫,字符就是長度為1的字符串
str2 = 'dog'
print(str2.center(7,'-')) # --dog--
print(str2.ljust(7,'-')) # dog----
print(str2.rjust(7,'-')) # ----dog
練習(xí):根據(jù)進(jìn)班的順序號(hào)產(chǎn)生對應(yīng)的學(xué)號(hào),學(xué)號(hào)要求:
例如:num = 1 ----> python18070001 num = 11 ---->python18070011
num = 102 ----> python18070102
num = 310
num = str(num)
stu_num = 'python1807' + num.rjust(4,'0')
print(stu_num)
- 3.字符串1.count(字符串2) ---> 統(tǒng)計(jì)字符串1中字符串2的個(gè)數(shù)
print('abcdacasdca'.count('ca')) # 2
- 字符串1.endswith(字符串2) ----> 判斷字符串1是否以字符串2結(jié)尾
字符串1.startswith(字符串2) ----> 判斷字符串1是否以字符串2開頭
- 字符串1.endswith(字符串2) ----> 判斷字符串1是否以字符串2結(jié)尾
str1 = 'when i was'
print(str1.endswith('as')) # True
- 5.字符串1.find(字符串2):
在字符串1中查找字符串2债蓝,返回第一個(gè)所查找字符串開始的下標(biāo)壳鹤,如果沒有就返回-1,如果有多個(gè)返回第一個(gè)所查找字符串開始的下標(biāo)饰迹。
str1 = 'when i was young, was i have a dream'
print(str1.find('was')) # 7
print(str1.find('wasaa')) # -1
- 6.isnumeric()
判斷是否只包含數(shù)字芳誓,中文數(shù)字也可以余舶,是返回True,否則返回False
print('1234'.isnumeric()) # True
print('一二三'.isnumeric()) # True
print('壹萬'.isnumeric()) # True
- istitle()
標(biāo)題化:每個(gè)單詞首字母大寫锹淌,其他字母小寫
判斷字符串是否只包含標(biāo)題化字符串匿值,是返回True,否則返回False
- istitle()
- 字符串1.join(字符串2)
將字符串1插入到字符串2中每個(gè)字符之間
- 字符串1.join(字符串2)
print('aaa'.join('xyz')) # xaaayaaaz
print函數(shù)
a. 一個(gè)print函數(shù)赂摆,可以同時(shí)打印多個(gè)內(nèi)容挟憔,打印的時(shí)候默認(rèn)情況下,多個(gè)數(shù)據(jù)之間用空格隔開烟号,但是可以通過sep去設(shè)置多個(gè)內(nèi)容之間隔開的方式
print('abc', 123, True, sep='*') # abc*123*True
b.默認(rèn)情況下绊谭,print在打印完內(nèi)容后,會(huì)自動(dòng)打印一個(gè)換行汪拥,可以通過end去設(shè)置打印結(jié)束后打印的內(nèi)容
print('str',end='\n')
print('aaaaaa',end='**')
print('bbbbbb',)
# aaaaaa**bbbbbb