0

我正在做一个 python 练习并编写我的第一个函数,我必须在其中返回一个值......但是没有返回该值。我正在使用 Python 3.2.3 通过 OS X 上的终端运行 .py 文件。最后一行应该与第四行不同,但它们的输出是一样的。但是,如果我在函数本身中打印 textMessage ,它会打印得很好。我错过了什么?

def caesarEncipher(textMessage, shift):
    listOfChars = list(textMessage)
    length = len(listOfChars)
    count = 0
    while length != count:
        listOfChars[count] = chr(ord(listOfChars[count])+shift)
        count = count + 1
    textMessage = ''.join(listOfChars)
    return (textMessage)

print ("Please enter your message to cipher:")
textMessage = raw_input()
print ("Please enter the value you wish to shift your message by:") 
shift = int(input())
print "Your original message was:"
print textMessage
caesarEncipher(textMessage, shift)
print "Your message adjusted by a shift of", shift, "is:"
print textMessage
4

4 回答 4

8

您需要保存函数返回的值caesarEncipher()

所以代替这个

caesarEncipher(textMessage, shift)

有:

textMessage = caesarEncipher(textMessage, shift)

现在该方法正在返回一个值,但它没有被保存,因此无法在您的后续print语句中显示。一旦将函数的返回值分配给变量(在这种情况下textMessage),您就可以使用它。

于 2012-07-14T17:52:43.463 回答
6

确实如此。您必须将其捕获到变量中。

textMessage = caesarEncipher(textMessage, shift)

无论如何,凯撒不会这样加密它。如果您shift将字母的值设为Z正数,则您已经超出了字母表并返回了一些其他字符。

您可以使用此方法(仅适用于小写字符):

import string

def caesarEncipher(textMessage, shift):
    src_chars = string.lowercase
    dst_chars = string.lowercase[shift:] + string.lowercase[:shift]
    return textMessage.translate(string.maketrans(src_chars, dst_chars))
于 2012-07-14T17:52:38.960 回答
1

你返回值。但你什么也不做。调用函数时需要存储返回值:

textMessage = caesatEncipher(textMessage, shift)
于 2012-07-14T17:52:53.307 回答
1

您永远不会存储ceaserEncipher. 要存储该值,请执行以下操作:

new_text_message=ceasarEncipher(textMessage,shift)
于 2012-07-14T17:53:13.220 回答