題目描述:
對輸入的單詞進行字典序排序輸出,字典序定義:
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