Как проект из забавы, я хотел создать простой двоичный кодер с Python. После этого очень хорошо, я перешел к обновлению в качестве кодировщика и декодера ... и внезапно он не работает (только второй вариант, первый вариант все еще работает нормально).Как декодировать двоичный код в текст?
Я получаю ошибку, когда я хочу, чтобы расшифровать, например '0100 0001'
, которая выступает за "A"
, заключается в следующем:
Your message to decode: 0100 0010
KeyError Traceback (most recent call last)
C:\Users\marco\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.4.0.1938.win-x86\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
195 else:
196 filename = fname
--> 197 exec compile(scripttext, filename, 'exec') in glob, loc
198 else:
199 def execfile(fname, *where):
C:\Users\marco\Dropbox\1_TUDelft\4Q\AE1205 Python\my own codes\binary encoder.py in <module>()
41 messageDecode = raw_input("Your message to decode: ")
42 for character in messageDecode:
---> 43 print inverseBINARY[character],
KeyError: '0'
Я подозреваю, что это последняя команда, команда print
, однако я не знаю, как исправить это ... Любые предложения?
Вот код:
BINARY = {"A":"0100 0001",
"B":"0100 0010",
"C":"0100 0011",
"D":"0100 0100",
"E":"0100 0101",
"F":"0100 0110",
"G":"0100 0111",
"H":"0100 1000",
"I":"0100 1001",
"J":"0100 1010",
"K":"0100 1011",
"L":"0100 1100",
"M":"0100 1101",
"N":"0100 1110",
"O":"0100 1111",
"P":"0101 0000",
"Q":"0101 0001",
"R":"0101 0010",
"S":"0101 0011",
"T":"0101 0100",
"U":"0101 0101",
"V":"0101 0110",
"W":"0101 0111",
"X":"0101 1000",
"Y":"0101 1001",
"Z":"0101 1010",
" ":"0100 0000",
".":"0010 1110",
",":"0010 1100",
"?":"0011 1111"}
inverseBINARY = {v:k for k,v in BINARY.items()}
question = input("Do you wish to encode(press 1) or decode(press 2) into/from binary?")
if question == 1:
messageEncode = raw_input("Your message to encode: ")
for character in messageEncode:
print BINARY[character.upper()],
if question == 2:
messageDecode = raw_input("Your message to decode: ")
for character in messageDecode:
print inverseBINARY[character],
предположительно при вводе * «сообщение для декодирования» * вы делаете так, как, например, '' 0100 1000 0100 1001 "' - итерация по этому вопросу даст индивидуальные '' 1' '', '' '' '' '' '' '' и **, а не ** 9 символов в вашем словаре. – jonrsharpe
ах! @jonrsharpe, который имел бы смысл. Я предполагаю, что тогда мне нужно собрать сначала девять символов, а затем перевести их как группу ... Может быть, предложение о том, как я буду заниматься этим? – user3604362
Я бы начал с 'str.split'. Однако тот факт, что символ * внутри * каждой группы совпадает с символом * между * каждой группой, немного усложнит ситуацию. – jonrsharpe