题解 | #配置文件恢复#

配置文件恢复

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值
全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
2025-12-19 15:17
门头沟学院 Java
27届中九本,目前陆陆续续也面了很多家厂了,大厂面了字节、腾讯、虾皮还有几家中小厂,全是一面挂,只有字节进二面,二面也是秒挂了。知道自己能力很差,基本上大厂面试题只要问题不是八股文,出一些场景题或者真实情况下的一些问题就不太答得上来,我感觉大多数面试官看我项目都是学习性质的项目没有部署上线,也没有面对真实场景好像就对我的项目没啥兴趣了,项目也不太拷打,就问几个简单的八股或者直接另出一个系统设计题(比如字节、虾皮),有一家中厂问的八股啥的还让我介绍项目重点,我就介绍然后正常回答八股,他也不追问,但是莫名就是一面挂了,也想问问大家有什么星球上的项目推荐嘛。目前项目就是一个点评魔改加一个图库烂大街,昨天面的腾讯的面试官人很好,也给我指出了一些建议,希望我深耕一些技术的实际场景不要堆砌中间件还要加深计算机基础知识的学习。因为楼主不是科班的,数据结构因为学过,Hot100也刷烂了,算法只要不是很难问题应该不大,但是计算机网络操作系统完全没学过,面腾讯和虾皮的时候完全不会被拷打了,感觉这些知识也不好速成,加上最近要期末考试了,学习技术的时间也要压缩分担给课上突击一下期末。想先沉淀半个多月,度过期末再做个项目之后继续投,想问一下各位大佬有什么意见?真的有点迷茫,感觉还要学好多才能达到找实习的水平,如果一月还找不到就打算考研了,那些真实场景确实没有接触过考虑不到,但是我都没有工作经验感觉很难锻炼这方面,也想问问大家该怎么提高这种真实场景思维,谢谢各位佬。
纳斯卡可:哥们大厂不要乱面啊,这些都是有面评的。你下次再想去面试都不会给你约了
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务