day04-字符串

1 字符編碼

python中的編碼采用的是Unicode編碼。
什么是編碼?
就是數(shù)字和字符的一一對應的,其中字符對應數(shù)字就是字符的編碼尼酿。
編碼方式
ASCII碼表:針對數(shù)字字符、字母字符植影、一些英文中常用的符號進行編碼
大寫字母編碼小于小寫字母編碼裳擎;大寫字母編碼和小寫字母編碼之間不是連續(xù)的
采用一個字節(jié)對字符進行編碼(128個字符)
Unicode碼:Unicode碼包含了ASCII碼表,同時能夠?qū)κ澜缟纤姓Z言對應的符號進行編碼
采用兩個字節(jié)對字符進行編碼思币,能編碼65536個字符鹿响。
兩個函數(shù)
chr(編碼值)-將字符編碼轉(zhuǎn)換成字符
中文編碼范圍:4E00-9FA5(十六進制)
ord(字符)-獲取字符對應的編碼值羡微。
可以將字符編碼放到字符串中表示一個字符:\u+4位的16進制編碼值。

print('abc\u4f59123')

2獲取字符串中的字符

一旦一個字符串確定惶我,那么字符串中每個字符的位置就確定妈倔。
而且每個字符會對應一個用來表示其位置和順序的下標值。

2.1 下標(索引)

字符串中的每個字符都有一個下標绸贡,代表其在字符串中的位置盯蝴;
下標的范圍是:0~字符串長度減一 (0代表第一個字符的位置);
-1~負的字符串長度(-1代表最后一個字符的位置)听怕。

2.2 獲取單個字符

語法:字符串[下標] -獲取字符串中指定下標對應的字符捧挺;
說明:字符串 - 可以是字符串常量,也可以是字符串變量(只要結(jié)果是字符串就行)
[]-固定寫法
下標-字符的下標尿瞭,不能越界闽烙。

'abc'[1]
str1 = 'abc'
str1[1]

2.3 獲取部分字符

2.3.1 法一

語法:字符串[開始下標:結(jié)束下標:步長]
開始下標、結(jié)束下標-寫字符下標值
[ : : ]固定寫法
步長-整數(shù)
功能:從開始下標獲取到結(jié)束下標前為止声搁,每次下標值增加步長黑竞。
注意
當步長是正數(shù)(從前往后取)疏旨,開始下標對應的字符要在結(jié)束下標對應的字符前面
當步長是負數(shù)(從后往前忍堋),開始下標對應的字符要在結(jié)束下標對應的字符后面
結(jié)束下標對應的值取不到的充石。

2.3.2 法二:

語法:字符串[開始下標:結(jié)束下標](相當于步長是1)
''空串
' '空格

str1 = 'qwerqerut'
print(str1[0:9:3], str1[-1:5:-1])

2.4獲取部分字符 ,省略下標

獲取部分字符的時候霞玄,開始下標和結(jié)束下標都可以省略

2.4.1開始下標省略

字符串[:結(jié)束下標:步長]或者字符串[:結(jié)束下標]
步長為正骤铃,從字符串開頭往后獲取坷剧;步長為負惰爬,從字符串結(jié)尾往前獲取

2.4.2結(jié)束下標省略

字符串[開始下標::步長]或者字符串[開始下標:]
步長為正,從開始下標從前往后獲取到字符串結(jié)束惫企;步長為負撕瞧,從開始下標從后往前獲取到字符串開頭

2.4.3開始下標,結(jié)束下標都省略

字符串[: :步長]或者字符串[:]
步長為正狞尔,從開頭獲取到字符串結(jié)尾丛版;步長為負,從字符串結(jié)尾獲取到開頭
獲取字符串中的多個字符偏序,開始下標和結(jié)束下標都可以越界页畦,但獲取單個字符下標不能越界。

print(str1[-100:100])

3 字符串相關(guān)運算

3.1 加(+)

字符串1+字符串2:將兩個字符串拼接在一起產(chǎn)生一個新的字符串
注意:字符串相加研儒,加號兩邊必須都是字符串豫缨。

3.2 乘(*)

字符串*n(正整數(shù)):字符串的內(nèi)容重復n次独令,產(chǎn)生一個新的字符串。

print(('#' * 5 + '$' * 7) * 5)

3.3 比較運算符:>,<,==,!=,>=,<=

3.3.1 ==好芭,燃箭!=

字符串1 == 字符串2 -判斷兩個字符串是否相等.

