1. 程式人生 > >FishC筆記—14 講 字串:各種奇葩的內建方法

FishC筆記—14 講 字串:各種奇葩的內建方法

本期內容詳解:

字串的方法 註釋
capitalize() 把字串的第一個字元改為大寫
casefold() 把整個字串的所有字元改為小寫
center(width) 將字串居中,並使用空格填充至長度width的新字串
count(sub[,start[,end]]) 返回sub在字串裡邊出現的次數,start和end引數表示範圍,可選。encode(encoding=’utf-8’, errors=’strict’)以encoding指定的編碼格式對字串進行編碼。
endswith(sub[,start[,end]]) 檢查字串是否以sub子字串結束,如果是返回True,否則返回False。start和end引數表示範圍,可選。
expandtabs([tabsize=8]) 把字串中的tab符號(\t)轉換為空格,如不指定引數,預設的空格數是tabsize=8。
find(sub[,start[,end]]) 檢測sub是否包含在字串中,如果有則返回索引值,否則返回-1,start和end引數表示範圍,可選。
index(sub[,start[,end]]) 跟find方法一樣,不過如果sub不在string中會產生一個異常。
isalnum() 如果字串至少有一個字元並且所有字元都是字母或數字則返回True,否則返回False。
isalpha() 如果字串至少有一個字元並且所有字元都是字母則返回True,否則返回False。
isdecimal() 如果字串只包含十進位制數字則返回True,否則返回False。
isdigit() 如果字串只包含數字則返回True,否則返回False。
islower() 如果字串中至少包含一個區分大小寫的字元,並且這些字元都是小寫,則返回True,否則返回False。
isnumeric() 如果字串中只包含數字字元,則返回True,否則返回False。
isspace() 如果字串中只包含空格,則返回True,否則返回False。
istitle() 如果字串是標題化(所有的單詞都是以大寫開始,其餘字母均小寫),則返回True,否則返回False。
isupper() 如果字串中至少包含一個區分大小寫的字元,並且這些字元都是大寫,則返回True,否則返回False。
join(sub) 以字串作為分隔符,插入到sub中所有的字元之間。>>> str5 = 'Fishc' >>> str5.join('12345') '1Fishc2Fishc3Fishc4Fishc5'
ljust(width) 返回一個左對齊的字串,並使用空格填充至長度為width的新字串。
lower() 轉換字串中所有大寫字元為小寫。
lstrip() 去掉字串左邊的所有空格
partition(sub) 找到子字串sub,把字串分成一個3元組(pre_sub,sub,fol_sub),如果字串中不包含sub則返回(‘原字串’, ’’, ’’)
replace(old,new[,count]) 把字串中的old子字串替換成new子字串,如果count指定,則替換不超過count次。>>> str7 = 'i love fishdm and seven' >>> str7.replace('e','E',2) 'i lovE fishdm and sEven'
rfind(sub[,start[,end]]) 類似於find()方法,不過是從右邊開始查詢。
rindex(sub[,start[,end]]) 類似於index()方法,不過是從右邊開始。
rjust(width) 返回一個右對齊的字串,並使用空格填充至長度為width的新字串。
rpartition(sub) 類似於partition()方法,不過是從右邊開始查詢。
rstrip() 刪除字串末尾的空格。
split(sep=None, maxsplit=-1) 不帶引數預設是以空格為分隔符切片字串,如果maxsplit引數有設定,則僅分隔maxsplit個子字串,返回切片後的子字串拼接的列表。>>> str7.split () ['i', 'love', 'fishdm', 'and', 'seven']
splitlines(([keepends])) 按照‘\n’分隔,返回一個包含各行作為元素的列表,如果keepends引數指定,則返回前keepends行。
startswith(prefix[,start[,end]]) 檢查字串是否以prefix開頭,是則返回True,否則返回False。start和end引數可以指定範圍檢查,可選。
strip([chars]) 刪除字串前邊和後邊所有的空格,chars引數可以定製刪除的字元,可選。
swapcase() 翻轉字串中的大小寫。
title() 返回標題化(所有的單詞都是以大寫開始,其餘字母均小寫)的字串。
translate(table) 根據table的規則(可以由str.maketrans(‘a’,‘b’)定製)轉換字串中的字元。>>> str8 = 'aaasss sssaaa' >>> str8.translate(str.maketrans('s','b')) 'aaabbb bbbaaa'
upper() 轉換字串中的所有小寫字元為大寫。
zfill(width) 返回長度為width的字串,原字串右對齊,前邊用0填充。

