题目背景
某蒟蒻迷上了 “小书童”,有一天登陆时忘记密码了(他没绑定邮箱 or 手机),于是便把问题抛给了神犇你。
题目描述
蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动
n
n
n 位形成的。z
的下一个字母是 a
,如此循环。他现在找到了移动前的原文字符串及
n
n
n,请你求出密码。
输入格式
第一行: n n n。第二行:未移动前的一串字母。
输出格式
一行,是此蒟蒻的密码。
样例 #1
样例输入 #1
1
qwe
样例输出 #1
rxf
提示
字符串长度 ≤ 50 \le 50 ≤50。
解法一
n = int(input())
str1 = input()
# 法1
def find_password(n):
global str1
strs = "abcdefghijklmnopqrstuvwxyz"
str_ans = "" # 存储密码串
for s in str1: # 从原字符串开始遍历
i = strs.find(s) # 找到s在strs中的下标
if i != -1:
# 说明找到了该字母
x = i + n
if x <= len(strs)-1: # 注意这个地方应该是strs的长度减1,因为下标最多到len(strs)-1,否则strs[x]就会越界
str_ans += strs[x]
else:
str_ans += strs[x % len(strs)]
return str_ans
print(find_password(n))
解法二
使用ord函数,返回字母对应的ASCII数值
如果新的数值比z对应的ASCII数值还要大,则从a开始循环
n = int(input())
str1 = input()
psw = ''
for i in str1:
m = ord(i) + n
while m > ord('z'):
m = m - ord('z') + ord('a') - 1
psw = psw + chr(m)
print(psw)