2016-01-14 2 views
0

Im пытается создать шифр Vigenère, но я не могу найти способ реализовать функцию, которая игнорирует заполненные пробелы при вводе сообщения, а затем например, печатать окончательный: я вводил начальное сообщение: «python computing», затем я вводил ключ как «стек», который я ожидаю получить, если программа игнорирует пробелы в исходном сообщении: «isukzg wppannjqr», но вместо этого я получаю: isukzgwppannjqr». Кто-нибудь знает, как я могу это решить. Я рассмотрел использование ords, но я не нашел способ его реализовать. Код ниже:Как я могу заставить мои Vigenère Cipher игнорировать пробелы в исходном сообщении

def translateMessage(key, message, mode): 
    translated = "" 

    keyIndex = 0 
    key = key.upper() 

    for symbol in message: 
     xyz = alphabet.find(symbol.upper()) 
     if xyz != -1: 
      if mode == 'encrypt' or 'e': 
       xyz += alphabet.find(key[keyIndex]) + 1 
      elif mode == 'decrypt' or 'd': 
       xyz -= alphabet.find(key[keyIndex]) + 1 

      xyz %= len(alphabet) 

      if symbol.isupper(): 
       translated += alphabet[xyz] 
      elif symbol.islower(): 
       translated += alphabet[xyz].lower() 

      keyIndex += 1 
      if keyIndex == len(key): 
       keyIndex = 0 

    return translated 

if __name__ == '__main__': 
    fetch_user_inputs() 
+4

Вы явно игнорировать все символы, не найденные в '' alphabet' (хуг = alphabet.find (symbol.upper()) ',' if xyz! = -1: '), который включает игнорирование пробела. Почему вы ожидаете, что у вас будет свободное место на вашем выходе, если вы проигнорируете его добавление? –

+0

Как мне разрешить пробелы? Будет ли использовать x.isspace()? – user5670271

+1

'mode == 'decrypt' или 'd'' должен быть' mode ==' decrypt 'или mode ==' d''или' mode в ['decrypt', 'd'] '. Также рассмотрите '' decrypt'.startswith (mode) '. –

ответ

2

Вам просто нужно добавить заявление еще в translateMessage() добавить пространство к выходу, как этот

def translateMessage(key, message, mode): 
    translated = "" 

    keyIndex = 0 
    key = key.upper() 

    for symbol in message: 
     xyz = alphabet.find(symbol.upper()) 
     if xyz != -1: 
      if mode == 'encrypt' or 'e': 
       xyz += alphabet.find(key[keyIndex]) + 1 
      elif mode == 'decrypt' or 'd': 
       xyz -= alphabet.find(key[keyIndex]) + 1 

      xyz %= len(alphabet) 

      if symbol.isupper(): 
       translated += alphabet[xyz] 
      elif symbol.islower(): 
       translated += alphabet[xyz].lower() 

      keyIndex += 1 
      if keyIndex == len(key): 
       keyIndex = 0 
     else : translated += symbol #this will add space as it is 

    return translated 
+0

Спасибо, что сработали – user5670271

+0

Добро пожаловать – m7mdbadawy

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

  • Нет связанных вопросов^_^