为了账号安全,请及时绑定邮箱和手机立即绑定

Python中的Caesar Cipher函数

Python中的Caesar Cipher函数

湖上湖 2019-09-03 16:13:10
我正在尝试在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 cipherTextcaesar(plainText, shift)
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

我意识到这个答案并没有真正回答你的问题,但我认为无论如何它都是有用的。以下是使用字符串方法实现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”方式。



查看完整回答
反对 回复 2019-09-03
?
杨魅力

TA贡献1811条经验 获得超6个赞

你需要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


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 1253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信