Day_04-字符串

一、獲取字符

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('哇塞', '是的'))  # 是的,這是一個例子!!!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 獲取字符 1.獲取單個字符 字符串中沒一個字符都會對應一個下標(索引),用來表示字符在字符串中的位置下標是從0開始...
    嘩啦噼里啪啦閱讀 281評論 0 0
  • 一、對于昨天字符串的補充 3.字符串(str) 空串: '' ,"" (沒有內(nèi)容);空格字符串:' ' ,"...
    絕世小丑閱讀 263評論 0 0
  • 1 字符編碼 python中的編碼采用的是Unicode編碼。什么是編碼?就是數(shù)字和字符的一一對應的,其中字符對應...
    barriers閱讀 491評論 0 1
  • 1.什么是字符串序列,有序,不可變的用單引號或者雙引號任意字符集, 2,字符串中的字符普通字符:'23', 'sd...
    嘩啦噼里啪啦閱讀 446評論 0 0
  • 字符串 1.什么是字符串 序列:有序,不可變的。用單引號或者雙引號括起來的任意字符(集)。 2.字符串中的字符 a...
    落幕丶丶閱讀 903評論 0 0

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