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変数の名前を に変更しました。mapdict

関数は次の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 に答える