Python:对输入的单词进行字典序排序输出

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-05 14:59:04

题目描述:
对输入的单词进行字典序排序输出,字典序定义:

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!