3.3.2 >,<

字符串比較大小,是用編碼值進行比較舍败;用第一對不同的字符進行編碼值大小比較招狸。

char = "二"
print(chr(0x4E00) <= char <= chr(0x9FA5))
print('\u4E00' <= char <= '\u9FA5')
print(0x4E00 <= ord(char) <= 0x9FA5)

3.4.in和not in

字符串1 in 字符串2:判斷字符串2中是否包含字符串1,結(jié)果是布爾值瓤湘。
字符串1 not in 字符串2:判斷字符串2中是否不包含字符串1瓢颅,結(jié)果是布爾值。

3.5 len函數(shù)

len(序列)
len(字符串)-獲取字符串中字符的個數(shù)弛说。

3.6 str

str(數(shù)據(jù)):將數(shù)據(jù)轉(zhuǎn)換成字符串

3.6.1:其他數(shù)據(jù)轉(zhuǎn)換成字符串:

所有的類型的數(shù)據(jù)都可以轉(zhuǎn)換成字符串.轉(zhuǎn)換的時候就是在數(shù)據(jù)的值的最外面直接加引號挽懦。
補充:系統(tǒng)數(shù)據(jù)類型名不能用來給變量命名。

3.6.2字符串轉(zhuǎn)其他類型

字符串轉(zhuǎn)整數(shù):int(字符串),只有去掉引號后剩下的部分本身就是一個整數(shù)的字符串才能轉(zhuǎn)換成整型
字符串轉(zhuǎn)浮點型:float(字符串)木人,只有去掉引號后剩下的部分本身就是一個整數(shù)或者小數(shù)的字符串才
能轉(zhuǎn)換成浮點型(去掉后為帶e的科學計數(shù)法也可以轉(zhuǎn))
字符串轉(zhuǎn)布爾:bool(字符串)信柿,只有空串''會轉(zhuǎn)換成False,其他所有的字符串都會轉(zhuǎn)換成True.

print(bool(''), bool(""), bool('False'))  # False False True醒第。

4 格式字符串

4.1 格式字符串

指的是字符串中通過格式占位符來表示字符串中變化渔嚷,然后后面再通過其他的值來給占位符賦值
語法:
含有格式占位符的字符串%(占位符對應的值)
格式占位符--有固定的寫法;可以有多個稠曼。
% --固定寫法
() - 里面的值的個數(shù)和值的類型和前面的格式占位符一一對應形病。

4.2 常見格式占位符

%d -- 整數(shù)
%s -- 字符串
%.nf -- 浮點數(shù)(保留小數(shù)點后n位小數(shù))
%c -- 字符(可以將數(shù)字轉(zhuǎn)換成字符)

name = input('名字:')
message = '%s,今年%d歲,體重:%.2fkg 血型是:%c'%(name,20,55,97)
print(message)

5 字符串常用方法

涉及到對字符串功能進行修改都是產(chǎn)生的一個新的字符串霞幅,原字符串沒有發(fā)生改變漠吻。

5.1 字符串首字母大寫

字符串.capitalize()-將字符串首字母轉(zhuǎn)換成大寫.

str1 = 'hello'
new_str = str1.capitalize()
print(new_str)   # Hello

5.2 字符串對齊

1.字符串.center(width,fillchar) - 居中
2.字符串.ljust(width,fillchar) - 左對齊
3.字符串.rjust(width,fillchar) - 右對齊
width - 正整數(shù),表示新的字符串的寬度
fillchar - 字符司恳,填充的字符途乃,默認為空格
4.字符串.zfill(width) -右對齊,前面填0

str1 = '123'
new_str1 = str1.center(7, '*')   # **123**
new_str2 = str1.ljust(7, '*')    # 123****
new_str3 = str1.rjust(7, '*')    # ****123
new_str4 = str1.zfill(7)         # 0000123
print(new_str1, new_str2, new_str3, new_str4)

產(chǎn)生隨機數(shù)

import random  # 導入隨機數(shù)對應的模塊
num = random.randint(0, 99)  # 產(chǎn)生一個0~99的隨機整數(shù)
new_num='python1808'+str(num).rjust(3,'0')
print(new_num)

5.3 統(tǒng)計字符串2在字符串1中出現(xiàn)的次數(shù)

字符串1.count(字符串2)

str1 = 'asdeadfaadre'
str2 = 'a'
print(str1.count(str2))  # 4

