一、獲取字符
1.單個字符
原理:字符串中的每一個字符都會對應一個唯一的下標(索引)
下標:用來表示字符在字符串中的位置
下標方式:
1.0開始依次增加 , 0 對應的第一個字符(0~字符串長度-1)
2.-1開始依次減少 , -1 對應的是最后一個字符(-1~ - 字符串長度)
a.語法:
字符串[下標] - 獲取字符串中指定下標的對應的字符
b 說明:
字符串 - 字面量(只要結(jié)果是字符串的表達式都可以)字符串變量
[]- 固定寫法
下標 - 需要獲取的字符對應的下標
注意:這里的下標不能越界,否則會報錯
示例:
result = 'how are you'[4]
# 獲取字符串下標是4的字符,并且賦給變量reault
print(result) # a
result = 'how are you'[12]
# IndexError: string index out of range
# 下標錯誤:字符串下標超過范圍
str1 = 'good good study! day day up!'
# str 類型名 會覆蓋原來的類型功能,不報錯,但是不建議作為變量名
print(str1[10])
2.部分字符(字符串切片)
方法1:
a. 語法:
字符串[開始下標:結(jié)束下標:步長] - 從開始下標開始獲取到結(jié)束下標前為止(顧頭不顧尾)
每次下標止加上步長去獲取下一個元素
b. 說明:
字符串 - 有結(jié)果的表達式
[] - 固定寫法
開始下標、結(jié)束下標 - 下標值(下標可以越界)
步長 - 整數(shù)(正數(shù)和負數(shù)都可以)
正數(shù):從開始下標從前往后獲取
負數(shù):從開始下標從后往前獲取
c. 注意:
步長為正:
要求:開始下標對應的字符的位置必須在結(jié)束下標對應的字符的位置的 前面,否則結(jié)果是空串
步長為負:
要求:開始下標對應的字符的位置必須在結(jié)束下標對應的字符的位置的后面,否則結(jié)果是空串
示例:
str1 = 'hello python'
print(str1[0:4:-2]) # 切片的時候,倒過來取不到就是空串
print(str1[0:-1:2]) # 下標數(shù)值與大小無關(guān)
print('結(jié)果3', str1[-1:-100:-1]) # 結(jié)束下標越界
print('結(jié)果4', str1[100:-100:1]) # 下標越界
# 練習:獲取一個字符串中所有下標奇數(shù)的字符(從前往后)
str2 = '1234567'
print(str2[1:100:2]) # 2 4 6
方法2:
字符串[開始下標:結(jié)束下標] - 省略步長
省略步長:默認步長為1
過程:從開始下標開始到結(jié)束下標前為止,一個個取
方法3:字符串[:結(jié)束下標:步長](省略開始下標和結(jié)束下標)
a. 省略開始下標
步長為正:從第一個字符開始取到結(jié)束下標前為止
步長為負:從字符串的最后一個字符開始取到結(jié)束下標前為止
b. 省略結(jié)束下標
字符串[開始下標::步長]
步長為正:從開始下標開始取到最后一個字符為止;
步長為負:從開始下標開始取到第一個字符為止
示例:
str4 = 'when i was yuong!'
print(str4[:6], str4[:6:-1]) # when i !gnouy saw
print(str4[2:], str4[2::-1]) # en i was yuong! ehw
print(str4[:]) # 從前到后
print(str4[::-1]) # 從后往前
注:不會改變字符串的的結(jié)果,只是獲取內(nèi)容
二、字符串運算符
1. 數(shù)學運算符:+ *
2. 比較運算符:>, <, ==, !=, >=, <=
支持所有的比較運算符
1.數(shù)學運算符
a. +: 字符串1 + 字符串2
作用:將兩個字符串拼接在一起產(chǎn)生一個新的字符串
注意:字符串只能是同類型的數(shù)據(jù)進行運算!
b. *: 字符串 * n - n是正整數(shù)
作用:字符串重復n次產(chǎn)生一個新的字符串
str1 = 'abc' + '123'
print(str1)
# print('abc' + 123) # TypeError: must be str, not int
# 類型錯誤:必須是字符串,不能是整型
new_str = 'abc'*3 # abcabcabc
print(new_str)
print('sdf' + 'dfd'*2) # sdfdfddfd
2. 比較運算符
a.比較是否相等
==, != 可以判斷兩個字符串是否相等或者不相等
b.比較大小
第一步:兩個字符串字符一一對應
第二步:找不同
第三步:判斷不同字符的編碼值
第四步:比較編碼值的大小
應用:
1 判斷是否是小寫字母:'a'<= char <= 'z'
2 判斷是否是大寫字母:'A'<= char <= 'Z'
3 判斷是否是中文:'\u4e00' <= char <= '\u9fa5'
注意:這里字母必須加單引號
print('abc' == 'abc') # True
print('abdcb' > 'abcde') # True
# 判斷一個字符串中第三個字符是否是字母?
str3 = 'sdd34.erer'
char = str3[2] # 取出第三個字符
print('是否是字母', 'a' <= char <= 'z' or 'A' <= char <= 'Z')
print('是否是中文:', '\u4e00' <= char <= '\u9fa5')
3.in 和 not in 操作
a.字符串1 in 字符串2 -> 判斷字符串2中是否包含字符串1
(判斷字符串1是否是字符串2的子串)
b.字符串1 not in 字符串2 -> 判斷字符串2中是否不包含字符串1
(判斷字符串1是否不是字符串2的子串)
# in
print('zhi' in 'hzhi isd') # True
print('dfj' in 'ddddddd') # False
# not in
print('zhi' not in 'hzhi isd') # False
print('dfj' not in 'ddddddd') # True
4. len函數(shù)
用法:len(序列)
目的:獲取序列的長度即獲取序列中元素的個數(shù)
輸入:序列
輸出:數(shù)字(包括0)
注意:
一個轉(zhuǎn)義字符:長度為1
一個編碼字符:長度為1
一個空格:長度為1
一個tab鍵:長度為4
一個\t表示的tab鍵:長度為1
示例:
print(len('sdfd')) # 4
str1 = input('請輸入:') # 123456
print(str1[len(str1)-1]) # 6
str2 = ' abc'
print(len(str2)) # 7
三、格式化字符串
1. 什么是格式字符串?
定義:字符串中通過格式占位符來代替字符串中變化的部分,然后在后面通過數(shù)據(jù)或者變量確定變化
語法:
包含占位符的字符串 % (每個占位符對應的變量)
包含占位符的字符串 % (值1, 值2, 值3....)
常見占位符:
%s (字符串)
%d (數(shù)字)
%f (小數(shù)) (%.nf 保留小數(shù)點后n位小數(shù))
%c (字符) (可以將編碼值轉(zhuǎn)換成字符)
% - 固定寫法
() - 固定寫法
注:字符串中只有一個占位符的時候,這個()可以省略
值 - 個數(shù)和類型和位置一一對應,即值和占位符要一一對應
name = input('姓名:')
age = 18
sex = '男'
massage = '我叫%s,今年%d歲,性別:%s'
print(massage % (name, age, sex))
message = '我叫%s,今年%d, 性別:%s, \
月薪%f萬' % (name, age, sex, 3.5)
print(message)
注:可以直接在print函數(shù)里面寫,不用先保存在變量中
四、類型轉(zhuǎn)換
1.基本語法
語法:
類型名(數(shù)據(jù)) - 將指定的數(shù)據(jù)轉(zhuǎn)換成指定類型
說明:
類型名 - 任何python支持的,或者是自定的類型都可以
數(shù)據(jù) - 需要轉(zhuǎn)換的對象(類型不同要求可能不同)
2. 轉(zhuǎn)換實例
int(數(shù)據(jù)) - 將其他數(shù)據(jù)轉(zhuǎn)換成整型
float(數(shù)據(jù)) - 將其他數(shù)據(jù)轉(zhuǎn)換成浮點型
bool(數(shù)據(jù)) - 將其他類型轉(zhuǎn)換成布爾
str(數(shù)據(jù)) - 將其他數(shù)據(jù)轉(zhuǎn)換成字符串
a.整型
print(int(12.8)) # 浮點數(shù)可以轉(zhuǎn)換成整數(shù),直接保留整數(shù)部分
b = int(True) # 1 布爾可以轉(zhuǎn)換成整數(shù),True->1, False->0
print(b)
c = int('120') # 只有去掉字符串的引號后本身就是
# 一個整數(shù)的字符串才能轉(zhuǎn)換成整型
c = int('avd') # 報錯
# ValueError: invalid literal for int() with base 10: 'avd'
# 值錯誤:以10為基數(shù)的int()的文本無效:'avd'
b. 浮點型
a = float(100) # 所有整數(shù)都可以轉(zhuǎn)換成浮點數(shù),在后面加.0
b = float(True) # 布爾轉(zhuǎn)換成浮點數(shù),True->1.0,False->0.0
c = float('12.5')
# 去掉引號后本身就是一個數(shù)字的字符串,能轉(zhuǎn)換成浮點型
print(a, b, c)
c. 布爾類型
python中所有的數(shù)據(jù)都可以轉(zhuǎn)換成布爾
注:所有為空為0的值會轉(zhuǎn)換成False,其他都是True
a = bool(100)
b = bool(0.0)
c = bool('')
d = bool([])
f = bool(None)
print(a, b, c, d, f) # True False False False False
d. 字符串類型
所有的數(shù)據(jù)都可以轉(zhuǎn)換成字符串,而且轉(zhuǎn)化的時候就只是單純的在外面加兩個單引號
應用:字符串的拼接 字符串的運算
a = str(100)
print(type(100)) # <class 'str'>
五、內(nèi)置函數(shù)
使用方法:字符串.方法名()
1 capitalize()
目的:將字符串的第一個字母變成大寫,其他字母變小寫
返回值:首字母大寫,其他字母小寫的新字符串
注意:首字符如果是非字母,首字母不會轉(zhuǎn)換成大寫,會轉(zhuǎn)換成小寫
# 注意:只有第一個字符是字母的時候才有效
str1 = 'ddfff'
print(str1.capitalize()) # Ddfff
str="123 hello PYTHON"
str.capitalize() # 123 hello python
2 字符串對齊方式
說明:
width:字符串長度(整數(shù)),下同
fillchar:填充符號(字符),只能是單個字符,下同
center(width, fillchar)
目的:居中ljust(width, fillchar)
目的:左對齊rjust(width, fillchar)
目的:右對齊
示例:
str1 = 'abc'
print(str1.center(7, '0')) # 00abc00
print(str1.ljust(7, '*')) # abc****
print(str1.rjust(7, '=')) # ====abc
注意:當fillchar長度小于字符串長度時,會直接返回字符串
fillchar默認是空格
3 count(str)
用法:字符串1.count(字符串2)
目的: 在字符串1中統(tǒng)計字符串2出現(xiàn)的次數(shù)
輸入:兩個字符串(可以傳參開始和結(jié)束下標)
輸出:數(shù)字
print('ddfjdkfdfkd'.count('d')) # 5
4 isalpha()
目的: 判斷字符串中是否全是字母
注意:非ASCII碼表中的字符檢測不出來
print('dfdfdj'.isalpha()) # True
print('dfdfw1j'.isalpha()) # False
5 join(seq)
用法:字符串1.join(字符串2)
目的:將字符串1插入到字符串2中
輸入:兩個字符串
輸出:一個新的字符串
注意:每個字符之間,最前后不會插入
new_str = '*'.join('dffkd')
print(new_str) # d*f*f*k*d
6 split
用法:字符串1.split(字符串2)
目的:以字符串2去切割字符串1
輸入:兩個字符串
輸出:列表
應用:通過url獲取圖片的名字
print('12,34,34'.split(',')) # ['12', '34', '34']
url = "http://www.baidu.com/python/image/123456.jpg"
path =url.split("/")[-1]
print(path) # 123456.jpg
7 zfill(width)
目的:長度為 width ,原字符串右對齊,前面填充0
補充:zfill(width)效果等同于rjust(width, '0')
num = input('進班順序(1~50):') # 12
id2 = 'py1809' + num.zfill(4)
print(id2) # py18090012
8 isdecimal()
目的:檢查字符串是否只包含十進制字符
輸出:布爾值
str1 = '123hnfd'
print('123errer'.isdecimal()) # False
print('12323'.isdecimal()) # True
9 upper()
目的:轉(zhuǎn)換字符串中所有小寫字母為大寫
輸出:新的字符串
print('djkdfd'.upper()) # DJKDFD
10 title()
目的:將多個單詞的首字母轉(zhuǎn)換成大寫
輸出:新的字符串
注意:非字母后的第一個字母轉(zhuǎn)換成大寫字母
print('mynameis'.title()) # Mynameis
print('my_name_is'.title()) # My_Name_Is
txt = "b2b2b2 3g3g3g"
x = txt.title()
print(x) # B2B2B2 3G3G3G
11 swapcase()
目的:將字母大寫轉(zhuǎn)小寫 and 小寫轉(zhuǎn)大寫
輸出:新的字符串
說明:就是將字母取反
print('dfDFfdf'.swapcase()) # DFdfFDF
12 max(str)
目的:獲取字符串 str 中最大的字母
輸出:字符
注意:有大小寫的字符串中返回的是小寫字母的最大值
print(max('zheshi')) # z
print(max('Zheshi')) #s
13 min(str)
目的:獲取字符串 str 中最小的字母
輸出:字符
注意:有大小寫的字符串中返回的是小寫字母的最小值
print(min('znxjdsyeiw')) # d
print(min('Znxjdsyeiw')) #z
14 lower()
目的:轉(zhuǎn)換字符串中所有大寫為小寫
輸出:新的字符串
print('DFDFDKDFDdd'.lower()) # dfdfdkdfddd
15 istitle()
目的:如果字符串采用PEp8方式,但是單詞首字母都是大寫,返回 True,否則返回 False
輸出:布爾值
print('dfjd_dfdjf'.istitle()) # False
print('My_Name'.istitle()) # True
16 isdigit()
目的:判斷字符串是否只包含數(shù)字
輸出:布爾值
print('dfdf343434'.isdigit()) # False
print('14343545454'.isdigit()) # True
17 isalnum()
目的:判斷字符串至少有一個字符并且所有字符是否都是字母或數(shù)字
輸出:布爾值
print(''.isalnum()) # False
print('ddffdff'.isalnum()) # True
print('123354'.isalnum()) # True
print('dfdf2434'.isalnum()) # True
18 isnumeric()
目的:判斷字符串中是否只包含數(shù)字字符(中文數(shù)字也可以)
輸出:布爾值
print('434838'.isnumeric()) # True
print('434fdfg'.isnumeric()) # False
19 isspace()
目的:判斷字符串中是否為空白符(不是空串)
輸出:布爾值
空白符:空格、制表符(\t)、換行(\n)、回車等(\r)
print(' '.isspace()) # True
print(''.isspace()) # False
print('dfdf'.isspace()) # False
20 lstrip([chars])
目的:截掉字符串左邊的空格或指定字符。
輸出:新的字符串
print(' dffdfd'.lstrip()) # dffdfd
21 islower()
目的:如果字符串中包含至少一個區(qū)分大小寫的字符,判斷所有這些(區(qū)分大小寫的)字符是否都是小寫
輸出:布爾值
print('fdddfdfA'.islower()) # False
print('fdddfsdsf'.islower()) # True
22 isupper()
目的:如果字符串中包含至少一個區(qū)分大小寫的字符,判斷所有這些(區(qū)分大小寫的)字符是否都是大寫
輸出:布爾值
print('fdddfsdsf'.isupper()) # False
print('DSDSDDSD'.isupper()) # True
23 rstrip([chars])
目的:刪除字符串末尾的指定字符(默認為空格)
輸出:新的字符串
demo = '我是一個例子:::'
demo_1 = ' 真巧,我也是例子 '
print(demo.rstrip(':')) # 我是一個例子
print(demo_1.rstrip()) # 真巧,我也是例子
24 strip([chars])
目的:移除字符串頭尾指定的字符(默認為空格)或字符序列
輸出:新的字符串
注意:只會刪除兩頭,不會刪中間
刪除多個字符時:只要頭尾有對應其中的某個字符即刪除,不考慮順序
str = "*****我是**一個**例子!!!*****"
print (str.strip('*')) # 我是**一個**例子!!!
# 字符序列
str = "12我也是一個例子21"
print (str.strip('12')) # 我也是一個例子
25 endswith(suffix[, start[, end]])
目的:判斷字符串是否以指定后綴結(jié)尾
說明:
suffix: 字符串或者是一個元素。
start: 開始下標
end: 結(jié)束下標
輸出:布爾值
注意:
start 參數(shù)以 0 為第一個字符索引值。
end 參數(shù)以 1 為第一個字符索引值。
Str = '哇塞,這是一個例子!!!'
suffix = '!!'
print(Str.endswith(suffix)) # True
print(Str.endswith(suffix, 9)) # True
suffix = 'run'
print(Str.endswith(suffix)) # False
print(Str.endswith(suffix, 0, 19)) # False
26 replace(old, new[, max])
目的:將舊字符串替換成新的字符串
說明:
old :將被替換的子字符串。
new : 新字符串,用于替換old子字符串。
max:可選字符串, 替換不超過 max 次
輸出:新的字符串
demo = '哇塞,這是一個例子!!!'
print(demo) # 哇塞,這是一個例子!!!
print(demo.replace('哇塞', '是的')) # 是的,這是一個例子!!!