1. 程式人生 > >[Python3] 009 字符串:給你們看看我的內置方法 第一彈

[Python3] 009 字符串:給你們看看我的內置方法 第一彈

計數 cas err 區分大小寫 一次 ascii capital fish 開頭

目錄

  • 前言
  • 如何查看 python3 中和 str 有關的方法
  • 字符串方法
    • 1. capitalize()
    • 2. casefold()
    • 3. center(width)
    • 4. count(sub[, start[, end]])
    • 5. endswith(sub[, start[, end]])
    • 6. find(sub[, start[, end]])
    • 7. index(sub[, start[, end]])
    • 8. isalnum()
    • 9. isalpha()
    • 10. isascii()
    • 11. isdecimal()
    • 12. isdigit()

前言

大家好,我是字符串。YorkFish 介紹了這麽多有關列表的信息,我找他談了談,最終在我的命(ken)令(qiu)下,他答應具體介紹一些我“團隊中的朋友”(內置方法)給大家認識。


如何查看 python3 中和 str 有關的方法

  • dir(str) —— 列舉和 str 有關的方法
    • 其中帶下劃線的如 __add__ 是魔法方法,還沒學到,暫時不做解釋
    • capitalize 開始,到 zfill 為止,是今天的“硬菜”
  • help(str) —— 列舉並簡要介紹和 str 有關的方法
  • help(str.capitalize) —— 單獨查看 str 的某個方法(方法後不加括號)

字符串方法

  • 我數了一下,Python3.745 個除魔法方法以外的方法。一次寫完有點傷身體,我決定養生一點,分三篇吧。

1. capitalize()

  • 釋義:把字符串的第一個字符改為大寫(原本就大寫,則忽略),其余改為小寫(原本就小寫,也忽略)
  • 示例
# 例1.1

name1_1 = "YorkFish"    # 註意大小寫
name1_2 = "yorkFish"
name1_3 = "YorkFish"
name1_4 = "yorkfish"
naem1_5 = "123YorkFish"

print(name1_1.capitalize())
print(name1_2.capitalize())
print(name1_3.capitalize())
print(name1_4.capitalize())
print(name1_5.capitalize())
  • 運行結果

Yorkfish

Yorkfish

Yorkfish

Yorkfish

123yorkfish

從結果看,並不是從第一個字母開始操作,而是從第一個字符開始操作。


# 例1.2 接例1.1

print(name1_1.capitalize)   # capitalize 後沒帶括號
  • 運行結果

<built-in method capitalize of str object at 0x000001DCB0384030>

括號不能漏。


2. casefold()

  • 釋義:將整個字符串的字符改為小寫
  • 示例
# 例2

name2 = "YorkFish"
print(name2.casefold())
  • 運行結果

yorkfish


3. center(width)

  • 釋義:width 為自定義的一段長度(通常要比字符串長),讓字符串在這段長度裏居中,其余位置用空格填充。
  • 示例
# 例3

name3 = "123YorkFish"
print(1, name3.center(30), 1)
  • 運行結果

1 123YorkFish 1

Markdown 格式下,空格不直觀,請看下方截圖:
技術分享圖片


4. count(sub[, start[, end]])

  • 計數君 count()[Python3] 006 中出現過,這次更詳細
  • 釋義:
    1. [] 裏的參數可用可不用
    2. sub, start, end 在這裏都是代號
    3. sub 表示要計數的字符(查了一下詞典,sub 有替身之意)
    4. start 表示開始位置,若沒設置,默認為開頭
    5. end 表示結束的位置,若沒設置,默認為結尾
  • 示例
# 例4

str4 = "Actions speak louder than words."

print(str4.count(‘A‘))
print(str4.count(‘A‘, 1))
print(str4.count(‘a‘, 8, 12))   # 相當於把索引範圍縮小到 speak 上
  • 運行結果

1

0

1

從結果看,1. 區分大小寫;2. 從 0 開始索引。


5. endswith(sub[, start[, end]])

  • 釋義:檢查字符串是否以 sub 子字符串結束,若是,返回 True;若不是,返回 False。可用 startend 自定義範圍。
  • 示例
# 例5

str5 = "Winter has come, can spring be far behind?"

print(str5.endswith(‘?‘))
print(str5.endswith(‘far behind?‘))
print(str5.endswith(‘Winter has come, can spring be far behind?‘))

print(str5.endswith("come", 12, 15))    # 12 到 15 剛好是 come
print(str5.endswith("come", 11, 15))
print(str5.endswith("e, c", 15, 18))    # 15 到 18 剛好是 e, c
print(str5.endswith("e, c", 14, 18))

print(str5.endswith(‘e‘, 12, 15))
  • 運行結果

True

True

True

False

True

Flase

True

True

從結果看,1. 可以查單個字符、多個字符,甚至是本體;2. 中間的某一段不能查這段本身。


