day04-字符串

1 字符編碼

python中的編碼采用的是Unicode編碼。
什么是編碼?
就是數字和字符的一一對應的,其中字符對應數字就是字符的編碼。
編碼方式
ASCII碼表:針對數字字符、字母字符、一些英文中常用的符號進行編碼
大寫字母編碼小于小寫字母編碼;大寫字母編碼和小寫字母編碼之間不是連續的
采用一個字節對字符進行編碼(128個字符)
Unicode碼:Unicode碼包含了ASCII碼表,同時能夠對世界上所有語言對應的符號進行編碼
采用兩個字節對字符進行編碼,能編碼65536個字符。
兩個函數
chr(編碼值)-將字符編碼轉換成字符
中文編碼范圍:4E00-9FA5(十六進制)
ord(字符)-獲取字符對應的編碼值。
可以將字符編碼放到字符串中表示一個字符:\u+4位的16進制編碼值。

print('abc\u4f59123')

2獲取字符串中的字符

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

2.1 下標(索引)

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

2.2 獲取單個字符

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

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

2.3 獲取部分字符

2.3.1 法一

語法:字符串[開始下標:結束下標:步長]
開始下標、結束下標-寫字符下標值
[ : : ]固定寫法
步長-整數
功能:從開始下標獲取到結束下標前為止,每次下標值增加步長。
注意
當步長是正數(從前往后取),開始下標對應的字符要在結束下標對應的字符前面
當步長是負數(從后往前取),開始下標對應的字符要在結束下標對應的字符后面
結束下標對應的值取不到的。

2.3.2 法二:

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

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

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

獲取部分字符的時候,開始下標和結束下標都可以省略

2.4.1開始下標省略

字符串[:結束下標:步長]或者字符串[:結束下標]
步長為正,從字符串開頭往后獲取;步長為負,從字符串結尾往前獲取

2.4.2結束下標省略

字符串[開始下標::步長]或者字符串[開始下標:]
步長為正,從開始下標從前往后獲取到字符串結束;步長為負,從開始下標從后往前獲取到字符串開頭

2.4.3開始下標,結束下標都省略

字符串[: :步長]或者字符串[:]
步長為正,從開頭獲取到字符串結尾;步長為負,從字符串結尾獲取到開頭
獲取字符串中的多個字符,開始下標和結束下標都可以越界,但獲取單個字符下標不能越界。

print(str1[-100:100])

3 字符串相關運算

3.1 加(+)

字符串1+字符串2:將兩個字符串拼接在一起產生一個新的字符串
注意:字符串相加,加號兩邊必須都是字符串。

3.2 乘(*)

字符串*n(正整數):字符串的內容重復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,結果是布爾值。
字符串1 not in 字符串2:判斷字符串2中是否不包含字符串1,結果是布爾值。

3.5 len函數

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

3.6 str

str(數據):將數據轉換成字符串

3.6.1:其他數據轉換成字符串:

所有的類型的數據都可以轉換成字符串.轉換的時候就是在數據的值的最外面直接加引號。
補充:系統數據類型名不能用來給變量命名。

3.6.2字符串轉其他類型

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

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

4 格式字符串

4.1 格式字符串

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

4.2 常見格式占位符

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

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

5 字符串常用方法

涉及到對字符串功能進行修改都是產生的一個新的字符串,原字符串沒有發生改變。

5.1 字符串首字母大寫

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

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 - 正整數,表示新的字符串的寬度
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)

產生隨機數

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

5.3 統計字符串2在字符串1中出現的次數

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

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

5.4 檢查是否以指定字符結尾和開頭

1.檢查是否以指定字符結尾
字符串1.endswith(字符串2,beg=0,end=len(字符串1)) beg代表開始檢查的位置,end代表結束檢查的位置
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 符號轉為空格,tab 符號默認的空格數根據設置而定 。
字符串1.expandtabs(tabsize=8)

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

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

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.判斷字符串是否由字母或數字組成
字符串1.isalnum()
2.判斷字符串的字符是否由純字母組成
字符串1.isalpha()
3.判斷字符串是否由純數字組成
字符串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.判斷字符串中出現的字母是否全由小寫字母構成
字符串1.islower()
2.判斷字符串中出現的字母是否全由大寫字母構成
字符串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 判斷字符串是否由純數字構成(中文數字也可以)

字符串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 字符串中字母的大小寫轉換

1.轉換字符串中所有大寫字符為小寫。
字符串1.lower()
2.將字符串中大寫轉換為小寫,小寫轉換為大寫。
字符串1.swapcase()
3.將字符串中的小寫字母轉換為大寫。
字符串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 字符串替換

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

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

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

字符串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)分隔,產生一個新的字符串

按照行(\n,\r,\n\r)分隔,產生一個新的字符串;如果參數為True,保留換行符;為False,不包含換行符。
字符串1.splitlines(參數)

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容