В строке 7: Что произойдет, если я использовал другое число вместо 26, например% 28, и почему оно должно быть% 26? - PullRequest
0 голосов
/ 08 мая 2018
def encryption(message,skey):
    encryptedmessage=''
    for character in message:
        if character.isalpha()==True:
            if character==character.lower():
                newchar=ord(character)-97
                newchar=(newchar+skey)%26
                encryptedmessage+= chr(newchar +97)
            else:
                newchar=ord(character)-65
                newchar=(newchar+skey)%26
                encryptedmessage+= chr(newchar +65)
        else:
            encryptedmessage+= character
    return('Your Message is: {:s}'.format(encryptedmessage))

def decryption(message,skey):
    decryptedmessage=''
    for character in message:
        if character.isalpha()==True:
            if character==character.lower():
                newchar=ord(character)-97
                newchar=(newchar-skey)%26
                decryptedmessage+= chr(newchar +97)
            else:
                newchar=ord(character)-65
                newchar=(newchar-skey)%26
                decryptedmessage+= chr(newchar +65)
        else:
            decryptedmessage+= character
    return('Your Message is: {:s}'.format(decryptedmessage))

while True:
    u=str(input("To encrypt a messege enter 'E' or 'e',To dycrypt a message enter 'D' or 'd',To stop the program enter'quit': "))
    if u=='':
        print("")  
    elif (u in 'Ee'):
        Message1=str(input('Please enter your message: '))
        key=int(input('Please enter the shifting key: '))        
        print(encryption(Message1,key))
    elif (u in 'Dd'):
        Message1=str(input('Please enter your message: '))
        key=int(input('Please enter the shifting key: '))        
        print(decryption(Message1,key))        
    elif u=='quit':
        print('Program ended.')
        break;

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Линия newchar=(newchar-skey)%26 сдвигает букву на значение skey и возвращает по модулю 26.
Это было сделано для того, чтобы возвращаемое значение всегда было буквой английского алфавита. В ASCII они представлены в диапазонах от 65 до 90 для верхнего регистра и от 97 до 122 для нижнего (эти значения затем смещаются к диапазону 0-26 в строках 10 и 6 соответственно).

Изменение этого числа приведет к увеличению (или уменьшению) диапазона символов, которые могут использоваться сценарием, см .: Таблица ASCII

0 голосов
/ 08 мая 2018

Это не должно быть 26, просто так зашифрованный текст будет использовать (английские) буквенные символы для представления (английских) буквенных символов.
Если бы вы использовали 28, ваш зашифрованный текст будет использовать 26 символов из a ... z, '{', '|' диапазон для представления нижнего регистра и 26 символов из диапазона A ... Z, '[', '\' для верхнего регистра. Оба диапазона имеют 28 символов, но 26 из них используются только, поэтому в каждом будет 2-символьный пробел, его расположение зависит от фактического используемого вами «ключа». Это то, что вы можете просто попробовать, ничего плохого не случится *.

(* пока ваш исходный текст не содержит дополнительных символов, введенных в закодированном алфавите - однако, если он содержит, эти символы станут буквами после декодирования)

...