2016-10-30 2 views
0

모스 코드에서 일반 알파벳으로 전체 문장을 디코드하고 싶습니다. 제 스크립트는 그 일을하지만 모든 단어에 조인합니다. 공백을 보존하지 않습니다. morseCode (입력)에서 세 개의 공백은 단어 사이의 분리를 나타내며 한 개의 공백은 문자 간의 분리를 나타냅니다.공백 문자가 사전에 키와 값으로 모두 있습니다.

하나의 공백에 해당하는 값으로 사전에 키로 공백을 3 개 추가하려고했지만 작동하지 않는 것 같습니다.

def decodeMorse(morseCode): 
    MORSE_CODE[' '] = ' ' 
    return ''.join(MORSE_CODE.get(i) for i in morseCode.split()) 

정규식을 사용하여 입력을 분리하려고 시도했지만 실패했습니다. 사전을 사용하여 작동하게하는 방법이 있습니까? 사전에서 키와 입력으로 공백을 사용할 수 있습니까?

답변

1

str.split()은 임의의 너비 공백에 입력 문자열을 분할합니다. 즉, 문자열 부분에 이 아닌 공백 부분은 공백이 아닌 공백 인이됩니다.

일반적으로 입력을 두 번 분할합니다. 한 번 문자열 ' '에 바로 편지를 얻을 공백에, 각각의 단어를 단어의 목록을 얻으려면 :

def decodeMorse(morseCode): 
    return ' '.join([ 
     ''.join([MORSE_CODE.get(i) for i in word.split()]) 
     for word in morseCode.split(' ')]) 

을 당신이 을 분할 정규 표현식을 사용해야 할 것이다 당신의 접근 방식을 사용하려는 경우와 3 공간 구분을 포함한다 :

re.split(r'([ ]{3}|)', morseCode) 

을하지만 당신은 포함 할 수 있습니다 re.split()로, 단일 공간 문자 구분을 필터링하거나 개인이 아닌 분리에 대한 전체 분할 작업에 대한 구분 기호를 포함하지 않는 게 좋을 마커.

+0

감사합니다. 이해합니다. 지금은 분명해 보입니다. 공백을 키 및/또는 사전의 값으로 사용할 수 있는지 알고 있습니까? 나는 어떤 정보도 찾을 수 없었다. – 10001000101111

+0

물론 가능합니다. 그것은 단지 문자열입니다. 사전은 * 문자열에 * 무엇이 있는지 상관하지 않습니다. –

0

함수 split은 트리플 공백을 단일 구분 기호로 간주합니다. 따라서 @Martijn Pieters가 제안한 것처럼 트리플 공간에서 처음으로 명시 적으로 분할하거나 모스 코드 (예 : | 일 수 있음)에서 발생하지 않는 다른 것으로 트리플 공간을 대체 한 다음이를 공백으로 변환하는 것입니다.

def decodeMorse(morseCode): 
    MORSE_CODE['|'] = ' ' 
    return ''.join(MORSE_CODE.get(i) for i in morseCode.replace(' ', '|').split()) 
관련 문제