字符串操作
獲取字符
1.獲取單個字符
字符串中的每一個字符都會對應一個唯一的下標(索引)用來表示字符在字符串中的位置。
下標是從0開始一次增加的海铆, 0對應的是第一個字符(0 ~ 字符串長度-1)
可以是從-1開始依次減小,-1代表最后一個字符(-1 ~ -字符串長度)
例如:
```
'hello' h->(0,-5) e->(1,-4) l->(2,-3) l->(3,-2) o->(4,-1)
'\tpytho\u4e00n' p->(1, -7)
```
- a.語法:字符串[下標]??-?? 獲取字符串中指定下標對應的字符
- b.說明:字符串??-??只要結果是字符串的表達式都可以,例如:字符串字面量, 字符串變量
示例:[] - 固定寫法 下標 - 需要獲取的字符對應的下標; 注意,這兒的下標不能越界
result = 'how are you!'[0] # 獲取字符串'how are you!'中下標是0的字符平挑,并且賦給變量result print(result) print('how are you!'[-4]) # y # print('how are you!'[-13]) # IndexError: string index out of range str1 = 'good good study! day day up!' print(str1[10])
2.獲取部分字符(字符串切片)
方法一:
- a.語法:字符串[開始下標:結束下標:步長] - 從開始下標開始游添,獲取到結束下標前為止系草。每次下標值加上步長去獲取下一個
- b.說明:字符串 - 只要結果是字符串的表達式都可以,例如:字符串字面量, 字符串變量
[] - 固定寫法 開始下標通熄、結束下標 - 下標值(這兒的下標可以越界) 步長 - 必須是整數(正數和負數都行); 如果步長是正數找都,是從開始下標開始從前往后獲却奖妗; 如果步長是負數能耻,是從開始下標開始從后往前獲壬兔丁亡驰;
- c.注意:當步長為正,要求開始下標對應的字符的位置必須在結束下標對應的字符的位置的前面,否則結果是空串饿幅!當步長為負凡辱,要求開始下標對應的字符的位置必須在結束下標對應的字符的位置的后面,否則結果是空串!
注意:不管怎么取栗恩,結束下標一定取不到透乾!
str1 = 'hello python!'
print('結果1:', str1[0:-1:2]) # 從前往后取
print('結果2:', str1[-1:0:-2]) # 從后往前取
print('結果3:', str1[-1:-100:-1]) # 結束下標越界
print('結果4:', str1[100: -100: -1]) # 下標越界
練習:獲取一個字符串中所有下標是奇數的字符(順序)
- 方法一:
print(str1[1:100:2])
str2 = "{'name':'小明', 'age': 18}"
print(str2[1:-1:1])
-
方法二:(省略步長)
字符串[開始下標:結束下標]??-??步長是1;從開始下標開始到結束下標前為止磕秤,一個一個的热槲凇!
print('when i was young!'[2:6])
方法三:(省略開始下標和結束下標)
方法 | 說明 |
---|---|
省略開始下標 | 字符串[:結束下標:步長] - 當步長是正數,從字符串的第一個字符開始取到結束下標前為止; 當步長是負數,從字符串的最后一個字符開始取到結束下標前為止. |
省略結束下標 | 字符串[開始下標::步長] - 當步長是正數,從開始下標開始取到字符串最后一個字符為止; 當步長是負數市咆,從開始下標開始取到字符串的第一個字符為止. |
str3 = 'when i was young!'
print(str3[:6], str3[:6:-1])
print(str3[2:], str3[2::-1])
print(str3[:])
print(str3[::-1]) # 讓字符串倒序
print(str3)
字符串相關運算
1.字符串支持的運算符: +, *, >, <, ==, != ,>=, <=
python中的字符串支持數學運算符中的+和*,以及所有的比較運算符
-
a. + : 字符串1 + 字符串2 - 將字符串1和字符串2拼接在一起產生一個新的字符串
注意: 字符串和數字不能混合相加!
-
b. * : 字符串 * N - N是正整數; 字符串重復N次產生一個新的字符串
示例:
new_str = 'abc' + '123' print(new_str) name = '張三' message = '吃飯了嗎汉操?' print(name+message+'....') # print('abc'+123) # TypeError: must be str, not int new_str = 'abc'*3 print(new_str) print(('abc'+'123')*2) # abc123abc123 print('abc'+'123'*2) # abc123123
-
c.比較是否相等
==, != 可以判斷兩個字符串是否相等或者不相等
示例:
print('abc' == 'abc') # True print('abc' == 'cba') # False print('abc' != 'abc') # False
-
d.字符比較大小
從第一個字符開始依次往后找,找到第一個不相等的字符對蒙兰,判斷它們的編碼值的大小磷瘤,誰的編碼值大,對應的字符串就大搜变;不會再往后比較了膀斋!
應用:
- 判斷是否是小寫字母:
'a'<=char<='z' <===> char>='a' and char<='z'
- 判斷是否是大寫字母:
'A'<=char<='Z'
- 判斷是否是字母:
'a' <= char <= 'z' or 'A' <= char <= 'Z'
示例:
print('abdcb' > 'abczde') # 判斷一個字符串中第3個字符是否是字母 str1 = 'sh是23.ssy23' char = str1[2] # 將第3個字符取出 print('是否是字母:', 'a' <= char <= 'z' or 'A' <= char <= 'Z') print('是否是中文:', '\u4e00' <= char <= '\u9fa5')
- 判斷是否是小寫字母:
2. in和not in操作
語法 | 功能 |
---|---|
字符串1 in 字符串2 | 判斷字符串2中是否包含字符串1(判斷字符串1是否是字符串2的子串) |
字符串1 not in 字符串2 | 判斷字符串2中是否不包含字符串1(判斷字符串1是否是字符串2的子串) |
示例:
print('abc' in 'hello abc') # True
print('abc' in 'ahello bc') # False
print('abc' not in 'hello abc') # False
print('abc' not in 'ahello bc') # True
print('A' in 'hello Abc')
3. len函數
len()可以對序列和字符串進行長度的計算
用法 | 功能 |
---|---|
len(序列) | 獲取序列長度, 獲取序列中元素的個數 |
len(字符串) | 獲取字符串的長度(字符的個數) |
注意:
- 一個可以轉移的轉義字符的長度是1!
- 一個編碼字符的長度是1痹雅!
- 一個空格字符的長度是1仰担!
- 手動在鍵盤上按一個tab,一般是4個空格绩社,長度是4; 一個\t來表示的tab摔蓝,長度是1
示例:
print(len('abc'))
str1 = input('請輸入:')
last_char = str1[len(str1)-1] # 獲取輸入的字符串中的最后一個字符
print(last_char)
str1 = ' abc'
str2 = '\tabc'
print(str1) # abc
print(str2) # abc
print(len(str1), len(str2)) #7,4 # 手動輸入的tab和\t對應的字符個數可能不一樣!\t永遠是1
格式字符串
1.什么是格式字符串:
在字符串中通過格式占位符來代替字符串中變化的部分愉耙,然后在后面通過數據或者變量確定變化
語法:
包含占位符的字符串 % (值1, 值2, 值3...)
說明:
占位符 - %s 字符串
%d 整數
%f 小數 (%.Nf 保留小數點后N位小數)
%c 字符 (可以將數字轉換成字符)
% - 固定寫法
() - 固定寫法贮尉,字符串中只有一個占位符的時候,這個()可以省略
括號中的值 - 值和占位符要一一對應(個數朴沿、類型猜谚、位置都要對應)
示例:
name = input('姓名:')
age = 18
sex = '男'
# 加操作
# mesage = '我叫XXX,今天xx歲,性別:X, 月薪x萬'
# mesage = '我叫'+name+',今年'+age+'歲赌渣,性別:'+sex
# print(mesage)
# 格式字符串
message = '我叫%s,今年%s,性別:%s, 月薪%.2f萬 字符:%c' % (name, age, sex, 1.5, 97)
print(message)
練習: 輸入一個字符串, 用一個變量保存輸入的字符串的相關信息:XXX的長度是XX,最后一個字符是X
例如: 輸入abc -> abc的長度是3,最后一個字符是c
input_str = input('輸入一個字符串:') # 輸入jklsdjfklsjflksaj;
message = '%s的長度是%d, 最后一個字符是%c' % (input_str, len(input_str), input_str[-1])
print(message) # jklsdjfklsjflksaj;的長度是18, 最后一個字符是;
print('%s-%d-%c' % ('abc', 100, 'A')) # abc-100-A
類型轉換
- 基本語法
- 語法:
類型名(數據) - 將指定數據轉換成指定類型 - 說明:
類型名 - 任何python支持的魏铅,或者自定的類型都可以
數據 - 需要轉換的對象(類型不同要求可能不一樣)
- 語法:
2. 轉換實例
函數 | 功能 |
---|---|
int(數據) | 將其他數據轉換成整型 |
float(數據) | 將其他數據轉換成浮點型 |
bool(數據) | 將其他類型轉換成布爾 |
str(數據) | 將其他數據轉換成字符串 |
-
轉換成整型
示例:
a = int(-10.90) # 所有浮點數可以轉換成整數,直接保留整數部分 b = int(False) # 所有布爾可以轉化成整數坚芜, True -> 1; False -> 0 c = int('-120') # 只有去掉字符串的引號后本身就是一個整數的字符串才能轉換成整型 print(a, b, c) age = input('年齡:') print(type(age), age) # <class 'str'> , 15 print('是否能進入網吧:', int(age) >= 18) # 是否能進入網吧:False
-
轉換成浮點型
示例:
a = float(100) # 所有整數都可以轉換成浮點數览芳,在后面加.0 b = float(True) # 所有布爾可以轉化成浮點數, True -> 1.0; False -> 0.0 c = float('12.9') # 去掉引號后本身就是一個數字的字符串能轉換成浮點型 print(a, b, c)
-
轉換成布爾類型
- python中所有的數據都可以轉換成布爾
- 所有為空為0的值都會轉換成False,其他都是True
示例:
a = bool(0) b = bool(-0.0) c = bool('') d = bool([]) e = bool({}) f = bool(None) print(a, b, c, d, e, f)
-
轉換成字符串類型
python中所有的數據都可以轉換成字符串,而且轉換的時候就是單純的在最外面加引號
示例:
a = str(100) print(a) print('abc'+str(100))
練習:輸入三個數字鸿竖,求三個數的和
num1 = input('第一個數:') # 1 num2 = input('第二個數:') # 2 num3 = input('第三個數:') # 3 print(float(num1)+float(num2)+float(num3)) # 6.0
字符串的常用方法
提示: 表中所有字符串相關方法的使用方式都是: 字符串.方法名()
1. capitalize()
字符串.capitalize():將指定的字符串的第一個字符轉換成大寫字母,返回新的字符串
注意: 只有第一個字符是字母的時候才有效
如:
str1 = 'abc'
print(str1.capitalize()) # Abc
2.字符串對齊方式
方法 | 意義 |
---|---|
字符串.center(width, fillchar) | 居中 |
字符串.ljust(width, fillchar) | 左對齊 |
字符串.rjust(width, fillchar) | 右對齊 |
width決定新的字符串的長度, fillchar就是用來填充多出來的位置的字符
示例:
str1 = 'abc'
print(str1.center(7, '0')) # 00abc00
print(str1.ljust(7, '*')) # abc****
print(str1.rjust(7, '=')) # ====abc
print(str1.center(7)) # abc
3.count
字符串1.count(字符串2) - 在字符串1中統(tǒng)計字符串2出現的次數
print('abc and hight a'.count('abc')) # 1
4.isalpha
字符串.isalpha() - 判斷字符串中是否全是字母
注意:非ASCII碼表中的字符檢測不出來沧竟!
print('aSH'.isalpha())
5.join
字符串1.join(字符串2) - 將字符串1插入到字符串2中的每個字符之間
new_str = '**'.join('abc')
print(new_str) # a**b**c
6.split
字符串1.split(字符串2) - 以字符串2去切割字符串1,返回一個列表
print('12,89,90'.split(',')) # ['12', '89', '90']
練習:輸入進班順序铸敏,然后自動產生對應的學號, py1809XXXX
例如:輸入1 ——> py18090001 輸入32 ——> py18090032 ...
num = input('請輸入順序號:') # 1
# 生成序號后面變化的部分
# new_num = num.rjust(4, '0')
new_num = num.zfill(4) # zfill(width) == rjust(width, '0')
# 添加固定部分
study_num = 'py1809'+new_num
print(study_num) #py18090001