Day6 字符串

1.什么是字符串(str)

字符串是Python內(nèi)置的一種容器型數(shù)據(jù)類型,不可變但是有序;
將單引號或者雙引號作為容器,里面可以根據(jù)情況放多個字符
不可變:指的是內(nèi)容的值和順序不可變
有序:一旦字符串確定,字符串中字符的位置固定

2. 字符串中的內(nèi)容 - 字符

python中只有字符的概念,沒有字符對應(yīng)的數(shù)據(jù)類型
字符串的基本單元就是字符,又叫字符串的元素

a.基本字符 - 數(shù)字、字母、常用符號、中文等

'asdada '
'12231ada '

b.轉(zhuǎn)義字符 - 通過轉(zhuǎn)移符號 \ 后面跟不同的符號老表示特殊功能和特殊意義的字符

\n 表示換行 ' 表示一個單引號 " 表示一個雙引號 \表示一個反斜杠 \t 表示制表符

str1 = "a\'bc\n1\"23\\n000"
print(str1)

阻止轉(zhuǎn)義: 在字符串的最前面加r/R,可以阻止字符串中的轉(zhuǎn)義字符轉(zhuǎn)義
str1 = r"a'bc\n1"23\n000"
print(str1)

c.編碼字符 - \u后邊跟4位的十六進(jìn)制數(shù),來表示一個字符。這個4位的16進(jìn)制數(shù)對應(yīng)的值是字符的編碼值

16進(jìn)制 : 0-9-a-f

3.字符編碼

Python中的字符采用的是Unicode編碼
計算機存儲數(shù)據(jù)的時候只能存數(shù)字,而且存的是數(shù)字的補碼(是以二進(jìn)制的格式進(jìn)行存儲)
100 # 十進(jìn)制數(shù)
print(bin(100)) # bin(數(shù)字) - 獲取指定數(shù)字對應(yīng)的二進(jìn)制
print('二進(jìn)制:', 0b1100100)
print(oct(100), 0o144) # oct(數(shù)字) - 獲取指定數(shù)字對應(yīng)的八進(jìn)制
print(hex(100), 0x64) # hex(數(shù)字) - 獲取指定數(shù)字對應(yīng)的十六進(jìn)制

編碼:每個字符在計算機中存儲的時候都會對應(yīng)一個固定且唯一的數(shù)字,這個數(shù)字就是這個字符的編碼。
每個字符和數(shù)字的一一對應(yīng)關(guān)系就是編碼表,常見的編碼表有:ASCII碼表和Unicode編碼表。
ASCII碼表支隊數(shù)字字符、字母字符、英文符號進(jìn)行編碼
Unicode編碼表是對ASCII表的擴充,能夠?qū)κ澜缟纤械姆栠M(jìn)行編碼

chr(編碼值) - 獲取編碼值對應(yīng)的字符

ord(字符) - 獲取字符對應(yīng)的編碼值,注意:字符值就是長度是1的字符串

print(chr(100))
print(ord('聶'),ord('上'),ord('欽'))
print(chr(32834))
print(chr(0x2C80))

1.獲取字符 - 取字符串內(nèi)容

1.1 獲取單個字符

a.語法: 字符串[下標(biāo)] - 根據(jù)下標(biāo)獲取字符串中對應(yīng)的字符,結(jié)果就是獲取到的字符
b.說明: 字符串 - 可以是字符串值,也可以是字符串變量,結(jié)果是字符串的表達(dá)式等都可以
[] - 固定寫法
下標(biāo) - 又叫索引,一旦字符串確定,那么字符串中每個字符都會對應(yīng)一個下標(biāo),表示這個字符在字符串中的位置。下標(biāo)的范圍是 “0~ 字符串長度減1” 0表示第一個字符,1表示第二個,以此類推。(通用的) 下標(biāo)范圍還可以是 -1 ~ -字符串長度減1, -1表示倒數(shù)第一個字符

c.注意: 獲取單個字符的時候下標(biāo)不能越界

str1 = 'py\nthon' # 'p' : 0/-6 'y' : 1/-5
result = 'python'[3]
print(result)
print(str1[0], str1[-6], str1[-1], str1[-2], str1[4])
print(str1[100]) # IndexError: string index out of range
print(str1[-20]) # IndexError: string index out of range

1.2 獲取部分字符(字符串切片)

