1. 字符串(str)
- 字符串是python提供的容器型數(shù)據(jù)類型(序列),不可變、有序
- 不可變:不支持增刪改;有序:支持下標操作
- python中的字符串是用單引號或者雙引號引起來的字符集;引號里面的每個基本單元叫字符
2. 字符
1)普通字符
2)轉(zhuǎn)義字符:
- 在特定的符號前加 \ 來表示特殊功能或者特殊意義的字符
- \n :換行(相當于回車鍵)
- \ ' :單引號本身(不是字符串開頭/結(jié)尾標志)
- \ " :雙引號本身(不是字符串開頭/結(jié)尾標志)
- \ \ :反斜杠本身(讓一個反斜杠失去轉(zhuǎn)義的功能)
- \t :制表符(相當于tab鍵)
- 阻止轉(zhuǎn)義:在字符串的最前面加r/R,能夠阻止字符串中所有的轉(zhuǎn)義字符轉(zhuǎn)義
str4 = R'\thow\nare\nyou\"'
print(str4) # \thow\nare\nyou\"
3)編碼字符:
- 在字符串中用 ' \u四位的十六進制數(shù) ' 來表示一個字符
- \u字符編碼值的16進制數(shù)
str5 = '123\u4e11'
print(str5) # 123丑
3.1)字符編碼:
- 計算機本身只有直接存儲數(shù)字的能力(存數(shù)字的二進制的補碼),為了能夠存儲數(shù)字以外的符號,開發(fā)人員給每個字符對應(yīng)一個固定的數(shù)字用來對字符進行存儲。
- 每個字符對應(yīng)的固定的數(shù)字就是字符的編碼值;每個字符和數(shù)字的一一對應(yīng)關(guān)系就是字符編碼表;常見的編碼表有:ASCII編碼表、Unicode編碼表
- ASCII碼表采用一個字節(jié)對字符進行編碼:0-127
- Unicode編碼表采用2個字節(jié)對字符進行編碼,包含了ASCII碼(python用的Unicode編碼表)
- 拓展:中文Unicode編碼范圍 4E00-9FA5:CJK 統(tǒng)一表意符號 (CJK Unified Ideographs)
3.2)chr函數(shù):
- chr(編碼值):獲取編碼值對應(yīng)的字符
3.3)ord函數(shù):
- ord(字符):獲取指定字符對應(yīng)的編碼
# 練習(xí):查看日語的所有片假名
for code in range(0x4dc0, 0x4dff):
print(chr(code))
3. 字符操作:查
1)獲取單個字符
- 語法:字符串[下標] ------ 獲取指定下標對應(yīng)的字符
- 說明:
字符串 ----- 結(jié)果是字符串的表達式(字符串值、字符串變量、運算結(jié)果是字符串)
[ ] ----------- 固定寫法
下標 -------- 又叫索引,值是整數(shù);字符串確定后,字符串中的每一個字符都有一個確定的下標 / 索引表示這個字符在字符串中的位值
?????python中下標有兩種:位置從前往后是 0~字符串長度-1;位置從后往前是 -1 ~ - 字符串長度
- 注意:獲取單個字符的時候下標不能越界
2)獲取部分字符(字符串切片)
- 語法:字符串[開始下標:結(jié)束下標:步長] ---- 從開始下標開始獲取,每次增加步長取下一個值,取到結(jié)束下標前為止(結(jié)束下標對應(yīng)的值取不到)
- 說明:
字符串 ----------- 結(jié)果是字符串的表達式(字符串值、字符串變量、運算結(jié)果是字符串)
[ ] ------------------ 固定寫法
開始下標 -------- 下標,整數(shù);能取到對應(yīng)的字符
結(jié)束下標 -------- 下標,整數(shù);對應(yīng)的字符取不到
步長 -------------- 整數(shù)。如果步長是正數(shù),從前往后取;如果步長是負數(shù),從后往前取
- 注意:
a. 字符串切片的結(jié)果都是字符串;
b. 如果步長是正數(shù),那么開始下標對應(yīng)字符要在結(jié)束下標對應(yīng)字符的前面,才能取到值;如果步長是負數(shù),那么開始下標對應(yīng)字符要在結(jié)束下標對應(yīng)字符的后面,才能取到值
c. 切片的時候下標可以越界
3)獲取部分字符的簡寫
-
省略步長:步長為1的時候可以省略不寫 ----- 字符串[開始下標:結(jié)束下標] 即 字符串[開始下標:結(jié)束下標:1]
-
省略開始下標:步長為正從字符串開頭往后獲取;步長為負從字符串最后往前獲取 ------ 字符串[:結(jié)束下標:步長]、字符串[:結(jié)束下標]
-
省略結(jié)束下標:步長為正,取到字符串最后一個字符為止;步長為負,取到第一個字符為止 ----- 字符串[開始下標::步長]、字符串[開始下標:]
# 字符串倒序
str4 = 'hello world'
print(str4[::-1]) # dlrow olleh
4.遍歷字符串
for 變量 in 字符串:
循環(huán)體
str4 = 'hello world'
for char in str4:
print(char)
str4 = 'hello world'
for index in range(11):
print(str4[index])
for index in range(-1, -11, -1):
print(index, str4[index])
- 練習(xí):統(tǒng)計輸入的字符串中,字母'a'出現(xiàn)的次數(shù)
value = input('請輸入一個字符串:')
count = 0
for char in value:
if char == 'a':
count += 1
print(count)
5.字符串相關(guān)操作
1)字符串的運算
-
數(shù)學(xué)運算:+,*
a. 字符串1+字符串2:兩個字符串相加,將兩個字符串拼接產(chǎn)生一個新的字符串
b. 字符串 * 正整數(shù) / 正整數(shù) * 字符串:字符串重復(fù)指定次數(shù)產(chǎn)生一個新的字符串
-
比較運算:>,<,>=,<=,==,!=
字符串比較大小:按位置從前往后一對一對的比較,找出第一對不相等的字符,看它們的編碼值誰大,那個字符串就大
應(yīng)用:
判斷一個字符是否是小寫字母: 'a'<=char<='z'
判斷一個字符是否是大寫字母: 'A'<=char<='Z'
判斷一個字符是否是字母: 'a'<=char<='z' or 'A'<=char<='Z'
判斷一個字符是否是數(shù)字字符: '0'<=char<='9'
判斷一個字符是否是中文(4e00-9fa5): '\u4e00'<=char<='\u9fa5', '一'<=char<='龥'
# 練習(xí): 統(tǒng)計一個字符串中大寫字母的個數(shù)
# 例如: How Are You! -> 3
str4 = 'How Are You!'
count = 0
for char in str4:
if 'A' <= char <= 'Z':
count += 1
print(count)
2)in 和 not in
- 字符串1 in 字符串2:判斷字符串2中是否包含字符串1
print('abc' in 'a123abc') # True
print('abc' in '123ab1c') # False
print('A' in 'hell A') # True
print('A' not in 'hello A') # False
3)len
- len(字符串):獲取字符串長度(字符串中字符的個數(shù))
print(len('\tabc')) # 4
str6 = ' abc'
print(len(str6)) # 7
print(len('\u4e00abc')) # 4
for index in range(len('husjssas')):
print(index)
4)str
- str(數(shù)據(jù)):將其他類型數(shù)據(jù)轉(zhuǎn)換成字符串
- 所有類型的數(shù)據(jù)都可以轉(zhuǎn)換成字符串:轉(zhuǎn)換的時候直接在數(shù)據(jù)的外面加引號
print(str(100)) # '100'
print(str(12.5)) # '12.5'
print(str(True)) # 'True'
5)格式字符串
- 在字符串中用格式占位符代替字符串中變化的部分,然后再使用數(shù)據(jù)對變化的部分進行賦值
- 語法:包含格式占位符的字符串 %(數(shù)據(jù)1,數(shù)據(jù)2,...)
- 說明:數(shù)據(jù)的個數(shù)和類型要和前面字符串中格式占位符的個數(shù)和類型保持一致
- 格式占位符:%s --- 字符串;%d --- 整數(shù) ;%.Nf --- 浮點數(shù)(N控制小數(shù)點后小數(shù)的位數(shù));%c --- 字符、字符對應(yīng)的編碼值
name = input('姓名:')
age = int(input('請輸入年齡:'))
money = 3.5
message = '我是%s, 今年%d歲, 薪資:%.1fk 等級:%c' % (name, age, money, 66)
print(message) # 我是ann, 今年18歲, 薪資:3.5k,等級:B
# 方法二
name = input('請輸入姓名:')
print(f'hello, {name}')
6. 字符串的對象方法
1)字符串.capitalize()
- 將字符串中的第一個字符轉(zhuǎn)換成大寫字母
str1 = 'abc'
print(str1.capitalize()) # Abc
print(str1) # abc
2)設(shè)置對齊方式
-
字符串.center(width, fillchar):讓字符串在新字符串中居中,width控制新字符串的寬度,fillchar是填充字符
- 字符串.rjust(width, fillchar)
- 字符串.ljust(width, fillchar)
-
字符串.zfill(width) : 等于字符串.rjust(width, '0')
3)字符串1.count(字符串2)
- 統(tǒng)計字符串1中字符串2出現(xiàn)的次數(shù)
4)字符串1.find(字符串2)
- 返回字符串2在字符串1中第一次出現(xiàn)的下標(0~長度-1的下標);找不到返回-1
-
字符串1.find(字符串2, startindex, endindex):指定范圍中進行查找
5)字符串.join(序列)
- 將序列中元素取出來,中間用指定字符串拼接在一起產(chǎn)生一個新的字符串
6)max和min
-
max(序列):獲取序列中的最大值
-
min(序列):獲取序列中的最小值
7)字符串.replace(old,new)
- 將字符串中指定的舊字符串全部替換成新的字符串
-
字符串.replace(old,new,替換次數(shù)):指定替換次數(shù)
8)字符串1.split(字符串2)
9)字符串.title()
- 返回"標題化"的字符串,就是說所有單詞的首字母都轉(zhuǎn)化為大寫