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