a.語法: 字符串[開始下標(biāo):結(jié)束下標(biāo):步長] - 從開始下標(biāo)開始,獲取到結(jié)束下標(biāo)前為止,每次下標(biāo)值增加步長;結(jié)果是字符串

b.說明: 字符串 - 可以是字符串值,也可以是字符串變量,結(jié)果是字符串的表達(dá)式等都可以
[],: - 固定寫法
開始下標(biāo)、結(jié)束下標(biāo) - 下標(biāo)值,開始下標(biāo)對應(yīng)的字符可以取到,結(jié)束下標(biāo)對應(yīng)的字符一定去不到
步長 - 整數(shù),可以正的也可以是負(fù)的

c.注意: 下標(biāo)可以越界
如果步長為正(從前往后?。?,開始下標(biāo)對應(yīng)的字符要在結(jié)束下標(biāo)對應(yīng)的字符前才能獲取到值
如果步長為負(fù)(從后往前取),開始下標(biāo)對應(yīng)的字符要在結(jié)束下標(biāo)對應(yīng)的字符的后面才能獲取到值

str2 = 'abcedf123456'
print(str2[0:4:1])     # 'abce'
print('=', str2[0:4:-1], '=', sep='')      # ''
print(str2[-2:-10:-2])   # '531d'
print(str2[0:100:1])     # 下標(biāo)可以越界, 'abcedf123456'
print('hello python'[1:-2:3])     # 'eoy'

切片的語法中可以對步長、開始下標(biāo)和結(jié)束下標(biāo)進(jìn)行省略:
1.省略步長 (步長默認(rèn)為1)
字符串[開始下標(biāo):結(jié)束下標(biāo)] == 字符串[開始下標(biāo):結(jié)束下標(biāo):1]
2.省略下標(biāo)
字符串[:結(jié)束下標(biāo):步長] - 如果步長為正,從字符串開頭往后取;如果步長為負(fù),從字符串最后一個字符往前取
字符串[開始下標(biāo)::步長] - 如果步長為正,去到最后一個字符為止;如果步長未負(fù),取到第一個字符為止

str2 = 'abcedf123456'
print(str2[2:5])    # 'ced'
print(str2[-4:-1])   # '345'

print(str2[:3:1])    # 'abc'
print(str2[:3:-1])   # '654321fd'

print(str2[2:])     # 'cedf123456'
print(str2[2::-1])  # 'cba'

print(str2[:])     # 'abcedf123456'
print(str2[::-1])  # '654321fdecba'

練習(xí):1234 -> 4321

num = 1234
num_str = str(num)   # 先轉(zhuǎn)換成字符串
new_num_str = num_str[::-1]   # 切片
new_num = int(new_num_str)    # 轉(zhuǎn)換為數(shù)字
print(new_num*10)

1.3 遍歷字符串 - 一個一個的去除所有的字符

方法一: 直接遍歷
for 變量 in 字符串:
循環(huán)體

方法二: 通過遍歷下標(biāo),來遍歷字符串
for 變量 in range(字符串長度):
字符串[變量]

for char in 'hello':
print(char)

str3 = 'when i was young'
len(字符串) - 獲取字符串長度,返回一個數(shù)字。字符串長度指的是字符串中字符的個數(shù)

for index in range(len(str3)):
    print(index, str3[index])

index = 0
while index < len(str3):
    print(index, str3[index])
    index += 1

1.字符串相關(guān)運算

a. 數(shù)學(xué)運算: 字符串支持加法運算和乘法運算
語法 : 字符串1 + 字符串2 - 將兩個字符串拼接在一起產(chǎn)生一個新的字符
new_str = 'abc' + '123'
print(new_str) # abc123

注意:加號兩邊,必須都是數(shù)字,或者都是字符串,數(shù)字和字符串不同混合相加!

語法: 字符串 * 正整數(shù) / 正整數(shù) * 字符串 - 指定的字符串重復(fù)指定次數(shù),產(chǎn)生一個新的字符串
print('abc' * 3) # abcabcabc
print(''10) # **********

b.比較運算:字符串支持所有的比較運算符
字符串1 == 字符串2, 字符串1 != 字符串2 - 判斷兩個字符串是否相等
print('abc' == 'abc')
print('abc' == 'acb')
print('abc' != 'acb')

兩個字符串比較大?。?讓兩個字符串中相同位置的字符一一比較(從前往后),找到第一對不相等的字符,判斷編碼值大小

print('abcdef' > 'abz')    # False
print('abc' > 'abc')
print('abc1' > 'abc')     # True
print('abc-1' > 'abc')    # True

char = 'a'
應(yīng)用:
判斷一個字符是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
判斷一個字符是否是數(shù)字: '0' <= char <= '9'
判斷一個字符是否是中文(4e00~9fa5):'\u4e00' <= char <= '\u9fa5' / 0x4e00 <= ord(char) <= 0x9fa5

print('\u4e00' <= char <= '\u9fa5')
print('一' <= char <= '龥')

練習(xí): 輸入一個任意的字符串,統(tǒng)計輸入的內(nèi)容中字母的個數(shù)
例如: 輸入'abc123你好解釋end~~~~' 結(jié)果是:6

value = input('請輸入一個字符串:')
count = 0
for char in value:
    if 'a' <= char <= 'z' or 'A' <= char <= 'Z':
        # print(char)
        count += 1
print('字母的個數(shù)', count)

3. in 和 not in 操作

字符串1 in 字符串2 - 判斷字符串1是否在字符串2中(判斷字符串2中是否包含字符串1)
字符串1 not in 字符串2 - 判斷字符串1是否不在字符串2中(判斷字符串2中是否不包含字符串1)

print('abc' in '123abc====')     # True
print('abc' in 'a123bc====')     # False
print('abc' not in 'a123bc====')  # True
print('@' in 'ah@s')        # True

4. 常用內(nèi)置函數(shù)

len(字符串) - 求字符串長度
str(數(shù)據(jù)) - 將其他數(shù)據(jù)轉(zhuǎn)換成字符,所有的數(shù)據(jù)都能轉(zhuǎn)換成字符串, 轉(zhuǎn)換的時候直接在數(shù)據(jù)的外面加引號
print(int('+23')) # 只有去掉引號后,本身就是一個整數(shù)的字符串才能轉(zhuǎn)換成整型
print(float('124.0')) # 只有去掉引號后,本身就是一個數(shù)字的字符串才能轉(zhuǎn)換成浮點型
print(bool('')) # 除了空串會轉(zhuǎn)換成False,其他的都會轉(zhuǎn)換成True
str2 = '1'
if str2:
print('不是空串')

1. 字符串的對象方法

字符串.方法()
字符串.capitalize() - 將字符串中首字母大寫

str4 = 'hello'
new_str = str4.capitalize()
print(new_str)

字符串.center(width,fillchar) - 產(chǎn)生一個長度為width的新的字符串,新字符串中員字符串居中,剩余的部分用fillchar 填充

new_str = str4.center(11, '0')
print(new_str)   #  000hello000

new_str = str4.center(11, '*')
print(new_str)  # *** hello***

new_str = str4.center(11, ' ')
print(new_str)  #    hello   

字符串.ljust(width, fillchar)

new_str = str4.ljust(11, '=')
print(new_str)

字符串.rjust(width, fillchar)
py1901001\py1901002\py1901010

num = 1    # 001
num = 10   # 010
study_id = str(num).rjust(3, '0')
print(study_id)

字符串.zfill(width) - 產(chǎn)生一個寬度是width的字符串,原字符串在右邊,前用0填充

study_id = str(num).zfill(4)
print(study_id)

1.格式字符串 : 在字符串中通過格式占位符來表示字符串中變化的部分

語法:包含格式占位符的字符 %
說明:

格式占位符: %s   -   字符串
          %d  -    整數(shù)
%.Nf  -  浮點數(shù),N可以約束小數(shù)都面的小數(shù)位數(shù) (N是正整數(shù))
%c  -  字符,數(shù)字(數(shù)字會自動轉(zhuǎn)換成編碼)

name = input('姓名:')
age = int(input('年齡:'))
message = '%s今年%d歲,月薪:%.2f 等級:%c'% (name,age,10000,65)# message = name+'今年'+str(age)+'歲'
print(message)

練習(xí):輸入學(xué)生姓名,年齡,性別,以'xx今年x歲,性別:x ' 格式打印信息

 name = input('學(xué)生姓名:')
 age = int(input('年齡:'))
 gender = input('性別:')
 message = '%s今年%d歲,性別:%c'% (name,age,gender)
 print(message)

2.常用對象方法

字符串1.count(字符串2) - 統(tǒng)計字符串2在字符串1中出現(xiàn)的次數(shù)

str1 = 'and you? how are you!'
print(str1.count('you'))
str1 = 'how are you!oh~'
max_count = 0    # 保存一個最大值
max_char = ''    # 保存當(dāng)前最大次數(shù)對應(yīng)的字符
for char in str1:
    count = str1.count(char)
    if count > max_count:
        max_count = count
        max_char = char
print('%s出現(xiàn)%d次' % (max_char,max_count))

字符串1.find(字符串2) - 在字符串1中查找字符串2 第一次出現(xiàn)的位置,第一次出現(xiàn)的位子,如果找不到就返回 -1 ,找到了就返回第一個字符的下標(biāo)

字符串1.find(字符串2,開始下標(biāo),結(jié)束下標(biāo)) - 字符串1中開始下標(biāo)到結(jié)束下標(biāo)的范圍內(nèi)查找字符串2第一次出現(xiàn)的位置(不包含結(jié)束下標(biāo))

print(str1.find('you'))
print(str1.find('you',-8,-1))

在字符串'and you? how are you!oh~'中,找到所有'you'出現(xiàn)的下標(biāo)。 打?。?4,17,22

str1 = 'and you? how are you!oh~'
str2 = 'you'
start_index = 0
while True:
    index = str1.find(str2,start_index)
    if index == -1:
        break
    else:
        print(index,end=' ')
    # 更新開始下標(biāo)
    start_index = index + len(str2)

index 的功能和find一樣,只是如果字符串2不存在的時候會報錯

 print(str1.index('you2'))

字符串1.isdigit() - 判斷字符串1中是否只有數(shù)字字符

print('21'.isdigit())

字符串1.isnumeric() - 判斷字符串是否是數(shù)字字符串(可以檢查中文數(shù)字)
print('千'.isnumeric())

字符串1.join(序列) - 蔣勛列中的元素用字符串1連接在一起產(chǎn)生一個新的字符串

print('*'.join('abc'))
print('++'.join(['ab','b','qwq']))

練習(xí):自己實現(xiàn)join的功能,給字符串1和字符串2,用字符串1的字符把字符串2 中的字符連接起來

 方法一:
str1 = 'qwe'
str2 = '123'
str3 = ''
for char in str1:
    str3 += char + str2
print(str3[:-len(str1)])
方法二:
str3 = ''
for index in range(len(str1)):
    if index == len(str1) - 1:
        str3 += str1[index]
    else:
        str3 += str1[index] + str2
print(str3)
str2 = 'ag23bsh2390s'
str1 = '+'
str3 = ''
for char in str2:
    if '0'<= char <='9':
        str3 += char + str1
print(str3[:-len(str1)])

max(序列),min(序列) - 求序列中元素的最大值和最小值

print(max('siuabsaonbof'))
print(min('anbsouabcao'))
print(min([100,2,3,-44]))

字符串1.split(字符串2) - 在字符串1把字符串2作為切點,將字符串1切割

print('bgsaaibbdoaboabosaboab'.split('a'))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一 字符串(str) 1 .什么是字符串(str) 字符串是python內(nèi)置的一種容器型數(shù)據(jù)類型(序列),不可變,...
    ham731閱讀 597評論 0 1
  • 一 字符編碼 1.什么是字符串 特點:序列,有序,不可變的。形式:用單引號或者雙引號括起來的任意字符集。...
    Fly_withbird閱讀 463評論 0 0
  • 一.字符中的元素 1.阻止轉(zhuǎn)義 在字符串的最前面可以添加r/R來阻止字符串中的轉(zhuǎn)義字符轉(zhuǎn)義str1 = r'how...
    大漠判官1閱讀 366評論 0 0
  • 轉(zhuǎn)眼馬上到5月份了,來總結(jié)下四月畫了些啥! 我喜歡畫畫,因為想各種風(fēng)格都嘗試下,所以目前為止沒有找實體老師學(xué),都是...
    琢磨自留地閱讀 1,747評論 1 22
  • 我今天有一個很沖動的想法,并且立即實施了起來。就是組建了一個微信群,都是單位里沒有對象的男孩女孩。其實有這...
    追逐夢的自由閱讀 252評論 0 0

友情鏈接更多精彩內(nèi)容