我的程序运行,但它不输出加密的消息

2024-07-05 09:05:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我写的代码是一个Vignere密码加密程序,它使用关键字来加密消息。我写了这段代码,当我完成后,我运行它,它做了所有它应该做的,只是输出加密的消息。请参阅下面的代码,我们将非常感谢您的帮助:

    ans = False
print(""" *****Hello. Welcome to the Vignère Cipher Encryption Program*****
    ***This program uses a keyword that is repeated until it
    matches the same lenght of the message and then adds its
    numerical value to the numerical value of the message and
    outputs the encrypted message in alpha. 
    Please press:
    E to Encrypt
    D to Decrypt
    or  double tap enter to quit.
    """)

ans=input("What would you like to do now???")

if ans == "E":
    plaintext = input("Please enter a message to be encrypted: ").upper()
    keyword = input("Please enter a keyword to be used to encrypt a message (alpha only): ").upper()
    ciphered = " "
    for i in range (len(plaintext)):
        char = plaintext[i]
        alphakeywordvalue = ord(keyword[i%len(keyword)]) - ord("A")+1
        if char.isupper():
            if ans == "E" :
                value = ord(char) + alphakeywordvalue 
                if value > ord("Z"): 
                    value -= 26
                    print ("Your encrypted text is:", ciphered)


elif ans == "D":
    plaintext = input("Please enter a message to be dencrypted: ").upper()
    keyword = input("Please enter a keyword to be used to dencrypt a message (alpha only(make sure that it is the same keyword used to encrypt the message)): ").upper()
    ciphered = " "
    for i in range (len(plaintext)):
        char = plaintext[i]
        alphakeywordvalue = ord(keyword[i%len(keyword)]) - ord("A")+1
        if char.isupper():
            if ans == "D" :
                value = ord(char) - alphakeywordvalue
                if value <ord("A"):
                    value += 26
                ciphered += chr(value)
                print ("Your decrypted text is:", ciphered)

Tags: thetomessageinputifisvaluekeyword
2条回答

这不是一种好的代码编写风格。很破旧,很难看。如果需要,您应该为各个部分创建方法,并创建一个单独的main()类的部分来与用户交互。发动机应该隐藏起来,车身应该抛光。把它们分开。是的,不要重复你自己

好吧,这是我重新编写的代码。重要部分包含注释。错误在后面解释。。在

def encrypt(message, key, direction='E'):
    # Look here. There are three arguments. Third one takes 'E' to encrypt
    # and anything else to decrypt. You can modify to handle more cases

    ciphered = "" # Initialize. You did it almost well
    for i in range (len(message)):
        char = message[i]
        alphakeywordvalue = ord(key[i%len(key)]) - ord("A")+1 # Perfect. We took the key
        if direction=='E': # To encrypt
            value = ord(char) + alphakeywordvalue 
        else: # To decrypt
            value = ord(char) - alphakeywordvalue 
        ciphered += chr(value) # chr is the inverse of ord. It gets the character back
        # You missed this line
    return ciphered

就这样。现在您可以编写与用户或其他模块交互的代码。这是一个样品测试:-在

^{pr2}$

输出如下: enter image description here

现在您可以编辑这个方法来处理更多的情况,如超出ascii范围的字符等

它如何打印加密的消息,加密例程从不从空字符串ciphered更改。在

    if ans == "E":
        plaintext = input("Please enter a message to be encrypted: ").upper()
        keyword = input("Please enter a keyword to be used to encrypt a message (alpha only): ").upper()
1)->    ciphered = " "
        for i in range (len(plaintext)):
            char = plaintext[i]
            alphakeywordvalue = ord(keyword[i%len(keyword)]) - ord("A")+1
2)->        if char.isupper():
3)->            if ans == "E" :
                    value = ord(char) + alphakeywordvalue 
                    if value > ord("Z"): 
                        value -= 26
4)->                    print ("Your encrypted text is:", ciphered)
  1. ciphered设置为空字符串,不会更改。在
  2. 您总是知道char是upper,因为您将所有的明文设置为upper()
  3. 你知道ans == "E"因为你之前测试过它
  4. 这个print()目前是缩进的,它每次通过循环都会尝试打印

相关问题 更多 >