【问题标题】:Substitution Encryption (ProblemSetQuestion) in PythonPython中的替换加密(ProblemSetQuestion)
【发布时间】:2012-11-21 19:43:14
【问题描述】:

Winkleson 在这里提出了另一个关于http://singpath.appspot.com 问题集的问题。我是一名初学者程序员,我希望尽可能得到一些指导。无论如何,我在这里提出了这个问题,我不确定如何通过比较 EVERY.SINGLE.LETTER 来避免浪费时间。在 if 语句中。所以我希望有任何提示/解决方案来减少这个问题的编码。我会发布我到目前为止所拥有的(不多)。提前致谢!

问题:


替代加密

创建一个可以用来加密的程序 并解密一串字母。该函数应输入一个 要编码的字符串和一串给出新顺序的字母 字母。第二个字符串包含字母表的所有字符 但以新的顺序。这个顺序告诉交换哪些字母。首先 第二个字符串中的字母应替换第一个字符串中的所有 a 细绳。第二个字符串的第三个字母应该替换所有 c 在第一个字符串中。您的解决方案应该全部小写。是 注意标点符号和数字(这些不应该改变)。

示例(调用):

>>> encrypt('hello banana','qwertyuiopasdfghjklzxcvbnm')
'itssg wqfqfq'

>>> encrypt('itssg wqfqfq','kxvmcnophqrszyijadlegwbuft')
'hello banana'

>>> encrypt('gftw xohk xzaaog vk xrzxnkh','nxqlzhtdvfepmkoywrjiubscga')
'this code cannot be cracked'

>>> encrypt('mkhzbc id hzw pwdh vtcgxtgw ube fbicg ozth kbx tew fbicg','monsrdgticyxpzwbqvjafleukh')
'python is the best language for doing what you are doing'

我的代码:


def encrypt(s, realph):
    
    alph = 'abcdefghijklmnopqrstuvwxyz' #Regular Alphabet
    news = '' #The decoded string   
        
    #All comparison(s) between realph and alph    
        
    for i in range(len(realalph)):        
        
        #Comparison Statement here too.
        news = ''.join(alph) 
    
    return news

如您所见,这显然等同于失败的伪代码......一如既往,任何建议和/或解决方案都会令人惊叹!提前致谢! - 温克尔森

【问题讨论】:

  • 只是一个提示,如果你不知道的话。如果您愿意,您不需要自己输入正确的有序字母,您可以先输入import string,然后再输入alph = string.lowercase
  • @NiclasNilsson 比像小丑一样大声背诵字母要好 XD 但是命令不是 alph = string.ascii_lowercase 吗?我忘了这一切:P 感谢您的提示/提醒!
  • 两者都有效。取决于您是否希望它具有区域设置意识。 ascii_lowercase 永远不会改变,因此可能更适合此目的。
  • @NiclasNilsson 好的,那是我不知道的事情:P 感谢分享!

标签: python encryption python-3.x


【解决方案1】:

这是一个翻译解决方案。

from string import maketrans

def encrypt(s, scheme):
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    translation = maketrans(alphabet, scheme)
    return s.translate(translation)

字符串有一个内置的translate 方法,允许您将单个字母与其他字母切换。令人难以置信的活泼,而且非常有用。

【讨论】:

  • 谢谢。过去知道那个片段会非常有用。这只是我喜欢 StackOverflow 的众多原因之一。您总是可以从简单的问题中学习新的解决方案或代码。我想我应该更多地研究 Python 的 Std 库......无论如何,谢谢你的这个解决方案。我很想看到其他方法来解决这个问题,但这似乎很简单。再次感谢!
  • 我只是想到了一些事情......你能不能用大写和小写字符的组合来做同样的事情,方法是将它们全部放在字母表中,并且方案同时保存两个版本的字母表(位置不同)当然)。我不明白为什么它不会:)
【解决方案2】:

我会创建一个地图['src_letter'] => 'dst_letter'。还有翻译:Replace characters in string from dictionary mapping

【讨论】:

  • 有趣,我正在考虑使用 dicts(键、值对),但我对它们不太熟悉:P 感谢您提供链接,我会检查一下!
【解决方案3】:

我会这样做:

  1. 遍历字符串中的每个字符。
  2. 在您的字母表中查找该字符的索引。保存它。
  3. 从新字母表中取出同一索引中的字符。
  4. 将其附加到您的 news 字符串中。

伪代码:

output = ''

for character in your_string:
    index = index of character in original_alphabet
    new_character = new_alphabet[character]

    add new_character to output

【讨论】:

  • 是的,这就是基本的游戏计划......关于如何以pythonicly方式完成它的任何想法?我最终会得到每个字符一个 if 语句或一个非常长的联合(或运算符) if 语句。我应该将它放入每个字符的循环中还是...?感谢您的意见!
  • 谢谢,这对我来说更有意义:)
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
相关资源
最近更新 更多