Python:對輸入的單詞進行字典序排序輸出


題目描述:
對輸入的單詞進行字典序排序輸出,字典序定義:

1.單詞中字母比較不區分大小寫,兩個單詞先以第一個字母作為排序的基准,
   如果第一個字母相同,就用第二個字母為基准,
   如果第二個字母相同就以第三個字母為基准。
   依此類推,如果到某個字母不相同,字母順序在前的那個單詞順序在前。 
2.當一個短單詞和一個長單詞的開頭部分都相同(即短單詞是長單詞從首字母開始的一部分),短單詞順序在前。 
3.字母大小寫不同的相同單詞,只輸出一次。

 輸入描述:不超過255個字符中,單詞間用空格進行分隔,為簡單起見,單詞不包含連字符,無其它標點符號。
 輸出描述:輸出排序后的單詞,單詞之間用空格隔開(最后不帶空格),重復的單詞只輸出一次。

 


解答:

import re


def zdx(sword):
    l = []
    temp = sword.split(" ")
    for i in temp:
        if i.lower() not in [j.lower() for j in l]:
            l.append(i)
    return " ".join(sorted(l, key=str.lower))



while True:
    s = input("請輸入用空格進行分隔的單詞:")
    if len(s) <= 255:
        p = re.compile(r"^[a-zA-Z\s]{0,255}$")  
        if p.match(s):
            print("輸入合格:" + s)
            test = zdx(s)
            print("按字典序排列輸出為:%s" % test)
            break
        else:
            print("輸入只能是字母或空格,請重新輸入!")
    else:
        print("輸入不得超過255個字符,請重新輸入!")

 

 

知識點梳理:

字典序知識點梳理:
1.    str.split([sep[,maxsplit]])
    說明:
        a.括號內的表示是可選內容,[,]逗號表示可選參數要用逗號和必須參數分開
        b.返回一個列表,其中包含以sep為分隔符對字符串進行划分得到的結果
        c.如果沒有指定參數sep,將以所有空白字符為分隔符進行划分
        d.還可以將最大划分次數限制為maxsplit
    
2.    str.lower()
    說明:將字符串中所有字母都轉換為小寫,並返回結果
    
     str.upper()
    說明:將字符串中所有字母都轉換為大寫,並返回結果    
    
3.    str.join(sequence)
    說明:將序列中的元素以指定的字符連接生成一個新的字符串,並返回結果
    
    
4.    [j.lower() for j in l]
    說明:
        a.這種寫法是python特有的列表生成式
        b.寫列表生成式時,要把生成的元素j.lower()放到前面,后面跟for循環,就可以創建出list
        c.for循環的后面還可以加上if判斷,也可以用多層for循環等

        
5.    input( )函數,接收任意任性輸入,將所有輸入默認為字符串處理,並返回字符串類型

6.    compile 函數
    說明:
        compile 函數用於編譯正則表達式,生成一個正則表達式(Pattern)對象,供 match() 和 search() 這兩個函數使用
    語法格式為:
        re.compile(pattern[, flags])
    參數:
        pattern : 一個字符串形式的正則表達式
        flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:
            re.I 忽略大小寫
            re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
            re.M 多行模式
            re.S 即為' . '並且包括換行符在內的任意字符(' . '不包括換行符)
            re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
            re.X 為了增加可讀性,忽略空格和' # '后面的注釋
          
          
7.    正則表達式:
    ^            匹配字符串的開頭
    $            匹配字符串的末尾
    [a-z]        匹配任何小寫字母
    [A-Z]        匹配任何大寫字母
    \s           匹配任意空白字符,等價於 [\t\n\r\f]
    re{ n, m}    匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式
    
    
8.    re.match函數
    說明:
        re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none
    函數語法:
        re.match(pattern, string, flags=0)
    函數參數說明:
        pattern     匹配的正則表達式
        string      要匹配的字符串
        flags       標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

    匹配成功re.match方法返回一個匹配的對象,否則返回None

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM