04 字符串相關(guān)運算以及類型轉(zhuǎn)換

======獲取字符======

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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伍绳,一起剝皮案震驚了整個濱河市乍桂,隨后出現(xiàn)的幾起案子冲杀,更是在濱河造成了極大的恐慌,老刑警劉巖睹酌,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件权谁,死亡現(xiàn)場離奇詭異,居然都是意外死亡憋沿,警方通過查閱死者的電腦和手機旺芽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辐啄,“玉大人采章,你說我怎么就攤上這事『迹” “怎么了悯舟?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砸民。 經(jīng)常有香客問我抵怎,道長奋救,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任反惕,我火速辦了婚禮菠镇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘承璃。我一直安慰自己利耍,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布盔粹。 她就那樣靜靜地躺著隘梨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舷嗡。 梳的紋絲不亂的頭發(fā)上轴猎,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音进萄,去河邊找鬼捻脖。 笑死,一個胖子當著我的面吹牛中鼠,可吹牛的內(nèi)容都是我干的可婶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼援雇,長吁一口氣:“原來是場噩夢啊……” “哼矛渴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惫搏,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤具温,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筐赔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铣猩,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年茴丰,在試婚紗的時候發(fā)現(xiàn)自己被綠了达皿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡较沪,死狀恐怖鳞绕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尸曼,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布萄焦,位于F島的核電站控轿,受9級特大地震影響冤竹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茬射,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一鹦蠕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧在抛,春花似錦钟病、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朴读,卻和暖如春屹徘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衅金。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工噪伊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氮唯。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓鉴吹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惩琉。 傳聞我的和親對象是個殘疾皇子拙寡,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容