======獲取字符======
1. 獲取單個字符
字符串中的每一個字符都會對應一個唯一的下標(索引), 用來表示字符在字符串中的位置.
下標是從 0 開始依次增加, 0 對應的是第一個字符(0 ~ 字符串長度 -1)
可以是從 -1 開始依次減小, -1 代表最后一個字符(-1 ~ -字符串長度)
例如: "hello" -> h
'\tpytho\u4e00n' # p 在(左1, 右-7)
a. 語法:
字符串[下標] —— 獲取字符串中指定下標對應的字符
b. 說明:
字符串 —— 只要結(jié)果是字符串的表達式都可以, 例如: 字符串字面量, 字符串變量
[] —— 固定寫法
下標 —— 需要獲取的字符對應的下表; 注意: 這兒的下表不能越界,必須在范圍之內(nèi)
result = 'how are you!'[0]
# 12位字符, 獲取字符串'hao are you!'中下標是 0 的字符, 并且賦給變量result
print(result) # h
print('how are you!'[-4]) # y
# print('how are you!'[-13]) # (-12 ~ 11)越界IndexError: string index out of range
str1 = 'good good study! day day up!'
print(str1[10]) # 取 s
print(str1[-1]) # 取 画株!
2.獲取部分字符(字符串切片)
方法一
a. 語法:
字符串[開始下標: 結(jié)束下標: 步長] —— 從開始下標開始, 獲取到結(jié)束下標 前 為止. 每次下標值 加上步長去獲取下一個
b. 說明:
字符串 —— 只要結(jié)果是字符串的表達式都可以, 例如: 字符串字面量, 字符串變量
[] —— 固定寫法
開始下標忱叭、結(jié)束下標 —— 下標值(這兒的下標可以越界)
步長 —— 必須是整數(shù)(正數(shù)和負數(shù)都行);如果步長是正數(shù)诫睬,是從開始下標開始 從前往后獲取,如果步長是負數(shù),是從開始下標開始 從后往前獲取
注意:
當步長為正摄凡,要求開始下標對應的字符位置必須在結(jié)束下標對應的字符的前面当悔,否則結(jié)果是空串!
當步長為負脉执,要求開始下標對應的字符為止必須在結(jié)束下標對應的字符的后面疼阔,否則結(jié)果是空串!
不管怎么取半夷,結(jié)束下標一定取不到婆廊!
str1 = 'hello python!'
print(str1[0:4:1]) # hell 從前往后取
print(str1[0:4:2]) # hl 從前往后取
print(str1[0:7:3]) # hlp
print(str1[0:-1:2]) # hlopto
print(str1[-1:0:-2]) # !otpil 從后往前取
print(str1[-1:-100:-1]) # !nohtyp olleh 結(jié)束下標越界 從后往前取
print(str1[100:-100:-1]) # !nohtyp olleh # 開始下標和結(jié)束下標越界
獲取一個字符串中所有下標是奇數(shù)的字符(順序)
print(str1[1:100:2]) #el yhn
str2 = "{'name':'小明', 'age': 18}" # 去掉 {}
print(str2[1:-1:1]) # 'name':'小明'巫橄, 'age': 18
方法二
字符串[開始下標:結(jié)束下標] —— 步長是 1 淘邻; 從開始下標開始到結(jié)束下標為止,一個一個的取
print('when i was young!'[2:6]) # en i
方法三:(省略開始下標和結(jié)束下標)
a. 省略開始下標 - 字符串[:結(jié)束下標:步長] —— 當步長是正數(shù)湘换,從字符串的第一個字符開始取到結(jié)束下標前為止宾舅; 當步長是負數(shù),從字符串的最后一個字符開始取到結(jié)束下標前為止彩倚。
b. 省略結(jié)束下標 - 字符串[開始下標::步長] —— 當步長為正數(shù)筹我,從開始下標開始取到字符串最后一個字符為止;當步長為負數(shù)帆离,從開始下標開始取到字符串的第一個字符為止蔬蕊。
str3 = 'when i was young!'
print(str3[:6], str3[:6:-1]) # when i !gnuoy saw
print(str3[2:], str3[2::-1]) # en i was young! ehw
print(str3[:]) # when i was young!
print(str3[::-1]) # !gnuoy saw i nehw 讓字符串倒序 ★
======字符串相關(guān)運算======
1. 字符串支持的運算符: +, *, >, <, ==, !=, >=, <=
python中的字符串支持數(shù)學運算符中的 + 和 * ,以及所有的比較運算符
a. + : 字符串1 + 字符串2 - 將 字符串1和字符串2 拼接在一起產(chǎn)生一個 新的字符串
new_str = 'abc' + '123'
print(new_str) # abc123
注意: 字符串 和 數(shù)字 不能混合相加!
b. * : 字符串 * N - N 是正整數(shù)哥谷;字符串重復N次產(chǎn)生一個新的字符串
new_str = 'abc' * 3
print(new_str) # abcabcabc
new_str = 'abc' + '123'
print(new_str) # abc123
name = '張三'
message = '吃飯了嗎岸夯?'
print(name + message) # 張三吃飯了嗎?
print(name + message + '...') # 張三吃飯了嗎们妥?...
# print('abc' + 123) # “123”錯誤 TypeError: must be str, not int
new_str = 'abc' * 3
print(new_str) # abcabcabc
print(('abc' + '123') * 2) # abc123abc123
print('abc' + '123' * 2) # abc123123
c. 比較是否相等
==, != 可以判斷兩個字符是否相等或者不相等
print('abc' == 'abc') # True
print('abc' != 'abc') # Flase
d. 比較大胁掳纭:從第一個字符開始依次往后找,找到第一個不相等的字符王悍,判斷它們的編碼值的大小破镰,
誰的編碼值大,對應的字符串就大,就不再往后繼續(xù)比較了
print('abdcb' > 'abcde') # True d > c 故正確
print('abdcb' > 'zbcde') # False a < z 故錯誤
應用:
1. 判斷是否是小寫字母:'a' <= char <= 'z' <===> char >= 'a' and char <= 'z' 注: 只有python可以是前者的寫法
2. 判斷是否是大寫字母:'A' <= char <= 'Z'
print('abc' == 'abc') # True
print('abc' != 'abc') # Flase
print('abdcb' > 'abcde') # True d > c 故正確
print('abdcb' > 'zbcde') # False a < z 故錯誤
print('abc' < 'abcd') # True 多一個字符 d
判斷一個字符串中第三個字符是否是字母
str1 = 'shk23.ssy23'
char = str1[2] # 將第3個字符取出
print('是否是字母:', 'a' <= char <= 'z' or 'A' <= char <= 'Z') # 是否是字母: True
print('是否是中文:', '\u4e00' <= char <= '\u9fa5') # 是否是中文: False
2. in 和 not in 操作
字符串1 in 字符串2 -> 判斷 字符串2 中是否包 含字符串1 (判斷 1 是否是 2 的子串)
print('abc' in 'hello abc') # True 均有'abc'
print('abc' in 'ahello bc') # False 位置順序不可變鲜漩,故錯誤
字符串1 not in 字符串2 -> 判斷 字符串2 中是否包 含字符串1 (判斷 1 是否是 2 的子串)
print('abc' not in 'hello abc') # False
print('abc' not in 'ahello bc') # True
print('abc' in 'hello abc') # True 均有'abc'
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') # True
3. len 函數(shù)
len(序列) —— 獲取序列長度,獲取序列中元素的個數(shù)
len(字符串) —— 獲取字符串的長度(字符的個數(shù)) >>結(jié)果是一個整數(shù)
print(len('abc')) # 3 長度為 3 (整數(shù))
注意:
一個可以轉(zhuǎn)移的轉(zhuǎn)義字符的長度是 1 孕似!
一個編碼字符的長度是 1 踩娘!
一個空格字符的長度是 1 !
手動在鍵盤上按一個tab喉祭,一般是4個空格养渴,長度是4;一個 \t 來表示的 tab泛烙,其長度為 1 理卑,比較方便
print(len('abc')) # 3
str1 = input('請輸入:')
last_char = str1[len(str1) - 1] # 獲取輸入中的最后一個字符
print(last_char) # 獲取輸入中的最后一個字符
str1 = ' abc' # 其中abc之前是一個tab鍵(4個空格)
print(str1)
print(len(str1)) # 7 個字符
str2 = '\tabc' # \t 是隨著tab的變化而變化,方便
print(len(str2)) # 4 個字符
======格式字符串======
1. 什么是格式字符串蔽氨?
在字符串中通過格式占位符來代替字符串中變化的部分藐唠,然后在后面通過數(shù)據(jù)或變量確定變化(變化的字符串就是格式字符串)
語法:
包含 占位符的字符串 % (值1,值2鹉究,值3...)有多少占位符就有多少值
說明:
占位符 —— %s (字符串)
%d (整數(shù))
%f (小數(shù)) > %.Nf 保留小數(shù)點后N位小數(shù)
%c (字符) > 可以將數(shù)字轉(zhuǎn)換成字符
% —— 固定寫法
() —— 固定寫法宇立,字符串中只有一個占位符的時候,這個括號()可以省略
括號中的值 —— 值 和 占位符 要一一對應(個數(shù)自赔、類型妈嘹、位置都要對應)
name = input('姓名:')
age = 18
sex = '男'
# =============加法操作============
# mesage = '我叫XXX, 今年xx歲绍妨,性別:X润脸,月薪x萬'
# mesage ='我叫' + name',今年' + age + '歲痘绎,性別:' + sex
# print(mesage)
# =============格式字符串操作========
message = '我叫%s津函,今年%d肖粮,性別:%s孤页,月薪%.2f萬,字符:%c' % (name, age, sex, 1.5, 97)
print(message) # 我叫小明涩馆,今年18行施,性別:男,月薪1.50萬魂那,字符:a
練習:輸入一個字符串蛾号,用一個變量保存輸入的字符串的相關(guān)信息:XXX的長度是XX,最后一個字符是X
例如:輸入abc -> abc 的長度是3涯雅,最后一個字符是 c
input_str = input('請輸入一個字符串:')
message = '%s的長度是%d鲜结,最后一個字符是%c' % (input_str, len(input_str), input_str[-1])
print(message) # sadsadd的長度是7拗胜,最后一個字符是d
======類型轉(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)換成字符串
age = input('年齡:')
print(type(age), age)
print('是否能進入網(wǎng)吧:', age >= 18) # 需要加 int()
print('是否能進入網(wǎng)吧:', int(age) >= 18)
1. 轉(zhuǎn)換成整型
a = int(12.9) # 浮點數(shù)可以轉(zhuǎn)換成整數(shù),直接保留整數(shù)部分
b = int(False) # 所有布爾可以轉(zhuǎn)換成整數(shù)纫事, True -> 1; False -> 0
c = int('-120') # 只有去掉字符串的引號后勘畔,本身就是一個整數(shù)的字符串才能轉(zhuǎn)換成整數(shù)
print(a, b, c) # 12 0 -120
2. 轉(zhuǎn)換成浮點型
a = float(100) # 所有整數(shù)都可以轉(zhuǎn)換成浮點數(shù),在后面加 .0
b = float(True) # 所有布爾可以轉(zhuǎn)換成浮點數(shù)丽惶,True -> 1.0炫七;False -> 0.0
c = float('12.9') # 去掉引號后诉字,本身就是一個數(shù)字的字符串能轉(zhuǎn)換成浮點型
print(a, b, c) # 100.0 1.0 12.9
3. 轉(zhuǎn)換成布爾類型
python中所有的數(shù)據(jù)都可以轉(zhuǎn)換成布爾
所有為 空 為 0 的值都會轉(zhuǎn)換成False,其它都是True
a = bool(100) # True
b = bool(-0.0) # False
c = bool('abc') # True
d = bool('') # False
e = bool([]) # False
f = bool(None) # False
print(a, b, c, d, e, f) # True False True False False False
4. 轉(zhuǎn)換成字符串類型
python中所有的數(shù)據(jù)都可以轉(zhuǎn)換成字符串知纷,而且轉(zhuǎn)換的時候就是單純的在外面加引號''
a = str(100)
print(a) # 100
print('abc' + str(100)) # abc100
練習:輸入三個數(shù)字壤圃,求三個數(shù)的和
num1 = input('第一個數(shù):') # 1
num2 = input('第二個數(shù)字:') # 2
num3 = input('第三個數(shù)字:') # 3
print(float(num1) + float(num2) + float(num3)) # 6.0