Я пытаюсь создать программу шифрования шифрования Baconian, которая читает ввод сообщения, поддельное сообщение и целочисленный ключ, а затем выводит поддельное сообщение, сдвинутое через программу шифрования шифров Цезаря, но с пробелами и символами Baconian cipher, представляющий жирный и обычный шрифт, или то, что я использую как «A» и «B».Как получить функцию для итерации по строке и заменить первый символ строки, второй и т. Д.?
Вот что у меня есть. Он в основном завершен, но я не могу заставить вывод циклически перемещаться по символам в строке, зашифрованной с помощью шифра Цезаря, вместо этого он просто использует первый символ. Я довольно уверен, что это что-то идиотское, но я не могу заставить его работать. Какие-либо предложения? :
def main():
myBaconianMessage = input('Please input Bacon cipher message.')
myBaconianMessage = myBaconianMessage.split()
myCaesarMessage = input('Please input fake message to be encrypted.')
myCaesarKey = int(input('Please input integer key.'))
clues_A = {'A':'AAAAA'}
clues_B = {'B':'AAAAB'}
clues = {'a':'AAAAA', 'b':'AAAAB', 'c':'AAABA', 'd':'AAABB', 'e':'AABAA',
'f':'AABAB', 'g':'AABBA', 'h':'AABBB', 'i':'ABAAA', 'j':'ABAAA',
'k':'ABAAB', 'l':'ABABA', 'm':'ABABB', 'n':'ABBAA', 'o':'ABBAB',
'p':'ABBBA', 'q':'ABBBB', 'r':'BAAAA', 's':'BAAAB', 't':'BAABA',
'u':'BAABB', 'v':'BAABB', 'w':'BABAA', 'x':'BABAB', 'y':'BABBA',
'z':'BABBB', 'C':'AAABA', 'D':'AAABB', 'E':'AABAA', 'F':'AABAB',
'G':'AABBA', 'H':'AABBB', 'I':'ABAAA', 'J':'ABAAA', 'K':'ABAAB',
'L':'ABABA', 'M':'ABABB', 'N':'ABBAA', 'O':'ABBAB', 'P':'ABBBA',
'Q':'ABBBB', 'R':'BAAAA', 'S':'BAAAB', 'T':'BAABA', 'U':'BAABB',
'V':'BAABB', 'W':'BABAA', 'X':'BABAB', 'Y':'BABBA', 'Z':'BABBB'}
def decrypter():
translated = myBaconianMessage[:]
for i, word in enumerate(translated):
for key in clues_A:
translated[i] = translated[i].replace(key, clues_A.get(key))
for key in clues_B:
translated[i] = translated[i].replace(key, clues_B.get(key))
for key in clues:
translated[i] = translated[i].replace(key, clues.get(key))
encryptedMessage = ''.join(translated)
return encryptedMessage
def caesarPortion():
myCaesarMode = 'encrypt'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
caesarMessage = ''
newCaesarMessage = myCaesarMessage.lower()
for symbol in newCaesarMessage:
if symbol in alphabet:
num = alphabet.find(symbol)
if myCaesarMode == 'encrypt':
num = num + myCaesarKey
elif myCaesarMode == 'decrypt':
num = num - myCaesarKey
if num >= len(alphabet):
num = num - len(alphabet)
elif num < 0:
num = num + len(alphabet)
caesarMessage = caesarMessage + alphabet[num]
else:
caesarMessage = caesarMessage + symbol
thisCaesarMessage = ''.join(caesarMessage)
return thisCaesarMessage
def doubleEncrypted():
caesar = caesarPortion()
listCaesar = list(caesar)
translate = decrypter()
listTranslate = translate.split()
for char in range(len(listCaesar) - 1):
i = 0
while i <= len(listCaesar):
i += 1
set = {'A':listCaesar[i], 'B':' '}
for symbol in listTranslate:
for x, word in enumerate(listTranslate):
for key in set:
listTranslate[x] = listTranslate[x].replace(key, ''.join(str(set.get(key))))
return listTranslate
if len(myBaconianMessage) >= 1:
print(''.join(doubleEncrypted()))
if __name__ == '__main__':
main()
Я знаю, что это что-то в doubleEncrypted(), что проблема, вероятно, петля во время или установить или диапазон, и я знаю, что код действительно не элегантно на всех, но я n00b и Я просто пытаюсь понять, как все работает. Я действительно очень благодарен за любой совет.
Привет, ваш отпечаток отпечатка правильный, все функции внутри основного? или если да, то почему вы пишете именно так. –
Да, похоже, это был единственный способ заставить main() продолжить выполнение caesarPortion() ... довольно уверен, что есть другой, правильный способ сделать это, но я не знаю, что это такое. – Elliot