因此,我正在为麻省理工学院开放课件做第四题。我试着引用他们的解决方案,但由于某种原因它不在那里。他们贴错了答案。所以,这是我的问题。
它应该做的事情是:“这个函数接受字符串文本和元组移位列表。轮班中的元组表示移位的位置和移位本身。例如,元组(0, 2 )意味着开始的移位是字符串中的位置0,是凯撒移位的2。此外,移位是分层的。这意味着一组移位(0,2),(5,3)将首先将凯撒移位2应用于整个字符串,然后应用从字符串中的第6个字母开始的凯撒移位3。”
我就是这么写的:
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所以,我知道我告诉它要替换每次遍历循环时所引用的变量。我只是不知道该怎么安排,所以我没有这个问题。这是我的测试:
print apply_shifts("Do Androids Dream of Electric Sheep?", [(0,6), (3, 18), (12, 16)])
print 'JufYkaolfapxQdrnzmasmRyrpfdvpmEurrb?'第一个print语句是我的测试,第二个是输出应该是什么。有什么想法吗?
发布于 2014-03-07 23:07:27
在每次迭代中用非移位部分准备apply_shift的结果:
发布于 2014-03-07 23:15:34
这是我推荐使用递归函数的少数几个函数之一!
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))https://stackoverflow.com/questions/22262173
复制相似问题