6. find(sub[, start[, end]])

  • 釋義;尋找字符串中是否包含 sub 子字符串。若有,返回索引值;若無,返回 -1 。
  • 示例
# 例6

str6 = "Kid, happiness is a very simple matter; grow up, simple is a very happy thing! "

print(str6.find("is"))
print(str6.find("is", 40))
print(str6.find("simple", 15, 40))
print(str6.find("thing", 15, 40))
  • 運行結果

15

56

25

-1


7. index(sub[, start[, end]])

  • 索引君 index()[Python3] 006 中出現過,這次更詳細
  • 釋義:跟 find() 的用法僅一點不同:若索引不到,會報錯(產生一個異常)。
  • 示例
# 例7

str7 = "Kid, happiness is a very simple matter; grow up, simple is a very happy thing! "

print(str7.index("simple", 15, 40))
print(str7.index("thing", 15, 40))
  • 運行結果

25

ValueError:……substring not found


8. isalnum()

  • 釋義:若一個非空字符串中所有的字符都是字母或數字,返回 True;若否,返回False
  • 示例
# 例8

name8_1 = "YorkFish2019"
name8_2 = "YorkFish 2019"   # 比 name8_1 多了一個空格
name8_3 = ‘‘                # 空字符串
name8_4 = "YorkFish②?①⑨"    # YorkFish 後面是帶圈的數字 2019

print(name8_1.isalnum())
print(name8_2.isalnum())
print(name8_3.isalnum())
print(name8_4.isalnum())
  • 運行結果

True

False

False

True

若釋義中沒有“非空字符串”的限制,也說得通:空字符串中包含的不是字母或數字,所以返回 False

數字除了 0-9,還包括帶圈的 0-9


9. isalpha()

  • 釋義:若一個非空字符串中所有的字符都是字母,返回 True;若否,返回False
  • 示例
# 例9

name9_1 = "YorkFish"
name9_2 = "YorkFish2019"
name9_3 = "魚"
name9_4 = "??"

print(name9_1.isalpha())
print(name9_2.isalpha())
print(name9_3.isalpha())
print(name9_4.isalpha())
  • 運行結果

True

False

True

True

說是字母,但我輸入漢字,也顯示 True。而且,我自作聰明地找了幾個編碼靠後漢字,如“??”,都返回 True

又得挖坑了,日後學到“編碼”來填平,編號 Py009-1


10. isascii()

  • 釋義:
    1. 若字符串內均是 ASCII,返回 True;否則,返回 Flase
    2. ASCII 字符的代碼點的範圍是 U+ 0000000 -U+007F (即編碼占用 0 - 127 這些地址)。
    3. 空字符串也屬於 ASCII
  • 示例
# 例10

‘‘‘
str10_1 = ‘‘
str10_2 = ‘ ‘
str10_3 = "123"
str10_4 = "0b10010"
str10_5 = "\765"
str10_6 = "0xfe"
str10_7 = "\x7d"
str10_8 = "!@#$%"
str10_9 = "你好"

我感覺我的思路錯了,然後我找來一個“幫手”—— chr()
 chr(i, /)
    Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
    返回一個 Unicode 字符,其中 i 的範圍是 0 <= i <= 0x10ffff。
‘‘‘

#print(chr(-1).isascii())   會報錯
print(chr(0).isascii())
print(chr(100).isascii())
print(chr(127).isascii())
print(chr(128).isascii())
print(‘‘.isascii())         # 沒有空格,內容為空
  • 運行結果

True

True

True

False

True


11. isdecimal()

  • 釋義:若字符串中只包含十進制數字,返回 True;否則,返回 False
  • 示例
# 例11

str11_1 = "YorkFish2019"
str11_2 = "2019"
str11_3 = "0xfe"

print(str11_1.isdecimal())
print(str11_2.isdecimal())
print(str11_3.isdecimal())
  • 運行結果

False

True

False


12. isdigit()

  • 釋義:若字符串中只包含數字,返回 True;否則,返回 False
  • 示例
# 例12

str12_1 = "YorkFish2019"
str12_2 = "2019"
str12_3 = "0o765"
str12_4 = "\765"
str12_5 = "0xfe"
str12_6 = "\xfe"
str12_7 = "10010"       # 看著像二進制,其實還是十進制
str12_8 = "0b10010"
str12_9 = "②"

print(str12_1.isdecimal())
print(str12_2.isdecimal())
print(str12_3.isdecimal())
print(str12_4.isdecimal())
print(str12_5.isdecimal())
print(str12_6.isdecimal())
print(str12_7.isdecimal())
print(str12_8.isdecimal())
print(str12_9.isdecimal())
  • 運行結果

False

True

False

False

False

False

True

False

False

說好的數字呢?怎麽二進制、八進制、十六進制不行?連帶圈的數字都不行!

所以這裏的意思是說 0~9,沒別的。

[Python3] 009 字符串:給你們看看我的內置方法 第一彈