题解 | #配置文件恢复#

配置文件恢复

http://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5

其实可以把len(m)==1和len(m)==2的情况都写到后面那一段代码里,读者自行发挥。。

'''
自己写的用正则匹配太low了,看了@中年美少女写的切片思想佩服了,另外不用字典免去了双层循环的做法,偷来粘在这里供大家欣赏。
'''
while True:
    try:
        m=input().strip().split()
        key=["reset","reset board","board add","board delete","reboot backplane","backplane abort"]
        value=["reset what","board fault","where to add","no board at all","impossible","install first"]
        #不建字典,用列表的方式避免了双层循环,如果实在要用列表,直接用dict(zip(list1,list2))合成字典都行.
        if len(m)<1 or len(m)>2:   #判断当输入为小于1个或者输入大于2个字符串时,不符合命令,就报未知命令
            print("unknown command")
        elif len(m)==1:   #当输入一个字符串
            if m[0]==key[0][:len(m[0])]:  #这里才是解决这个题的最佳思想,利用切片的思想来匹配
                print(value[0])
            else:
                print("unknown command")
        else:
            index=[]
            for i in range(1,len(key)): #这里把除reset外的所有原始命令遍历,所以要从1开始
                a=key[i].split() #将key列表中的一个命令分割成两部分
                if m[0]==a[0][:len(m[0])] and m[1]==a[1][:len(m[1])]:  #然后去匹配被分割的key,这里不可能有reset这种单独的,因为上面条件已经限制了。
                    index.append(i)  #符合条件就把这个位置入列表
            if len(index)!=1:
                print("unknown command")
            else:
                print(value[index[0]]) #输出对应的value值,注意必须是index[0]不能是index
    except:
        break

使用字典的方法:

import sys
for line in sys.stdin:
        m=line.strip().split()
        dic={'reset': 'reset what', 'reset board': 'board fault', 'board add': 'where to add', 'board delete': 'no board at all', 'reboot backplane': 'impossible', 'backplane abort': 'install first'}
        if len(m)<1 or len(m)>2:  #输入已被分割成m列表,判断m中元素个数,小于1个或大于2个都是不符合命令,就报未知命令
            print("unknown command")
        elif len(m)==1:   #当输入一个字符串时
            if m[0]=='reset'[0:len(m[0])]:  #这里才是解决这个题的最佳思想,利用切片的思想来匹配,用in不行!
                print(dic['reset'])
            else:
                print("unknown command")
        else:
            index=[] #每次处理新的命令,index要归零
            for key in dic.keys():
                if key=='reset': #这里有陷阱,要去除reset,否则后面分片会报错
                    continue
                else:
                    a=key.split() #将一个命令分割成两部分
                    # print(a) #测试
                    #然后去匹配被分割的key,这里不可能有reset这种单独的,因为上面条件已经限制了
                    if m[0]==a[0][0:len(m[0])] and m[1]==a[1][0:len(m[1])]:
                       index.append(key)  #符合条件就把这个key入列表
            if len(index)!=1:
                print("unknown command")
            else:
                print(dic[index[0]]) #输出对应的value值
全部评论

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
点赞 评论 收藏
分享
4 1 评论
分享
牛客网
牛客企业服务