1

有人可以帮我弄清楚如何将加密句子的所有字母保持在同一行。该代码有效,虽然很长哈。

sentence = raw_input('Enter a sentence to be encrypted ')
shift = input('Enter a shift value ')

def createDict (shift):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ .,'
    alphaList=[]

    for letter in alphabet:
        alphaList.append(letter)
    alphaDict={}
    for letter in alphaList:
        valueLetterIndex = (alphaList.index(letter) + shift)%len(alphaList)
        valueLetter = alphaList[valueLetterIndex]
        alphaDict[letter] = valueLetter
    return alphaDict

def encryptText(sentence, shift):
    dict = createDict(shift)
    for letter in sentence:
        encryptC = dict [letter]
        print encryptC

print encryptText(sentence, shift)
4

2 回答 2

2

在列表中收集您的加密字符,然后打印连接结果:

def encryptText(sentence, shift):
    encryptionmap = createDict(shift)
    output = []
    for letter in sentence:
        output.append(encryptionmap[letter])
    print ''.join(output)

我重命名了您的dict变量以map避免掩盖内置dict类型。

您的createDict功能可以简化为:

def createDict (shift):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ .,'

    alphaDict = {}
    for pos, letter in enumerate(alphabet):
        valueLetterIndex = (pos + shift) % len(alphabet)
        valueLetter = alphabet[valueLetterIndex]
        alphaDict[letter] = valueLetter
    return alphaDict

因为字符串和列表一样是序列;无需先转换为列表。通过使用enumerate,我们省去了查找每个字母索引的麻烦。

于 2012-10-02T17:42:19.473 回答
0

这是一些较短的“pythonic”代码,因为您提到了长度。

def createDict (shift):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ .,'
    L = len(alphabet)

    return dict( (letter, alphabet[(i + shift) % L]) 
                    for i, letter in enumerate(alphabet))    

def encryptText(sentence, shift):
    D = createDict(shift)
    return ''.join(D[l] for l in sentence)
于 2012-10-02T17:56:14.983 回答