5.4 檢查是否以指定字符結(jié)尾和開頭

1.檢查是否以指定字符結(jié)尾
字符串1.endswith(字符串2扔傅,beg=0,end=len(字符串1)) beg代表開始檢查的位置耍共,end代表結(jié)束檢查的位置
2.檢查是否以指定字符開始
字符串1.startswith(字符串2,beg=0猎塞,end=len(字符串1))

str1 = 'asdeadfaadre'
str2 = 'f'
print(str1.endswith(str2, 2, 7),str1.endswith(str2))  # True False
print(str1.startswith(str2,0,len(str1)))  # False

5.5把tab換為空格

把字符串1 中的 tab 符號轉(zhuǎn)為空格试读,tab 符號默認的空格數(shù)根據(jù)設置而定 。
字符串1.expandtabs(tabsize=8)

s='qwe\tqwr'
print(s,len(s.expandtabs(tabsize=2)))  #qwe qwr 7

5.6檢查字符串2是否包含在字符串1中的指定范圍內(nèi)

1.字符串1.find(字符串2荠耽,beg=0,end=len(字符串1)) #從左邊開始查找鹏往,如果包含返回開始的索引值(下標),否則返回-1
2.字符串1.index(字符串2,beg=0,end=len(string)) #跟find一樣伊履,不過如果沒有韩容,會報錯
3.字符串1.rfind(字符串2,beg=0,end=len(字符串1))#跟find一樣唐瀑,不過是從右邊開始查找
4.字符串1.rindex(字符串2群凶,beg=0,end=len(string)) #跟index一樣,不過是從右邊開始查找

str1 = 'asdreadfaadre'
str2='ad'
print(str1.find(str2,0,len(str1))) #5
print(str1.rfind(str2,0,len(str1)))  # 9
print(str1.rindex('dr',0,len(str1))) # 10
print(str1.index('z',0,len(str1))) # ValueError: substring not found

5.7 判斷字符串的組成成分

1.判斷字符串是否由字母或數(shù)字組成
字符串1.isalnum()
2.判斷字符串的字符是否由純字母組成
字符串1.isalpha()
3.判斷字符串是否由純數(shù)字組成
字符串1.isdigit()

str1 = 'asdeadfaadre'
str2='1234'
str3='12ab'
str4='abc#123'
print(str1.isalnum(),str2.isalnum(),str3.isalnum(),str4.isalnum())  # True True True False
str1 = 'asADdre';str2='as123'
print(str1.isalpha(),str2.isalpha())   # True False
str1='123a123';str2='123'
print(str1.isdigit(),str2.isdigit())  #False  True

5.8 判斷字符串中字母的大小寫

1.判斷字符串中出現(xiàn)的字母是否全由小寫字母構(gòu)成
字符串1.islower()
2.判斷字符串中出現(xiàn)的字母是否全由大寫字母構(gòu)成
字符串1.isupper()

str1 = 'as壹23';str2='As123'
print(str1.islower(),str2.islower())   # True  False
str1='A12以';str2='A12cd'
print(str1.isupper(),str2.isupper())  # True False

5.9 判斷字符串是否由純數(shù)字構(gòu)成(中文數(shù)字也可以)

字符串1.isnumeric()

str1='123abc';str2='123壹一1'
print(str1.isnumeric(),str2.isnumeric())  # False True

5.10 判斷字符串是否由純空白字符組成

字符串1.isspace()

str1 = '     ';str2=''
print(str1.isspace(),str2.isspace())  # True False

5.11 字符串標題化操作

1.判斷字符串是否是標題化的
字符串1.istitle()
2.返回標題化的字符串(所有單詞都以大寫開始哄辣,其他為小寫)
字符串1.title()

str1='Abc bcd ';str2='A12'
str3='AbD bcd';str4='ab12'
print(str1.istitle(),str2.istitle())  # False True
print(str3.title(),str4.title())      # Abd Bcd Ab12

5.12 將字符串2的每個字符分開并在之間插入指定的字符串1

字符串1.join(字符串2)

str1='123';str2='a#*&'
print(str1.join(str2))   # a123#123*123&

5.13 字符串中字母的大小寫轉(zhuǎn)換

1.轉(zhuǎn)換字符串中所有大寫字符為小寫请梢。
字符串1.lower()
2.將字符串中大寫轉(zhuǎn)換為小寫,小寫轉(zhuǎn)換為大寫力穗。
字符串1.swapcase()
3.將字符串中的小寫字母轉(zhuǎn)換為大寫毅弧。
字符串1.upper()

