【问题标题】:Strings and Dictionaries in PythonPython中的字符串和字典
【发布时间】:2013-11-05 22:18:48
【问题描述】:

我想创建一个简单的密码。

alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key =   "XPMGTDHLYONZBWEARKJUFSCIQV"

def main():
  while True:
      plain = raw_input("text to be encoded: ")
      print encode(plain)

def encode(plain):
      length = len(plain)
      plain = plain.upper()
      for c in plain:
          encoded = _______
      return encoded 

输入:CAT,输出:MXU

我有这个模板,但最好的方法是什么?如果我必须使用字典,我该如何在给定的设置中使用它?

【问题讨论】:

    标签: python string dictionary encryption


    【解决方案1】:

    一种非常有效的方法是使用字符串的.translate() 方法:

    import string
    
    alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    key = "XPMGTDHLYONZBWEARKJUFSCIQV"
    
    cipher = string.maketrans(alpha, key)
    
    def encode(plaintext):
        return plaintext.translate(cipher)
    

    【讨论】:

      【解决方案2】:

      用你的两个字符串:

      alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      key =   "XPMGTDHLYONZBWEARKJUFSCIQV"
      

      使用zip() 创建字典:

      mydict = {k:v for k, v in zip(alpha, key)} # Or dict(zip(alpha, key))
      

      然后在您的encode() 函数中,您可以这样做:

      def encode(plain):
          return ''.join([mydict.get(i, i) for i in plain])
      

      [mydict.get(i, i) for i in plain] 相当于:

      newlist = []
      for i in plain:
          newlist.append(mydict.get(i, i))
      

      mydict.get(i, i)等价于mydict[i],但是如果没有键i,则返回i(第二个参数)(而不是引发KeyError)

      请注意,列表将返回类似['M', 'X', 'U'] 的内容,因此''.join() 会将其打印为'MXU'

      【讨论】:

        【解决方案3】:
        alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        key = "XPMGTDHLYONZBWEARKJUFSCIQV"
        
        inp = 'CAT'
        
        _d = {e[0]: e[1] for e in zip(alpha, key)}
        
        print _d
        
        
        print ''.join([_d[ele] for ele in inp if ele in _d])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-22
          • 1970-01-01
          • 2012-10-11
          • 2019-09-26
          • 2014-06-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多