题目描述:
对输入的单词进行字典序排序输出,字典序定义:
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-Zs]{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, s, S 依赖于当前环境 re.M 多行模式 re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符) re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库 re.X 为了增加可读性,忽略空格和' # '后面的注释 7. 正则表达式: ^ 匹配字符串的开头 $ 匹配字符串的末尾 [a-z] 匹配任何小写字母 [A-Z] 匹配任何大写字母 s 匹配任意空白字符,等价于 [ 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