str1='ABCdef';str2='ABC12壹'
print(str1.lower(),str2.lower())   # abcdef abc12壹
print(str1.swapcase(),str2.swapcase()) # abcDEF abc12壹
print(str1.upper(),str2.upper())   # ABCDEF ABC12壹

5.14 截掉字符串的首位或者末位

截掉字符串首位的空格或指定字符
字符串1.lstrip()
刪掉字符串末尾的空格或指定字符
字符串1.rstrip()
刪掉字符串首位和末尾的空格或字符
字符串1.strip()

str1='cdabedsc';str2=' aafqweqa '
print(str1.lstrip('c'),str2.lstrip())  #dabedsc aafqweqa
print(str1.rstrip('c'),str2.rstrip())  #cdabeds  aafqweqa
print(str1.strip('c'),str2.strip())    #dabeds aafqweqa

5.15 尋找字符串中的最大最小編碼字符

返回字符串中最大的字母(ascii碼最大的編碼)
max(字符串1)
返回字符串中最小的字母(ascii碼最小的編碼)
min(字符串1)

str1='ABaQbZ';str2='abcAB6c'
print(max(str1),min(str1),min(str2))    # a A 6

5.16 字符串替換

把字符串中的指定部分替換成另一部分,替換次數(shù)可設定
字符串1.replace(字符串2当窗,字符串3够坐,num)

str1='acdabwafada'
print(str1.replace('a', "1", 3))  #1cd1bw1fada

5.17 以指定字符串為分隔符截取字符串,截取個數(shù)可指定

字符串1.split(字符串2崖面,num=字符串1.count(字符串2))

str1='abcdabwasabweab'
print(str1.split('ab',str1.count('ab')),str1.split('ab',2))  #['', 'cd', 'was', 'we', ''] ['', 'cd', 'wasabweab']

5.18 按照行(\n,\r,\n\r)分隔元咙,產(chǎn)生一個新的字符串

按照行(\n,\r,\n\r)分隔,產(chǎn)生一個新的字符串巫员;如果參數(shù)為True庶香,保留換行符;為False简识,不包含換行符赶掖。
字符串1.splitlines(參數(shù))

str1='\n123\rabc\r\nqwe'
print(str1.splitlines(True))   # ['\n', '123\r', 'abc\r\n', 'qwe']
print(str1.splitlines(False))  # ['', '123', 'abc', 'qwe']

5.19 檢查字符串中是否只包含十進制的字符

檢查字符串中是否只包含十進制的字符
字符串1.isdecimal()

str1='12ab12';str2='123987';str3='123Ⅰ23'
print(str1.isdecimal(),str2.isdecimal(),str3.isdecimal())  # False True False
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市七扰,隨后出現(xiàn)的幾起案子倘零,更是在濱河造成了極大的恐慌,老刑警劉巖戳寸,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拷泽,居然都是意外死亡疫鹊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門司致,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拆吆,“玉大人,你說我怎么就攤上這事脂矫≡嬉” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵庭再,是天一觀的道長捞奕。 經(jīng)常有香客問我牺堰,道長,這世上最難降的妖魔是什么颅围? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任伟葫,我火速辦了婚禮,結(jié)果婚禮上院促,老公的妹妹穿的比我還像新娘筏养。我一直安慰自己,他們只是感情好常拓,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布渐溶。 她就那樣靜靜地躺著,像睡著了一般弄抬。 火紅的嫁衣襯著肌膚如雪茎辐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天眉睹,我揣著相機與錄音荔茬,去河邊找鬼。 笑死竹海,一個胖子當著我的面吹牛慕蔚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斋配,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼孔飒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艰争?” 一聲冷哼從身側(cè)響起坏瞄,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甩卓,沒想到半個月后鸠匀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡逾柿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年缀棍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片机错。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡爬范,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弱匪,到底是詐尸還是另有隱情青瀑,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站斥难,受9級特大地震影響枝嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蘸炸,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一躬络、第九天 我趴在偏房一處隱蔽的房頂上張望蕊蝗。 院中可真熱鬧克婶,春花似錦、人聲如沸阱表。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铃岔,卻和暖如春汪疮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毁习。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工智嚷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纺且。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓盏道,卻偏偏與公主長得像,于是被迫代替她去往敵國和親载碌。 傳聞我的和親對象是個殘疾皇子猜嘱,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容