Cesar's Cipher с использованием python, может немного помочь

Я пытаюсь сделать «Cesar's Cipher» при использовании python. Это то, что у меня есть до сих пор. Может ли кто-нибудь сказать мне, как это выглядит? Я иду в правильном направлении? Что мне не хватает? Когда я запускаю программу, чтобы сказать, например (josh is cool), я не получаю шифр в той же строке. Это выглядит так, когда я делаю main(3)

 m r v k l v f r r o 

Но он помещает каждое письмо в новую строку. Как я могу сделать это так, чтобы он был на одной линии?

 def main(k): if k<0 or k>231: print "complaint" raise SystemExit Input = raw_input("Please enter Plaintext to Cipher") for x in range(len(Input)): letter=Input[x] if letter.islower(): x=ord(letter) x=x+k if x>122: x=x-122+97 print chr(x), if letter.isupper(): x=ord(letter) x=x+k if x>90: x=x-90+65 print chr(x), 

8 Solutions collect form web for “Cesar's Cipher с использованием python, может немного помочь”

Мне нравится ответ kaizer.se, но я думаю, что могу упростить его, используя функцию string.maketrans :

 import string first = raw_input("Please enter Plaintext to Cipher: ") k = int(raw_input("Please enter the shift: ")) shifted_lowercase = ascii_lowercase[k:] + ascii_lowercase[:k] translation_table = maketrans(ascii_lowercase, shifted_lowercase) print first.translate(translation_table) 

Этот код должен работать очень хорошо. Он также обрабатывает произвольные смещения, включая отрицательные.

 phrase = raw_input("Please enter plaintext to Cipher: ") shift = int(raw_input("Please enter shift: ")) result = '' for char in phrase: x = ord(char) if char.isalpha(): x = x + shift offset = 65 if char.islower(): offset = 97 while x < offset: x += 26 while x > offset+25: x -= 26 result += chr(x) print result 

Другой способ сделать это, с немного другим шифрованием, просто поворачивать через все символы, верхние и нижние, или даже все ascii> 0x20.

 phrase = raw_input("Please enter plaintext to Cipher: ") shift = int(raw_input("Please enter shift: ")) result = '' for char in phrase: x = ord(char) x = x + shift while x < 32: x += 96 while x > 127: x -= 96 result += chr(x) print result 

Поместите запятую после каждого утверждения печати; он все равно будет помещать пробел между символами, но все они будут на одной линии. Если вам нужно распечатать их без пробелов, создайте их все в одну строку и напечатайте их в конце.

Вот другой способ показать, как мы можем справиться с этим очень чистым способом. Мы определяем входной алфавит и выходной алфавит, затем таблицу переводов и используем unicode.translate() для фактического шифрования.

 import string # Blatantly steal Lennart's UI design first = unicode(raw_input("Please enter Plaintext to Cipher: "), "UTF-8") k = int(raw_input("Please enter the shift: ")) in_alphabet = unicode(string.ascii_lowercase) out_alphabet = in_alphabet[k:] + in_alphabet[:k] translation_table = dict((ord(ic), oc) for ic, oc in zip(in_alphabet, out_alphabet)) print first.translate(translation_table) 

При необходимости он может быть продлен до прописных букв.

Запрет на синтаксические ошибки, кажется, работает.

Однако я взял на себя смелость удалить все дубликаты и очистить его:

 first = raw_input("Please enter Plaintext to Cipher: ") k = int(raw_input("Please enter the shift: ")) result = '' for second in first: x=ord(second) x=x+k if x>90 and x<122: x=x-26 elif x>122: x=x-26 result += chr(x) print first print result 

Кроме того, «первые» и «второй» являются действительно плохими именами для этих переменных. «Ввод» и «письмо», вероятно, лучше.

Я очень простой, 3-сдвиговое решение без Umlauts и так будет:

 def caesar(inputstring): shifted=string.lowercase[3:]+string.lowercase[:3] return "".join(shifted[string.lowercase.index(letter)] for letter in inputstring) 

и наоборот:

 def brutus(inputstring): shifted=string.lowercase[-3:]+string.lowercase[:-3] return "".join(shifted[string.lowercase.index(letter)] for letter in inputstring) 

используй это:

 caesar("xerxes") 

Для Python 3.3 попробуйте использовать функции ord (), chr () и .isalpha:

 m = input("What is your message?: ") s = int(input("What is the shift?: ")) for i in m: if i.isalpha(): if (ord(i)+s)>90: print(chr(ord(i)+s-26),end=""), elif chr(ord(i)+s-26)<65: print("The shift is invalid") else: print(chr(ord(i)+s),end=""), else: pass 

Вот онлайнер.

 >>> brutus=lambda message,cipher,direction:''.join([chr((ord(letter)+(cipher*direction))%256) for letter in message]) >>> encrypted= brutus('Message to be encrypted',14,1) #direction=1 for encryption >>> encrypted '[s\x81\x81ous.\x82}.ps.s|q\x80\x87~\x82sr' >>> brutus(encrypted,14,-1) # direction=-1 for decryption 'Message to be encrypted' >>> 
  • Python: subprocess.check_output ()
  • Как запросить BigQuery программно с Python без взаимодействия с конечным пользователем?
  • Подсказка типа Python без циклического импорта
  • TypeError: str не поддерживает буферный интерфейс
  • Как запустить приложение GAE на частном сервере?
  • Сообщение об ошибке AttributeError и lost exception
  • Параметр соответствия Python
  • Python: как подавить вывод os.system
  •  
    Interesting Posts for Van-Lav

    cx_freeze ImportError при выполнении файла

    Неверное количество аргументов, когда вызывающая функция из класса в Python

    Безопасность JSON против Pickle

    Перемещение 2D-линии в Numpy?

    Запрос с поисковым вызовом по курсору вызывает ошибку из-за ограничений для «IN filter» в методе cursor () … Какая должна быть альтернатива?

    Открытый объект S3 в виде строки с Boto3

    random.randint для не целого числа?

    IPython: как показать один и тот же сюжет в разных ячейках?

    Именованная группа регулярных выражений "(? P <имя_группы> regexp)": что означает "P"?

    Как создать клиент HTTPS с двойной аутентификацией в Python без (L) GPL libs?

    TurtleGraphics Python: Отбрасывая черепаху со стен?

    Каков наилучший способ совместного использования значения всеми генераторами, созданными функцией?

    MongoDB ищет каждый dict в списке в коллекции

    Что означает только звезда * в объявлении функции?

    Python Popen – wait vs communication vs CalledProcessError

    Python - лучший язык программирования в мире.