18.5문제 관련 질문합니다.
, 모터 아그니님이 작성관리자님 안녕하세요. 군대에서 열심히 파이썬을 공부하는 한 청년입니다^^
글을 쓴 이유는 다름이 아니라 문제 18.5에서 코드 순서가 살짝 의문이여서 입니다.
먼져
i = 0
while True:
- i %10 != 3:
- i += 1
- continue
- if i >73 :
- break
요것보다는
- if i > 73:
- break
- i %10 != 3:
- i += 1
- continue
왜냐면, 73까지 실행 시킬려면 전자의 코드도 물론 아무 문제없이 실행 되지만, 83까지 총 10번이 더 실행되고, 프로그램이 종료 됩니다. 어찌보면, 쓸데없는 계산을 더 하는것이겠죠.
하지만, 후자의 코드를 실행시키면, 73에서 종료 됩니다.
즉, 후자의 코드가 계산량이 적다고 생각됩니다.
이런 엄청 사소한걸로 글을 써서 관리자님의 시간을 뺏어 죄송합니다.
하지만 학습자 입장에서는 이런 작은 코드 변화에도 효율성 측면에서 의문점을 가질수도 있어 보잘껏없는 제가 감히 관리자님에게 말을 드려봅니다
//이런 멋진 책을 만들어주시고 저희들에게 피드백도 해주듯히, 항상 저희같은 학습자들을 위해 모든 최선을 다해주시고 고생해 주셔서 정말 감사합니다. 관리자님
Re: 18.5문제 관련 질문합니다.
, 도장_ 관리자님이 작성책에 제시된 코드가 더 바람직한 코드입니다.
문제에서는 0과 73 사이의 숫자에 대해 처리하라고 되어 있습니다. 즉, 입력 범위가 지정되어 있습니다.
문의하신 것처럼 if i > 73은 예외 처리를 위한 코드입니다.
코드를 작성할 때는 의도가 더 중요합니다. 대부분의 코드는 정상적인 동작을 가정하고, 정상적인 범위에서 동작하는 것이 정상적인 의도일 것입니다. 문제에 제시된 기능을 하는 코드가 함수로 되어 있다면 이 함수는 대부분 0~73 사이의 값에 대해 처리할 것을 전제로 하게 됩니다. 다시 말해 정상적인 코드 동작은 0~73 사이의 값에 대해 처리하고, 73을 초과했을 때만 종료하게 하는 것이 좋습니다.
83과 같은 비정상적인 값, 즉 프로그램에서 가정한 값의 범위를 벗어나는 값에 대해서는 비효율적으로 동작하는 것이 맞지만, 대부분은 정상적인 값의 범위가 입력되고, 그 범위에 대해 동작하는 코드가 더 효율적입니다.
정상적인 범위의 값이 100번 전달되고, 범위를 벗어난 값이 1번 전달되는 것이 보통의 전제일 것입니다. 이런 경우에는 책에 제시된 코드가 더 효율적입니다.
그러나 코드에는 정답이 없으니 원하는 대로 코딩해도 됩니다. 올바르게 동작하기만 하면 됩니다. 이 문제에서는 알고리즘의 효율에 차이가 없기 때문이기도 합니다. 알고리즘 효율에 대해서는 <누구나 자료 구조와 알고리즘>(길벗, 2018)을 추천합니다. 초보자도 읽기 쉽게 되어있으면서도 컴퓨터 공학에서 놓치면 안 되는 알고리즘 효율에 대한 분석을 제시하기 때문입니다. 쉽게 설명하는 알고리즘 책들이 대부분은 빅 오 표기법이나 알고리즘 효율 분석에 대해 부족한 경우가 많은데 반해, 이 책은 이 부분을 중점적으로 설명합니다.