4강의 내용도 비교적 간단한 편이었다. 3강에서 list
을 다뤘다면, 4강에서는 dictionary
에 대해서 배운다. key:value로 이어지는 dictionary의 경우 정해진 값을 반복해서 가져오는데에는 아주 효율적인 툴이다. 그리고 효율적인 key 탐색 방법을 우리가 직접 구현하지 않아도 된다는 점에서 매우 유용하다고 할 수 있다.
Keypoints!
dictionary의 대부분의 기능들을 익히 알고 있었는데, 이번에 새롭게 알게된 여러 유용한 기능들을 남겨두려 한다. 지금까지 코딩테스트 문제들을 풀 때에는 그냥 dict['key']
형태로만 탐색을 했는데, 혹시라도 key가 dict에 없을 경우에 에러가 발생하는게 은근히 골치아팠다. 일일히 if else 구문으로 예외 처리를 해줬어야 했는데, get()
을 이용하면 비교적 편하게 불러올 수 있다.
dict.get(key, 없을때반환값)
처럼 get은 두 개의 인수를 지정할 수 있는데, 먼저 dict에 key가 있는지를 확인하고, 있으면 해당 value를, 없다면 미리 지정된 ‘없을때의 반환값’을 return해준다. 4강의 내용처럼 숫자와 문자가 뒤섞여있는 경우에, 일일히 type으로 파악하지 않고도, 숫자값만 dict에 저장해두고 없으면 있는 그대로 return해주는 논리를 짜면 한줄에 문제 해결이 가능해진다.
문자열 처리에 관해서
print() 이용
내가 이용했던 방법이기도 했다. print('어쩌고저쩌고', end='')
와 같이 end parameter을 지정해주면, print한 뒤에 줄바꿈이 되지 않고 바로 다음에 이어서 print된다.
새로운 문자열 만들기
보다 깔끔한 출력을 위해서는 그때그때 print하기보다는 문자열을 하나 만들어서 뒤에 추가하는 편이 낫다.
output=''
for char in message:
output += char
print(output)
새로운 리스트 만들기
앞과 비슷하지만, 리스트를 만들어서 처리하는 것도 소개한다.
output = []
for char in message:
output.append(char)
print(''.join(output))
str.translate() 함수 사용하기
이건 책에서 처음 알게된 함수였다. 한큐에 끝낼 수 있는 비장의 무기 같달까?
jumper = {어쩌구저쩌구}
print(args.message.translate(str.maketrans(jumper)))
Code 공유
jump.py
#!/usr/bin/env python3
"""
Author : junha <junha@localhost>
Date : 2024-02-21
Purpose: Rock the Casbah
"""
import argparse
# --------------------------------------------------
def get_args():
"""Get command-line arguments"""
parser = argparse.ArgumentParser(
description='Rock the Casbah',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('message',
metavar='str',
help='Leave a message')
return parser.parse_args()
# --------------------------------------------------
def main():
"""Make a jazz noise here"""
args = get_args()
jumper = {'1': '9',
'2': '8',
'3': '7',
'4': '6',
'5': '0',
'6': '4',
'7': '3',
'8': '2',
'9': '1',
'0': '5'}
for char in args.message:
print(jumper.get(char, char), end='')
# --------------------------------------------------
if __name__ == '__main__':
main()