申明:本文用于个人学习记录,若有不足还请各位指点
要求
从键盘上接收操作,1加密,2解密,0退出,在没有选择退出之前一直可以循环操作。从键盘上接收输入的映射字符串然后给出每一个字母的映射,比如明文A->密文C这种,然后再根据操作输入明文/密文进行加解密,最后输出结果。
如果做了输入映射字符串的校验,比如看看有没有重复的字母,是否够26个字母之类的,有加分。
输出范例
代码尝试一:
加以修改后:
# 字母表LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
# 替代表REPLACE = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba'
# 加密
def encryption():
print("您选择了代换加密!")
message = input("请输入明文:")
password = ''
for i in message:
if i in LETTERS:
num = LETTERS.find(i)
password += REPLACE[num]
else:
password += i
print("加密后的结果是:"+password)
# 解密
def decryption():
print("您选择了代换解密!")
password = input("请输入密文:")
message = ''
for j in password:
if j in REPLACE:
num = REPLACE.find(j)
message += LETTERS[num]
else:
message += j
print("解密后的结果是:"+message)
def main():
print("******1. 代换加密******")
print("******2. 代换解密******")
print("******0. 退出程序******")
while True:
choice = int(input("请输入您的选择:"))
if choice == 1:
encryption()
elif choice == 2:
decryption()
elif choice == 0:
print ("您已退出程序!")
break
else: print ("您的输入有误!请输入0~2进行选择!")
运行结果:
正常且成功
就是没有完全符合老师要求
存在问题1
待解决:上述代码运行之后,def main()中的内容没有显示。
将def main()中的内容加到while True 可成功运行显示。但我不懂为什么def main()不行
存在问题2
待解决:明文字母对应密文字母的循环映射不会
对此的参考代码:
a_list = ['name1', 'name2', 'name3']
b_list = [54, 18, 34]
for a, b in zip(a_list, b_list):
print(a, ':', b)
输出结果为:
依葫芦画瓢尝试:
def miyao():
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
replace = ''
replace=input("请输入密钥:")
for alphabet, replace in zip(alphabet, replace):
print('明文字母',alphabet, '->密文字母', replace)
完整代码如下:
# 字母表 LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
# 替代表 REPLACE = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba'
alphabet = ''
replace = ''
def miyao():
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
# replace = '' 这个有没有都不影响代码运行。。
replace=input("请输入密钥:")
for alphabet, replace in zip(alphabet, replace):
print('明文字母',alphabet, '->密文字母', replace)
# 加密
def encryption():
print("您选择了代换加密!")
mingwen = input("请输入明文:")
miwen = ''
miyao()
for i in mingwen:
if i in alphabet:
num = alphabet.find(i)
miwen += replace[num]
else:
miwen += i
print("加密后的结果是:"+miwen)
# 解密
def decryption():
print("您选择了代换解密!")
miwen = input("请输入密文:")
mingwen = ''
miyao()
for j in miwen:
if j in replace:
num = replace.find(j)
mingwen += alphabet[num]
else:
mingwen += j
print("解密后的结果是:"+mingwen)
while True:
print("******1. 代换加密******")
print("******2. 代换解密******")
print("******0. 退出程序******")
choice = int(input("请输入您的选择:"))
if choice == 1:
encryption()
elif choice == 2:
decryption()
elif choice == 0:
print ("您已退出程序!")
break
else: print ("您的输入有误!请输入0~2进行选择!")
运行结果(加解密不对)
存在问题3
待解决
加密和解密的结果一致!怎么回事!之前都不会这样!加了个miyao()咋就这样了呢
如果我省略了题头的
会报错:
加上两个之后,运行仍然出错:
当我改成了这样
可以成功运行,但是加解密结果是一样的o(╥﹏╥)o