猿问

Python中的Caesar Cipher函数

我正在尝试在Python中创建一个简单的Caesar Cipher函数,它根据用户的输入移动字母,并在最后创建一个最终的新字符串。唯一的问题是最终的密文只显示最后一个移位的字符,而不是一个包含所有移位字符的整个字符串。


这是我的代码:


plainText = raw_input("What is your plaintext? ")

shift = int(raw_input("What is your shift? "))


def caesar(plainText, shift): 


    for ch in plainText:

        if ch.isalpha():

            stayInAlphabet = ord(ch) + shift 

            if stayInAlphabet > ord('z'):

                stayInAlphabet -= 26

            finalLetter = chr(stayInAlphabet)

        cipherText = ""

        cipherText += finalLetter


    print "Your ciphertext is: ", cipherText


    return cipherText


caesar(plainText, shift)


湖上湖
浏览 1254回答 3
3回答

慕森卡

我意识到这个答案并没有真正回答你的问题,但我认为无论如何它都是有用的。以下是使用字符串方法实现caesar密码的另一种方法:def caesar(plaintext, shift):    alphabet = string.ascii_lowercase    shifted_alphabet = alphabet[shift:] + alphabet[:shift]    table = string.maketrans(alphabet, shifted_alphabet)    return plaintext.translate(table)实际上,由于字符串方法是在C中实现的,因此我们将看到此版本的性能提升。这就是我认为的“pythonic”方式。

杨魅力

你需要cipherText = ""在for循环开始之前移动。你每次循环都要重置它。def caesar(plainText, shift):   cipherText = ""  for ch in plainText:    if ch.isalpha():      stayInAlphabet = ord(ch) + shift       if stayInAlphabet > ord('z'):        stayInAlphabet -= 26      finalLetter = chr(stayInAlphabet)      cipherText += finalLetter  print "Your ciphertext is: ", cipherText  return cipherText
随时随地看视频慕课网APP

相关分类

Python
我要回答