其他分享
首页 > 其他分享> > 某华技术股份有限公司测开笔试题分享

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

作者:互联网

某华股份测开笔试题

测试开发岗位社招笔试题:
为了防止被黑客取到客户输入的密码,某银行在登陆软件上以屏幕输入法输入密码,
该输入法有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):
        print("密码格式非法")
        return None
    if not password.islower():
        print("密码非法")
        return None
    if len(password) >=16:
        print("密码超长")
        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,value in enumerate(i,1):   #索引默认从1开始
            d[value]=index
    # 等价于{value:index for i in list_s for index,value in enumerate(i,1)}   
    t1=0                  # 初始化按键花费时间为0
    t2=0                  # 初始化按键之间等待时间为0
    for i in password:    #  计算t1
        for k,v in d.items():
            if i==k:
                t1+=v
    for i in range(len(password)-1):   #遍历密码,注意只需要遍历到倒数第二个字符串
        for j in range(len(list_s)):
            # 判断第i个及i+1个同时在二维列表的同一元素中,时间+2
            if password[i] in list_s[j]  and password[i+1] in list_s[j]:
                t2+=2
    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   测试通过

标签:试题,测试通过,list,t1,密码,开笔,print,password,某华
来源: https://blog.csdn.net/weixin_50640351/article/details/115427860