当前位置: 首页 > 知识库问答 >
问题:

在Python 3.4中创建凯撒密码程序,但函数不起作用

徐君植
2023-03-14

目前,我正在创建一个凯撒密码,但它不能正常工作,有人可以帮助吗?代码将在下面。目前,如果程序是第一次运行(就像现在一样,不需要重新运行任何函数),它可以很好地工作,但是当getKey()函数重新运行时,它会返回一个错误。代码后面显示错误:

def runProgram():
    def choice():
        userChoice = input("Do you wish to Encrypt of Decrypt? Enter E or D: ").lower()
        if userChoice == "e":
            return userChoice
        elif userChoice == "d":
            return userChoice
        else:
            print("Invalid Response. Please try again.")
            choice()

    def getMessage():
        userMessage = input("Enter your message: ")
        return userMessage

    def getKey():
        try:
            userKey = int(input("Enter a key number (1-26): "))
        except:
            print("Invalid Option. Please try again.")
            getKey()
        else:
            if userKey < 1 or userKey > 26:
                print("Invalid Option. Please try again.")
                getKey()
            else:
                return userKey

    def getTranslated(userChoice, message, key):
        translated = ""
        if userChoice == "e":
            for character in message:
                num = ord(character)
                num += key
                translated += chr(num)

                savedFile = open('Encrypted.txt', 'w')
                savedFile.write(translated)
            savedFile.close()
            return translated
        else:
            for character in message:
                num = ord(character)
                num -= key
                translated += chr(num)
            return translated

    userChoice = choice() #Runs function for encrypt/decrypt selection. Saves choice made.
    message = getMessage() #Run function for user to enter message. Saves message.
    key = getKey() #Runs function for user to select key. Saves key choice.
    translatedMessage = getTranslated(userChoice, message, key) #Runs function to translate message, using the choice, message and key variables)
    print("\nTranslation complete: " + translatedMessage)
runProgram()

我尝试在getKey()函数中使用try、except和else命令创建错误证明。它将“尝试”查看输入是否是int值,如果是,则转到else,但如果不是int值,则重新运行函数。如果重新运行该函数,并且输入了int值,则给出以下错误:

这是它工作的一个例子:

Do you wish to Encrypt of Decrypt? Enter E or D: E

Enter your message: Hello
Enter a key number (1-26): 5

Translation complete: Mjqqt
Do you wish to Encrypt of Decrypt? Enter E or D: E

Enter your message: Hello
Enter a key number (1-26): H
Invalid Option. Please try again.
Enter a key number (1-26): 5

Traceback (most recent call last):

  File "C:\Python34\Encryptor2.py", line 54, in 
    runProgram()
  File "C:\Python34\Encryptor2.py", line 52, in runProgram
    translatedMessage = getTranslated(userChoice, message, key) #Runs function to translate message, using the choice, message and key variables)
  File "C:\Python34\Encryptor2.py", line 35, in getTranslated
    num += key

TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'

正如您所看到的,它也像我所希望的那样运行函数,但是在将键添加到字符的顺序时发生了错误。

共有1个答案

饶铭
2023-03-14

第一次调用getKey(),并附上注释:

key = getKey() #Runs function for user to select key. Saves key choice.

另一个你称之为:

        if userKey < 1 or userKey > 26:
            print("Invalid Option. Please try again.")
            getKey()

如果你用同样的注释来写,它会是:

            getKey() #Runs function for user to select key. Doesn't save key choice.
            return userKey
def getKey():
    prompt user for key
    try to convert to int and return the int
    if it fails, return None as an indication that getting the key went wrong.

key = None  #set some wrong placeholder
while (key is None) or (key < 1) or (key > 26):
    key = getKey()
 类似资料:
  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。

  • 问题内容: 我通过java进行了凯撒密码,它可以运行,但是在用户输入密钥后不对任何内容进行加密! 这是我的代码 跑: 问题答案: 使用效率不是很高…您可以对值进行整数运算以获得其索引。 我在代码中添加了注释以解释更多信息,但这就是我想出的。 输出应该是这样的

  • 第一次发帖到StackOverflow! 我是一个新的程序员,所以请耐心等待,因为我还没有跟上所有可能的函数,所以可能我只是目前缺少一个函数或方法的知识,可以快速解决我的问题。 感谢大家的帮助!

  • 我正在为我的计算机科学课做凯撒密码,我被卡住了。我已经想出了如何满足项目所需的一些元素,比如空格,当加密密钥设置为一个固定的数字时,它就可以工作了。然而,其中一个要求是,当你点击“Z”时,字母表会环绕,用户可以输入他们自己的加密密钥值。它还需要加密和解密消息。任何提示,任何人可以给我关于哪里我走错了,将不胜感激!以下是我目前所拥有的:(我是在Eclipse中制作的)

  • 首先,我是编程的新手,所以要温柔。而且,我一直在做这个任务,但没有任何结果。任务是创建一个凯撒密码程序,它加密或解密一个段落最多100个字符。实际上是两个独立的实验室。第一个实验是加密,然后第二个实验是解密。一旦我弄清楚了如何创建加密程序,解密程序应该很简单,因为我可以只进行语义更改来解密而不是加密。无论如何,这是我到目前为止的代码。它通过了他们给我们的5个测试中的4个,但出于某种原因,有一个测试