2

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

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

4

3 回答 3

4

这是一个翻译解决方案。

from string import maketrans

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

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

于 2012-11-21T20:01:50.830 回答
1

这是我的做法:

  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
于 2012-11-21T19:46:42.317 回答
1

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

于 2012-11-21T19:48:01.907 回答