典型課後題
還記得如何定義一個跨越多行的字串嗎(請至少寫出兩種實現的方法)?

方法一:

>>> str1 = '''待我長髮及腰,將軍歸來可好?
此身君子意逍遙,怎料山河蕭蕭。
天光乍破遇,暮雪白頭老。
寒劍默聽奔雷,長槍獨守空壕。
醉臥沙場君莫笑,一夜吹徹畫角。
江南晚來客,紅繩結髮梢。'''

方法二:

>>> str2 = '待卿長髮及腰,我必凱旋迴朝。\
昔日縱馬任逍遙,俱是少年英豪。\
東都霞色好,西湖煙波渺。\
執槍血戰八方,誓守山河多嬌。\
應有得勝歸來日,與卿共度良宵。\
盼攜手終老,願與子同袍。'

方法三:

>>> str3 = ('待卿長髮及腰,我必凱旋迴朝。'
'昔日縱馬任逍遙,俱是少年英豪。'
'東都霞色好,西湖煙波渺。'
'執槍血戰八方,誓守山河多嬌。'
'應有得勝歸來日,與卿共度良宵。'
'盼攜手終老,願與子同袍。')

三引號字串通常我們用於做什麼使用?

三引號字串不賦值的情況下,通常當作跨行註釋使用

file1 = open(‘C:\windows\temp\readme.txt’, ‘r’) 表示以只讀方式開啟“C:\windows\temp\readme.txt”這個文字檔案,但事實上這個語句會報錯,知道為什麼嗎?你會如何修改?

會報錯是因為在字串中,我們約定“\t”和“\r”分別表示“橫向製表符(TAB)”和“回車符”,因此並不會按照我們計劃的路徑去開啟檔案。
Python 為我們鋪好了解決的道路,只需要使用原始字串操作符(R或r)即可:

    file1 = open(r'C:\windows\temp\readme.txt', 'r')  

有字串:str1 = ' <a href="http: //www. fishc. com/dvd" target="_blank">魚C資源打包</a>',請問如何提取出子字串

str1[16:29]

如果使用負數作為索引值進行分片操作,按照第三題的要求你能夠正確目測出結果嗎?

str1[-45:-32]

還是第三題那個字串,請問下邊語句會顯示什麼內容?
str1[20:-36]

‘fishc’

請寫一個密碼安全性檢查的指令碼程式碼:check.py

程式演示:

方法一:

#密碼安全性檢查程式碼  
#  
#低階密碼要求:  
# 1.密碼由單純的數字或字母組成  
# 2.密碼長度小於等於8位  
#  
#中級密碼要求:  
# 1.密碼必須由數字、字母或特殊字元(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|)任意兩種組合  
#密碼長度不能低於8位  
#  
#高階密碼要求:  
# 1.密碼必須由數字、字母及特殊字元(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|)三種組合  
# 2.密碼只能由字母開頭  
# 3.密碼長度不能低於16位  

str1 = "[email protected]#$%^&*()_=-/,.?<>;:[]{}\|"  
has_str1 = 0  
has_num = 0  
has_alpha = 0  
t = 'y'  
while t == 'y':  
        password = input("請輸入需要檢查的密碼組合:")  
        length = len(password)  
        while(password.isspace() or length == 0):  
                password = input('您輸入的密碼為空(或空格),請重新輸入:')  
        for i in password:  
                if i in str1:  
                        has_str1 = 1  
                if i.isdigit():  
                        has_num = 1  
                if i.isalpha():  
                        has_alpha = 1  
        has =  has_str1 + has_num + has_alpha  
        if length <= 8 or password.isalnum():  
                level = "低"  
        if length > 8 and has ==2:  
                level = "中"  
        if length >= 16 and has == 3 and password[0].isalnum():  
                level = "高"  
        print("您的密碼安全等級評定為:%s"%level)  
        if level == "高":  
                print("請繼續保持")  
        else:  
                print("""請按以下方式提升您的密碼安全級別: 
        1.密碼必須由數字、字母及特殊字元三種組合 
        2.密碼只能由字母開頭 
        3.密碼長度不能低於16位""")  
        t = input("還要再測試麼?(”y“繼續,其他退出)")  

