实现一个凯撒密码的变种算法,对输入字符串进行加解密处理
把字母a-z分别循环对应为相距13个位置的字母n-m,即
原文字母: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
对应字母:n o p q r s t u v w x y z a b c d e f g h i j k l m
大写字母对应方式与小写字母类似,其他符号(含标点符号)不作处理
输入格式:
一个英文字符串
输出格式:
经过上述算法加密的字符串
输入样例:
The Zen of Python
输出样例:
Gur Mra bs Clguba
其实并不难
巧妙的使用
ord (‘A’) —-> 将字母转换对应的Asci码
chr ( 99 ) —- >将对应的asci码转换为字母
然后根据字母的范围求解:
a-m A-M 的范围的时候 ASCI码+13
N-Z n-Z 的范围的时候 ASCI码+12-26
然后转换成对应的字母即可
# input_str = "The Zen of Python"
# print(input_str)
input_str = input()
start1 = ord('A')
mid1 = ord('M')
end1 = ord('Z')
start2 = ord('a')
mid2 = ord('m')
end2 = ord('z')
dis = end2 - start2 # 26个字母的距离
print('{}-{}-{}-{}-{}-{}'.format(start1, mid1, end1, start2, mid2, end2))
print('{}-{}-{}-{}-{}-{}'.format(chr(start1), chr(mid1), chr(end1),
chr(start2), chr(mid2), chr(end2)))
for i in range(len(input_str)):
src = input_str[i]
dit = ""
cha_int = ord(src)
if (cha_int >= start2 and cha_int <= mid2) or (cha_int >= start1 and cha_int <= mid1):
# 当A-M a-m
dit = chr(cha_int + 13) # 直接加13即可
elif (cha_int > mid2 and cha_int <= end2) or (cha_int > mid1 and cha_int <= end1):
# 当 N-Z n-z 的时候
dit = chr(cha_int + 12 - dis) # 注意这里是 +12 然后-dis
else:
dit = chr(cha_int)
print(dit, end='')