Почему ROT 13 отображает g в пробелах? - PullRequest
0 голосов
/ 23 марта 2020

Я пишу код, основанный на алгоритме ROT13, но когда у меня появляется сообщение «ROT ALGORITHM», оно отображается как «EBGgNYTBEVGUZ». Я не уверен, является ли буква «g» неправильной, поскольку она должна быть пробелом между ROT и ALGORITHM?

def rot13(message,shift):
    result = "" 

    for i in range(len(message)):
        char = message[i]
        if (char.isupper()):
               result += chr((ord(char) + shift-13) % 26 + 65)
        else:
               result += chr((ord(char) + shift-13) % 26 + 97)
     return result

shift = 13
message = "ROT ALGORITHM"

print("Shift:", shift)    
print(message)
print(rot13(message,shift))

1 Ответ

0 голосов
/ 23 марта 2020

С ROT13 spe c, алгоритм должен воздействовать только на буквы, здесь пробел не равен upper() you go в разделе else

Вы можете обрабатывать 2 минуты использования: строчные и прописные, и просто используйте алфавит, чтобы повернуть

from string import ascii_lowercase, ascii_uppercase

def rot13(message, shift):
    result = ""
    for char in message:
        if char in ascii_uppercase:
            result += ascii_uppercase[(ascii_uppercase.index(char) + shift) % 26]
        elif char in ascii_lowercase:
            result += ascii_lowercase[(ascii_lowercase.index(char) + shift) % 26]
        else:
            result += char
    return result
...