单表替换密码-实验报告

本文介绍了一个Python实现的单表替代加解密程序,包括加密和解密函数。作者在代码中遇到两个问题:1) `def main()`内容未显示,通过调整结构解决了;2) 加密和解密结果相同,由于未正确处理映射关系导致。作者尝试使用`zip`函数创建映射关系,但未能成功。
摘要由CSDN通过智能技术生成

申明:本文用于个人学习记录,若有不足还请各位指点


 要求


从键盘上接收操作,1加密,2解密,0退出,在没有选择退出之前一直可以循环操作。从键盘上接收输入的映射字符串然后给出每一个字母的映射,比如明文A->密文C这种,然后再根据操作输入明文/密文进行加解密,最后输出结果。

如果做了输入映射字符串的校验,比如看看有没有重复的字母是否够26个字母之类的,有加分。


输出范例



代码尝试一:


 参考代码:4.一般单表替代加解密_亡月之莹的博客-CSDN博客_单表代换密码的密钥空间https://blog.csdn.net/weixin_44679038/article/details/106906609

加以修改后:

# 字母表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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值