大华技术股份有限公司测开笔试题分享

2022-10-24 08:06:57

某华股份测开笔试题

测试开发岗位社招笔试题:
为了防止被黑客取到客户输入的密码,某银行在登陆软件上以屏幕输入法输入密码,该输入法有9个按钮,每个按钮上有不多于3个字母,字母有先后顺序,按第一个字母需要用鼠标点击按钮1次,第二个字母需要点击2次,第三个字母需要点击3次。按键时,若连续两个字母都在同一个按钮上,则输入前一个字母后需要等待一小段时间。
假设,用户的输入习惯是:点击按钮需要1单位时间,等待一小段时间为2单位时间。某次登陆的时候,9个按钮上的字母分别为azc dwf gti jql mon pkr shu vex yb,
求该客户输入密码花费的时间?
输入:
该客户的密码都是小写字母[a~z],密码长度<=16。
输出:
该客户输入密码的时间
示例:
输入 ac---->输出 6
输入 zc---->输出 7
输入 zw---->输出 4
#核心算法:
花费时间t=按键时间t1+按键之间的等待时间t2;
算法步骤:
#1、根据"azc dwf gti jql mon pkr shu vex yb",生成二维列表,如[[“a”,“z”,“c”],[],。。。];
#3、根据二维列表,生成一个字典,类似于反射,key=按键的值,value=值的索引,索引从1开始。;
#4、遍历密码,计算t1,t1=密码字符串对应的values之和;
#5、遍历密码,计算t2,当前字符与下一个字符,同时在一个子列表中,t2+=2
#6、返回t1+t2。
算法翻译成代码如下:

def count_time(password=None):
    """统计输入密码花费时间的函数"""
    if not isinstance(password,str):
        return None
    if not password.islower():
        return None
    if len(password) >= 16:
        return None
    s = "azc dwf gti jql mon pkr shu vex yb"
    list_s = list(map(lambda x:list(x),s.split()))
    d = {}
    for i in list_s:
        for index,word in enumerate(i,1):   #索引自定义从1开始
            d[word] = index
    # 等价于{value:index for i in list_s for index,value in enumerate(i,1)}   
    t1 = 0                  # 初始化按键花费时间为0
    t2 = 0                  # 初始化按键之间等待时间为0
    for i in range(len(password) -1):   #遍历密码,只遍历到倒数第二个字符串
        t1 += d[password[i]]   #这里计算t1时,漏掉了密码的最后一个字符
        for j in range(len(list_s)):
            # 判断当前字符及下一个字符,在二维列表的同一子列表中,时间+2
            if password[i] in list_s[j]  and password[i+1] in list_s[j]:
                t2 += 2
    t1 += d[password[-1]]  #将最后一个字符的按键时间补上
    return t1+t2

if __name__ == "__main__":
    print(count_time("ac"))      #返回6      测试通过
    print(count_time("zc"))      #返回7      测试通过
    print(count_time("zw"))      #返回4      测试通过
    print(count_time("abcd"))    #返回7      测试通过
    print(count_time("fffffff")) #返回33     测试通过
    print(count_time())          #返回None   测试通过
    print(count_time(""))        #返回None   测试通过
  • 作者:小菜鸡也会有春天
  • 原文链接:https://blog.csdn.net/weixin_50640351/article/details/115427860
    更新时间:2022-10-24 08:06:57