본문 바로가기

Python 배우기

[외계어 배우기] 문제#4 Telemarketers

지금까지 배운 것들을 바탕으로 Telemarketers 문제를 해결해 보자. 조건을 다시 정리해 보자.

 

첫 번째 숫자가 8이거나 9, 그리고 네 번째 숫자가 8이거나 9, 그리고 두 번째와 세 번째 숫자가 같으면 'ignore'을 반환하고 아니면 'answer'를 반환한다.

 

1) 각 자리 숫자를 읽어서 정수로 변환한다.

덧, 표현식이 다음 줄에도 계속될 수 있으므로 괄호로 묶어주여야 한다. 위의 코드도 전혀 문제가 없지만 더 가독성을 좋게 하려면 줄 바꿈을 해주는 것이 좋다. 

 

2) 첫 번째 숫자가 8이나 9인지 판단한다. 

3) 네 번째 숫자가 8이나 9인지 판단한다.

4) 두 번째와 세 번째 숫자가 같은지 판단한다.

if 문의 표현식이 and 연산자로 연결되어 있기 때문에 각각의 표현식이 True일 때만 전체 표현식이 True이다. (Boolean 연산자들에 대해 기억이 안 난다면 이전 글을 확인하자.)

5) 모두 참이면 ignore를 반환한다.

6) 그 외에는 answer를 반환한다.

 

이 코드를 다음과 같이 작성할 수도 있다.

 

이 코드는 or 연산자로 표현식이 연결되어 있기 때문에 하나만 True이면 전체가 True가 된다. 즉, 첫 번째 숫자가 8도 아니고 9도 아니면, 텔레마케터의 전화번호가 아니기 때문에 더 이상 볼 필요도 없다는 의미이다. 좀 더 사람에게 가독성이 좋게 표현하자면 다음과 같다.

 

 

그렇다면, 이건 어떨까? 논리적으로 생각해 보면 효율면에서도, 그리고 가독성면에서도 이렇게 코드를 작성하는 것이 제일 좋지 않을까? 

 

이 코드가 이해가 되는가?

1) 첫 번째 자리 숫자를 읽어 정수로 변환한다.

2) 첫 번째 자리 숫자가 8이 아니고 9가 아니면* answer를 반환하고 종료한다.

3) 두 번째와 세 번째 자리 숫자를 읽어 정수로 변환한다.

4) 두 번째 자리 숫자와 세 번째 자리 숫자가 같지 않으면** answer를 반환하고 종료한다.

5) 네 번째 자리 숫자를 읽어 정수로 변환한다.

6) 네 번째 자리 숫자가 8이 아니고 9가 아니면*** answer를 반환하고 종료한다.

7) 그 외에는 ignore를 반환한다.

 

어떤가? 훨씬 가독성도 좋지만 무엇보다도 효율적이지 않는가? *의 표현식이 True라면 나머지는 실행할 필요도 없다. *의 표현식이 False인 경우에만 **의 코드를 판단하면 되는 것이다. (물론, 이 코드는 생선님이 알려주신 코드이다.)

 

이 처럼 코드를 작성한다는 것은, 여러 가지 고려해야 할 사항이 많겠지만, 특히 사람이 이해하기 좋은 코드(누구에게나 좋은 가독성)를 작성하는 것이 중요할 것이다. 

덧, 코드의 가독성과 품질 향상 그리고 유지보수를 위해 주석을 다는 것은 좋은 습관이다. 주석은 코드로 표현하지 못하는 것들, 특히 이 프로그램(코드)을 만든 동기 등을 작성하면 좋다. 파이썬에서 주석은 # 문자로 시작하며 프로그램이 하는 일에 영향을 미치지 않는다.
Chatpy says, 주석은
- 복잡한 로직을 설명합니다: 특히 로직이 복잡하거나 명확하지 않은 경우 특정 코드 블록이 수행하는 작업을 설명합니다.
- 변수와 함수의 목적 명확히 하기: 변수가 무엇을 담고 있는지 또는 함수가 무엇을 하는지 설명하는 것으로, 변수나 함수 이름이 자명하지 않은 경우에 특히 유용합니다.
- 코드를 문서화하세요: 작성자 이름, 생성 날짜, 마지막 수정 날짜 등 코드에 대한 정보를 제공합니다. 주석에는 버전 정보와 업데이트 중 변경된 사항에 대한 설명도 포함할 수 있습니다.
- 디버깅: 코드를 삭제하지 않고 일시적으로 비활성화합니다. 버그를 격리하려고 하거나 코드를 완전히 제거하지 않고 특정 기능을 끄고 싶을 때 유용합니다.
- 할 일 포함: 추가 작업이 필요한 코드 섹션을 표시하여 다른 개발자에게 알림을 주거나 개선 또는 수정이 계획되어 있음을 알리는 데 유용할 수 있습니다.

 

 

수학 문제를 풀 때 문제의 의도를 깊이 이해하고 여러 방식을 통해 풀어보며 효율적이고 더 정확한 계산법을 찾아내듯, 더 좋은 코드를 작성하기 위해서는 그만큼 더 깊이 문제를 이해하고 다각도로 접근하여 코드를 작성할 필요가 있는 것 같다.

 

그럴 수 있으려면 역시... 공부를 많이 해서 더욱 많이 알아야겠지??? 

 

반응형