方法二:

    #密碼安全性檢查程式碼  
    #  
    #低階密碼要求:  
    # 1.密碼由單純的數字或字母組成  
    # 2.密碼長度小於等於8位  
    #  
    #中級密碼要求:  
    # 1.密碼必須由數字、字母或特殊字元(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|)任意兩種組合  
    #密碼長度不能低於8位  
    #  
    #高階密碼要求:  
    # 1.密碼必須由數字、字母及特殊字元(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|)三種組合  
    # 2.密碼只能由字母開頭  
    # 3.密碼長度不能低於16位  

    symbols = "[email protected]#$%^&*()_=-/,.?<>;:[]{}\|"  
    chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'  
    nums = '0123456789'  
    t = 'y'  
    while t == 'y':  
        passwd = input('您輸入的密碼為空(或空格),請重新輸入:')  
        length = len(passwd)      
    #判斷長度  
        while(passwd.isspace() or length == 0):  
            passwd = input('您輸入的密碼為空(或空格),請重新輸入:')  
            length = len(passwd)  
        if length <= 8:  
            flag_len = 1  
        elif 8 < length <16:  
            flag_len = 2  
        else:  
            flag_len = 3  
        flag_con = 0  
    #判斷是否包含特殊字元  
        for each in passwd:  
            if each in symbols:  
                flag_con +=1  
                break  
    #判斷是否包含字母  
        for each in passwd:  
            if each in chars:  
                flag_con += 1  
                break  
    #判斷是否包含數字  
        for each in passwd:  
            if each in nums:  
                flag_con += 1  
                break  
    #列印結果  
        while 1:  
            print("您的密碼安全級別評定為:",end='')  
            if flag_len == 1 or flag_con == 1:  
                print("低")  
            elif flag_len == 2 or flag_con == 2:  
                print("中")  
            else:  
                print("高")  
                print("請繼續保持")  
                break  
            print("""請按以下方式提升您的密碼安全級別: 
        1.密碼必須由數字、字母及特殊字元三種組合 
        2.密碼只能由字母開頭 
        3.密碼長度不能低於16位""")  
            break  
        t = input("還要再測試麼?(”y“繼續,其他退出)")  

方法三:

    #密碼安全性檢查程式碼  
    #  
    #低階密碼要求:  
    # 1.密碼由單純的數字或字母組成  
    # 2.密碼長度小於等於8位  
    #  
    #中級密碼要求:  
    # 1.密碼必須由數字、字母或特殊字元(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|)任意兩種組合  
    #密碼長度不能低於8位  
    #  
    #高階密碼要求:  
    # 1.密碼必須由數字、字母及特殊字元(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|)三種組合  
    # 2.密碼只能由字母開頭  
    # 3.密碼長度不能低於16位  
    str0 = """請按以下方式提升您的密碼安全級別: 
    1.必須由數字、字母及特殊字元三種組合(僅限:[email protected]#$%^&*()_=-/,.?<>;:[]{}\|) 
    2.密碼只能由字母開頭 
    3.密碼長度不能低於16位"""  

    str1 = '您的密碼安全級別評定為:低\n' + str0 + """ 
    4.替王尼瑪給隔壁老王送上一把水果刀 
    5.告訴你的孩子,他是充話費下送的 
    6.召集另外三隻小甲魚,喂他們突變劑,救紐約人民於水火 
    """  
    str2 = '您的密碼安全級別評定為:中\n' +str0 +""" 
    4.扶老奶奶過馬路,幫室友補襪子 
    """  
    str3 = '您的密碼安全評定為:高\n請繼續保持!'  

    special = "[email protected]#$%^&*()_=-/,.?<>;:[]{}\|"  
    letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'  
    number = '0123456789'  
    t = 'y'  

    while t == 'y':  
        password = input("請輸入需要檢查的密碼組合:")  

    #用num來統計字元型別出現次數  
        num = 0  
        a = b = c = 0  
    #輸入的不能為空  
        while password == '':  
            password = input("不能為空,請重新輸入:")  
    #計算num的值,如果輸入的全部是字元,那麼num=0,所以才會有<=1  
        if password.isnumeric() or password.isalpha():  
            num = 1  
        else:  
            for i in password:  
                if a == 0 and i in special:  
                    num += 1  
                    a = 1  
                elif b ==0 and i in number:  
                    num += 1  
                    b = 1  
                elif c == 0 and i in letter:  
                    num += 1  
                    c = 1  
        if password[0] in letter and num == 3 and len(password) >= 16:  
            print(str3)  
        elif num >= 2 and len(password) >= 8:  
            print(str2)  
        elif num <= 1 and len(password) < 8:  
            print(str1)  
        t = input("還要再測試麼?(”y“繼續,其他退出)")  

