관리 메뉴

개발이야기

[인프런 강의] Python lab_8 morse code 해독 구현 본문

Python /인프런 강의

[인프런 강의] Python lab_8 morse code 해독 구현

안성주지몬 2018. 12. 20. 00:00

1. split 에 사용
2. replace 사용
3. dictionary 자료형에서 키값을 가져오기 위해서는 .key을 사용한다. 
4. value 값을 가져오기 위해서는 get을 사용한다.


# -*- coding: utf8 -*- def get_morse_code_dict(): morse_code = { "A": ".-", "N": "-.", "B": "-...", "O": "---", "C": "-.-.", "P": ".--.", "D": "-..", "Q": "--.-", "E": ".", "R": ".-.", "F": "..-.", "S": "...", "G": "--.", "T": "-", "H": "....", "U": "..-", "I": "..", "V": "...-", "K": "-.-", "X": "-..-", "J": ".---", "W": ".--", "L": ".-..", "Y": "-.--", "M": "--", "Z": "--.." } return morse_code def get_help_message(): message = "HELP - International Morse Code List\n" morse_code = get_morse_code_dict() counter = 0 for key in sorted(morse_code): counter += 1 message += "%s: %s\t" % (key, morse_code[key]) if counter % 5 == 0: message += "\n" return message def is_help_command(user_input): #h, help를 대문자 구별없이 받았을때 구분해주는 함수 user_input = user_input.upper() if user_input == "H" or user_input == "HELP": result = True else: result = False return result def is_validated_english_sentence(user_input): number = ['1','2','3','4','5','6','7','8','9','0'] character = ['_', '@','#','$','%','^','&','*','(',')','[',']','{','}','"',';',':','|','`','~',"'"] alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] flag = False for i in user_input: if i in number or i in character: #if in in number == True: 는 안된다. result = False break else: result = True if i.lower() in alpha: flag = True if flag == False: result = False return result def is_validated_morse_code(user_input): result = True user_input = user_input.split(" ") morse = get_morse_code_dict().values() #values만 뽑아오지 않고 in을 사용하면 key값에서 있는지 없는지를 찾는다. for i in user_input: if i not in morse: if i == "": continue result = False break return result # ==================================



def get_cleaned_english_sentence(raw_english_sentence): temp = raw_english_sentence temp = temp.replace(".","") temp = temp.replace(",","") temp = temp.replace("!","") temp = temp.replace("?","") #? 인 원소값을 없앤다. if temp[0] == " ": temp = temp[1:] if temp[-1] == " ": temp = temp[:-1] result = temp return result # ================================== def decoding_character(morse_character): result = None morse_code_dict = get_morse_code_dict() for key in morse_code_dict.keys(): #모든 키값을 가져와서 for문을 돌린다. if morse_code_dict.get(key) == morse_character: #키값의 value와 함수 인자가 같은 경우 result = key break return result def encoding_character(english_character): morse_code_dict = get_morse_code_dict() result = morse_code_dict.get(english_character) #key값으로 value값 가져오기 함수는 get을 이용한다. return result def decoding_sentence(morse_sentence): result = "" english_sentence = get_cleaned_english_sentence(english_sentence) cnt = 0 for i in english_sentence: if i == " " or i == "": cnt = cnt + 1 if cnt > 1: continue result = result + " " else: result = result + encoding_character(i.upper()) + " " cnt = 0 while result[-1] == " ": if result[-1] == " ": result = result[:-1] return result def main(): print("Morse Code Program!!" while True: inp = input("Input your message(H - Help, 0 - Exit): ") if inp == '0': break elif is_help_command(inp) == True: mesg = get_help_message() print(mesg) else: if is_validated_english_sentence(inp) == True: print(encoding_sentence(inp)) elif is_validated_morse_code(inp) == True: print(decoding_sentence(inp)) else: print("Wrong Input") print("Good Bye") print("Morse Code Program Finished!!") if __name__ == "__main__": main()


Comments