首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级凯撒密码加密

多级凯撒密码加密
EN

Stack Overflow用户
提问于 2014-03-07 22:46:50
回答 2查看 1K关注 0票数 1

因此,我正在为麻省理工学院开放课件做第四题。我试着引用他们的解决方案,但由于某种原因它不在那里。他们贴错了答案。所以,这是我的问题。

它应该做的事情是:“这个函数接受字符串文本和元组移位列表。轮班中的元组表示移位的位置和移位本身。例如,元组(0, 2 )意味着开始的移位是字符串中的位置0,是凯撒移位的2。此外,移位是分层的。这意味着一组移位(0,2),(5,3)将首先将凯撒移位2应用于整个字符串,然后应用从字符串中的第6个字母开始的凯撒移位3。”

我就是这么写的:

代码语言:javascript
复制
def apply_shifts(text, shifts):
    encryptedText = text
    for t in shifts:
        encryptedText = apply_shift(encryptedText[t[0]:len(encryptedText)], t[1])
        print encryptedText
    return encryptedText

所以,我知道我告诉它要替换每次遍历循环时所引用的变量。我只是不知道该怎么安排,所以我没有这个问题。这是我的测试:

代码语言:javascript
复制
print apply_shifts("Do Androids Dream of Electric Sheep?", [(0,6), (3, 18), (12, 16)])
print 'JufYkaolfapxQdrnzmasmRyrpfdvpmEurrb?'

第一个print语句是我的测试,第二个是输出应该是什么。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-07 23:07:27

在每次迭代中用非移位部分准备apply_shift的结果:

  • +运算符连接字符串
  • 您可以使用切片简短语法从开头的s:i或结尾si获取字符串的一个片段: encryptedText = encryptedText[:t] + apply_shift(encryptedText[t:],t1)
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 23:15:34

这是我推荐使用递归函数的少数几个函数之一!

代码语言:javascript
复制
import string

def apply_shift(text,shift):
    ciphertext = string.ascii_uppercase+string.ascii_lowercase
    cipherdict = {char:idx for idx,char in enumerate(string.ascii_uppercase+string.ascii_lowercase)}
    loop_amt = len(ciphertext)

    start,shift = shift
    text = list(text)
    for idx,char in enumerate(text[start:]):
        idx = start+idx
        if char not in cipherdict: continue
        else: text[idx] = ciphertext[(cipherdict[char]+shift)%loop_amt]
    return ''.join(text)

def apply_shifts(text,shifts):
    start,shift = shifts.pop(-1)
    if shifts:
        return apply_shifts(apply_shift(text,(start,shift)),shifts)
    else:
        return apply_shift(text,(start,shift))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22262173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档