华为OD机试题目享(0517)
第三道题目:九宫格按键输入
九宫格按键输入,输出显示内容,有英文和数字两种模式:默认是数字模式,当输入以#开头是切换为字母模式,当输入中包含“/”时,则循环中断,且“/”仅适用于字母模式,对数字模式无效。字符对应关系如图。
要求输入一串按键,输出屏幕显示内容。
输入描述:
输入范围为数字 0~9 和字符 ‘#’、’/’,输出屏幕显示,例如:在数字模式下,输入 1234,显示 1234
在英文模式下,输入 1234,显示,adg
输出描述:
#用于切换模式,默认是数字模式,执行 # 后切换为英文模式;
/表示延迟,例如在英文模式下,输入 22/222,显示为 bc;
英文模式下,多次按同一键,例如输入 22222,显示为 b;
示例1:输入
2222/22
输出:
222222
示例2:输入
#2222/22
输出:
ab
示例3:
输入:
#222233
输出:
ae
代码段:
————————————————import sys def func(s): mode, res = None, '' if '#' in s: mode = s[0] num = s[1:] else: num = s dic = {1:',.', 2:'abc', 3:'def', 4:'ghi', 5:'jkl', 6:'mno', 7:'pqrs', 8:'tuv', 9:'wxyz', 0:' '} if mode is None: if '/' in num: res = num.replace('/', '') else: res = num else: d = {} if '/' in num: spt = num.split('/') ch1, ch2 = spt[0], spt[1] for key in ch1: d[key] = d.get(key, 0) + 1 for key in d: idx = d[key] % len(dic[int(key)]) - 1 res += dic[int(key)][idx] d.clear() for key in ch2: d[key] = d.get(key, 0) + 1 for key in d: idx = d[key] % len(dic[int(key)]) - 1 res += dic[int(key)][idx] else: for key in num: d[key] = d.get(key, 0) + 1 for key in d: idx = d[key] % len(dic[int(key)]) - 1 res += dic[int(key)][idx] return res if __name__ == '__main__': # s = sys.stdin.readline().strip() # s = '#2222/22' # ab # s = '#222233' # ae # s = '#222/233' # cae # s = '2222/22' # ab s = '1222222' # 1222222 print(func(s))
版权声明:本文为CSDN博主「_JeanW_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_70506990/article/details/124832014
#华为OD机考##笔试题目##Python#