相關推薦

FishC筆記14 字串各種奇葩方法

本期內容詳解: 字串的方法 註釋 capitalize() 把字串的第一個字元改為大寫 casefold() 把整個字串的所有字元改為小寫 center(width) 將字串居中,並使用空格填充至長度wid

零基礎入門學習Python(14)--字串各種奇葩方法

前言 這節課我們回過頭來,再談一下字串,或許我們現在再來談字串,有些朋友可能覺得沒必要了,甚至有些朋友就會覺得,不就是字串嗎,哥閉著眼也能寫出來,那其實關於字串還有很多你不知道的祕密哦。由於字串在日常生活中是如此的常見,因此小甲魚抱著負責任的態度,在這節課上,

第014字串各種奇葩方法

測試題: 0. 還記得如何定義一個跨越多行的字串嗎(請至少寫出兩種實現的方法)? 方法一:     >>> str1 = '''待我長髮及腰,將軍歸來可好? 此身君子意逍遙,怎料山河蕭蕭。 天光乍破遇,暮雪白頭老。 寒劍默聽奔雷,長槍獨守空壕。

第014字串各種奇葩方法 | 學習記錄(小甲魚零基礎入門學習Python)

(標答出處: 魚C論壇) 《零基礎入門學習Python》 測試題: 還記得如何定義一個跨越多行的字串嗎(請至少寫出兩種實現的方法)? 例一:str = (‘春眠不覺曉, 處處聞啼鳥。 也來風雨聲, 花落知多少。’) 例二:str = ‘春眠不覺曉, 處處聞啼鳥。 也來風雨聲

入門學習-Python-小甲魚學習資料-Day014-字串各種奇葩方法

根據視訊自己練習 : capitalize() 把字串的第一個字元改為大寫 casefold() 把整個字串的所有字元改為小寫 center(width) 將字串居中,並使用空格填充至長度 width 的新字串 count(sub[, start[, end]]) 返回 sub 在字串裡

FishC筆記—18 函式靈活即強大

本期內容詳解: 1、分清楚形參和實參 2、函式文件:是函式的一部分,於解釋不同,使用help(函式名)或者 函式名__doc__可以檢視到 3、關鍵字引數(在一個函式的引數較多的時候作用比較明顯): 給引數的名字下定義,例如: def F(name,

FishC筆記—21 函式lambda表示式

本期內容詳解: 1、lambda表示式的作用: 1)Python寫一些執行指令碼時,使用lambda就可以省下定義函式的過程,比如說我們只是需要寫一個簡單的指令碼來管理伺服器時間,我們就不需要專門

Unity Shader入門精要筆記(七)Unity Shader檔案、變數和語義

本系列文章由Aimar_Johnny編寫,歡迎轉載,轉載請標明出處,謝謝。 http://blog.csdn.net/lzhq1982/article/details/74279052 1、Unity提供的內建檔案和變數 上一篇我們學了一個簡單的頂點/片元著色器。複雜的著

C#可擴展編程之MEF學習筆記(三)導出類的方法和屬性(轉)

學習 說了 如何 mod ati dem ont num imp 前面說完了導入和導出的幾種方法,如果大家細心的話會註意到前面我們導出的都是類,那麽方法和屬性能不能導出呢???答案是肯定的,下面就來說下MEF是如何導出方法和屬性的。   還是前面的代碼,第二篇中已經提供了下

[14-03] 示例利用匿名部類簡化代碼

state value 日誌輸出 try sys 異常處理 黃色 ext setname 內部類的其中一個優勢就是可以簡化代碼,現在以一個常用的JDBC獲取數據封裝對象的例子,來簡單談談如何使用匿名內部類來簡化代碼。下面這段代碼,是用JDBC連接,到數據庫查詢到數據之後,將

筆記 -《計算機網路自頂向下方法》 第5章 鏈路層鏈路、接入網和區域網(0)

第5章 鏈路層:鏈路、接入網和區域網(0)   ** “結構” 均為本章知識結構; ** “假設” 均為理想化,抽象的模型; ** “例項” 均為已經投入使用的模型; (結構1)   (假設1)同一子網內 傳遞網路層資料報的鏈路層工作流程 &nbs

筆記 -《計算機網路自頂向下方法》 第5章 鏈路層鏈路、接入網和區域網(8)

第5章 鏈路層:鏈路、接入網和區域網(8)鏈路層交換機 鏈路層交換機的任務是從入鏈路接收鏈路層幀,並將其轉發到對應的出鏈路。 鏈路層交換機對子網中的主機和路由器是透明的。 鏈路層幀到達交換機的任何介面的速率可能暫時會超過該介面的鏈路數量,所以在介面設有快取。 鏈路層交換

Python全棧學習筆記day 27 isinstance和issubclass、反射、類的方法(__str__和__repr__、__del__、__call__)

一、isinstance和issubclass isinstance(obj,cls)檢查是否obj是否是類 cls 的物件 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo))

[Python3] 011 字串給你們看看我的方法 第三彈

目錄 少廢話,上例子 1. encode(encoding='utf-8', errors='strict') 2. expandtabs([tabsize=8]) 藉此機會簡單地說一說 print() 3. format_map()

[Python3] 010 字串給你們看看我的方法 第二彈

目錄 少廢話,上例子 1. isidentifier() 2. islower() 3. isnumeric() 4. isprintable() 5. isspace() 6. istitle() 7. isupper() 8.

我的Python學習筆記(四)動態新增屬性和方法

一、動態語言相關概念 1.1 動態語言 在執行時程式碼可以根據某些條件改變自身結構 可以在執行時引進新的函式、物件、甚至程式碼,可以刪除已有的函式等其他結構上的變化 常見的動態語言:Object-C、C#、JavaScript、PHP、Python、Erlang 1.2 動態型別語言 在執行期間檢查資料

小甲魚python教程第10-12--python列表方法 筆記習題答案

一丶列表BIF 1.獲取元素索引值(索引值從0開始): index() 2.從列表中刪除元素:①remove(引數名字): list.remove(引數名字) ②del del list[1]或者刪除整個列表: del l

EffectiveJava讀書筆記- 第1條考慮用靜態工廠方法代替構造器

考慮靜態工廠方法代替構造器 靜態工廠方法相對於構造器的好處: 1. 靜態工廠方法有名字,相比構造器建立的物件更語義化 最好的例子就是併發庫中的Executors工具類了。 Executors中有多個建立執行緒池的方法: public static

Java學習筆記(5)3.面向物件之方法詳解

  方法是類或物件的行為特徵的抽象,方法是類或物件最重要的組成成分。但從功能上看,方法完全類似於傳統結構化程式設計裡的函式。值得指出的是,Java裡的方法不能獨立存在,所有的方法必須定義在類裡。方法在邏輯上要麼屬於類,要麼屬於物件。 1.方法的所屬性   永遠不要把方法當成

Retrofit2應對各種奇葩介面的方法

最近這一年半,實在是大開眼界了,面對各種奇葩的介面,在緊湊的開發週期下,沒有時間細想如何去面對,好在最近稍微清閒了,就把遇到的各