2014-12-04 2 views
2

В настоящее время я пытаюсь зашифровать ключевое слово. Я взял пользовательский ввод и ввод ключевого слова и получил значения каждой буквы в алфавите. (a = 1, b = 2, c = 3 и т. д.) Теперь мне нужно добавить эти два значения вместе. Поскольку я использовал цикл while в своем коде, чтобы взять каждую букву и принять значение, я не могу взять каждое отдельное значение и добавить его. Может ли кто-нибудь дать мне точку в правильном направлении о том, как добавить каждое значение? Спасибо.Добавление двух буквенных значений вместе?

def keyEnc(): 
    alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 
    gcselist = ['g','c','s','e'] 
    code = input("Please enter the word you would like to encrypt: ") 
    print("User's word is " + code) 
    print("The number of letters in the code is: ") 
    print(len(code)) 
    x=0 
    while x < len(code): 
     currLetterA=code[x] 
     print("Letter: ",currLetterA) 
     myii=alpha.index(currLetterA) 
     myii=myii+1 
     print("The Value Is: ",myii) 
     x=x+1 
############################################################################################# 
    key = input("Please enter the keyword you would like to encrypt your word by: ") 
    x=0 
    while x < len(key): 
     currLetter=key[x] 
     print("Letter: ",currLetter) 
     myi=alpha.index(currLetter) 
     myi=myi+1 
     print("The Value Is: ",myi) 
     finWord = myi+myii 
     print(finWord) 
     x=x+1 
keyEnc() 
+0

Обратите внимание, что это не является обратимым шифра! В любом случае, вероятно, лучше использовать 'ord', чем пытаться индексировать каждое письмо самостоятельно. –

+0

Я довольно новичок в python, но я думал, могу ли я получить значения каждого из них, тогда я могу просто finWord = (myi + myii + 1) – user3411623

+0

Я буду использовать int с помощью функции ord. Спасибо за подсказку Адама. – user3411623

ответ

0

Это звучит, как вы пытаетесь сделать это:

cleartext: somewords = 19 15 13 5 23 15 18 4 19 
key:  something = 19 15 13 5 20 8 9 14 7 
         ++++++++++++++++++++++++++++ 
ciphertext:    38 30 26 10 43 23 27 18 26 

ли это правильно? В этом случае вам понадобится список номеров, а не только один вывод. Также обратите внимание, что если ваш текст и ключ не имеют одинаковой длины, это не сработает. Представьте себе:

cleartext: somewords = 19 15 13 5 23 15 18 4 19 
key:  banana = 2 1 14 1 14 1 
         ++++++++++++++++++++++++++++ 
ciphertext:    21 16 27 6 37 16 ? ? ? 

или

cleartext: somewords  = 19 15 13 5 23 15 18 4 19 
key:  bananahammock = 2 1 14 1 14 1 8 1 13 13 15 3 11 
          ++++++++++++++++++++++++++++++++++++++++ 
ciphertext:     21 16 27 6 37 16 36 5 32 ? ? ? ? 

Однако в этих условиях, похоже, что вы хотите вместо этого:

def key_enc(): 
    cleartext_word = input("Enter the word you want to encrypt: ") 
    key = input("Enter the word you want as a key: ") 
    if len(cleartext_word) != len(key): 
     # I'm not sure how to handle this, so that's your design decision 
     # but possibly just: 
     raise ValueError("Clear text and key must have equal length") 
    result = list() 
    def lookup_letter(letter): 
     """Helper function to return a proper index. 

     a = 1, b = 2, c = 3, ...""" 

     return ord(letter) - 96 

    for letter, key_letter in zip(cleartext_word, key): 
     result.append(lookup_letter(letter) + lookup_letter(key_letter)) 

    return result 

Использование zip здесь является ключевым, что вы» нет. Вам не ТЕХНИЧЕСКИ нужно сделать это, вы могли бы просто использовать while петлю, как вы делаете в вашем коде, выполнив:

def key_enc(): 
    # prompt for the cleartext_word and key as above 
    result = [] 
    i = 0 
    while i < len(cleartext_word): # which MUST BE EQUAL TO len(key) 
     clear_letter = cleartext_word[i] 
     key_letter = key[i] 
     result_letter = ord(clear_letter)-96 + ord(key_letter)-96 
     result.append(result_letter) 

Но это труднее читать именно так.

И говоря о трудно читать, по существу, вся ваша функция:

result = list(map(lambda letters: sum(map(ord,letters))-192, zip(cleartext_word, key_word))) 
# YUCK!!! 
+0

Ok bud. Спасибо за помощь, я действительно ценю это! – user3411623

Смежные вопросы