牛客题目描述:
输入明文:YUANzhi1987 输出真正的密文:zvbo9441987
变化规则:
大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变化。密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。
主要思路:
两部分:第一部分给定字符串,将字符串中凡是小写字母,先将其变换成上述规则中的数字,其余不变。
第二部分:将第一部分获得的结果,作为第二个部分的输入考虑,我们只需要将大写字母的部分,进行移位,以及移位之后将其变换成小写字母
代码:
#先将字符串中的小写字母变成对应的数字
import sys
s = sys.stdin.readline().strip()
l = []
for i in s:
l.append(i)
for i in range(len(l)):
if l[i] in ['a','b','c']:
l[i] = '2'
if l[i] in ['d','e','f']:
l[i] = '3'
if l[i] in ['g', 'h', 'i']:
l[i] = '4'
if l[i] in ['j', 'k', 'l']:
l[i] = '5'
if l[i] in ['m', 'n', 'o']:
l[i] = '6'
if l[i] in ['p', 'q', 'r', 's']:
l[i] = '7'
if l[i] in ['t', 'u', 'v']:
l[i] = '8'
if l[i] in ['w', 'x', 'y', 'z']:
l[i] = '9'
oldstr = ''.join(l)
#将大写字母后移一位,并且变成小写
l2 = []
def hehe(zimu): #移位函数,参考凯撒密码移位两位
new_str=''
yiwei = 1
for i in zimu:
if i >= 'A' and i <= 'Z':
i = ord(i)
i = ((i + yiwei) - 65) % 26 + 65
i = chr(i)
new_str += i
return new_str
for i in range(len(oldstr)):
if oldstr[i] in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'
,'Q','R','S','T','U','V','W','X','Y','Z']:
res = hehe(oldstr[i])
l2.append(res.lower())
else:
l2.append(oldstr[i])
new_str = ''.join(l2)
print(new_str)