2017-03-12 5 views
1

난으로 편지를 디코딩이 기능을 가지고 난 그렇게 단어 디코딩,이 작업을 얻기 위해 노력하고 키파이썬에서 Ascii 디코딩 기능, 무엇이 잘못 되었나요?

def decode_char(n, key): 
    adj = ord('a') if n.islower() else ord('A') 
    return chr(adj + (ord(n)-adj-int(key))%26) 

주어진

def decode_block(word,key): 
    letters = list(word) 
    keys = list(key) 
    decoded = [] 
    for letter, digit in zip(letters, keys): 
     decoded.append(decode_char(letter, digit)) 
    return "".join(decoded) 

때 입력이

print(decode_char('bddffhhj', '12121212')) 

이 오류 메시지가 표시됩니다.

TypeError: ord() expected a character, but string of length 8 found 
,210

나는 decode_char에서 ord(n)가 문자를 recieveing되지 않는 이유를 알아낼 수 없습니다

abcdefgh 

을 얻을 필요가?

단어를 목록으로 나눕니까? 열쇠의 자릿수로 압축 했나요?

그냥 학생은 너무 햄

사람을 이동하지 마십시오?

+0

의미? 코드의 예상 출력과 설명은 여기서 많은 도움이됩니다. 편집 : 그리고 "그것은 작동하지 않습니다"미래의 질문에 말하지 말아요) –

+1

@ GerryHernandez 위로 편집 됨 –

+0

Incase 당신이 찾고있는 : [Caesar Cipher] (http://stackoverflow.com/questions/8886947/caesar-cipher- function-in-python) – bhansa

답변

0

문제는 decode_char입니다. 추가하는 대신 key 정수를 뺀 것을 제외하고는 거의 code_char과 같아야합니다. 다음은 수리 된 버전입니다. 당신이 encryptcode_block을 왜

def decode_char(n, key): 
    adj = ord('a') if n.islower() else ord('A') 
    return chr(adj + (ord(n)-adj-int(key))%26) 

는 이해가 안 돼요. encrypt을 제거하고 code_blockencrypt으로 바꿀 수 있습니다. decrypt/decode_block도 마찬가지입니다.

0
def code_char(c, key): 
    return chr(ord(c)+key%26) 
code_char('a',3) 

def decode_char(c,key): 
    return chr(ord(c)-key%26) 
decode_char('d',3) 

샘플 예

txt = "This is a secret message!!" 

#encoding 
lista = [] 
for i in txt: 
    lista.append(code_char(i,3)) 
print ''.join(lista) 

encoded = ''.join(lista) 

lista = [] 
#decoding 
for i in encoded: 
    lista.append(decode_char(i,3)) 
print ''.join(lista) 

decoded = ''.join(lista) 

출력 :

정확히 "이 작동하지 않습니다"무엇
Wklv#lv#d#vhfuhw#phvvdjh$$ 
This is a secret message!! 
+0

코드가 OP보다 간단하지만 인코딩/디코딩 프로세스는 OP가 수행하는 것과 약간 다릅니다. 그들의 알고리즘은 문자를 대소 문자의 문자에만 매핑하고 다른 문자는 변경하지 않습니다. –

+0

흠, 나는 그의 인코딩 알고리즘에 의문을 가지고 있습니다. 나는 갱신 할 것이다. – bhansa