前言
PTA程序设计类教学平台—Python作业二(循环结构程序设计)
小白进阶之路的学习与记录之------凯撒密码
题目:
编写一个凯撒密码加密程序,接收用户输入的文本和密钥k,对明文中的字母a-z和字母A-Z替换为其后第k个字母。
输入格式:
接收两行输入,第一行为待加密的明文,第二行为密钥k。
输出格式:
输出加密后的密文。
输入样例:
在这里给出一组输入。例如:
Hello World!
3
输出样例:
Khoor Zruog!
凯撒密码是什么?
原理:
通过把字母移动一定的位数来实现加解密
明文(加密前)中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文。
例如:
输入:abc
秘钥:3
输出:DEF
完整代码:
a = input()
b = int(input())
c = ''
for i in a:
if i.isalpha():
temp = ord(i)+b
if chr(temp).isalpha():
c += chr(temp)
else:
c += chr(temp-26)
else:
c += i
print(c)
代码解析:
第一步根据题目要求要接收两行输入,第一行为待加密的明文,第二行为密钥k
所以使用input函数接收输入文本
a = input()
b = int(input()) “用int把字符串改成数值型”
第二步我们需要先掌握字符串和ASCII码的转换函数
chr()函数:将十进制数转化为基础字符
chr(65)
‘A’
ord():将字符转化为十进制数
ord(A)
65
例如:将A转变成C
ord(A)+2
C
有了以上的基础我们就可以编写一串字符的转变了
使用for i in 来遍历一遍用户输入的字符串并将它们转换成想要字符
a = "abc4a"
b = int(3)
c = ""
for i in a:
temp = ord(i)+b
c += chr(temp)
print(c)
此时我们会发现一个问题:如果字符串里面有数字时也会跟随改变,所以应该在里面再加上一个判断语句
str.isalpha:检查字符串是否只包含字母字符。
a = "abc4a"
b = int(3)
c = ""
for i in a:
if i.isalpha():
temp = ord(i)+b
c += chr(temp)
else:
c += i
print(c)
解决上面的情况后会发现一个问题:如果字符串里面有字母太大的时候,位移后会变成别的符号,所以应该在里面再加上一个判断语句来确保字符串转换后还是不是字母
a = input()
b = int(input())
c = ''
for i in a:
if i.isalpha():
temp = ord(i)+b
if chr(temp).isalpha():
c += chr(temp)
else:
c += chr(temp-26)
else:
c += i
print(c)
到这后就完美解决了~
实现的方法有很多,本篇博客只是给新手提供一种思路。