더북(TheBook)

이 간단한 코드가 우리가 원하는 결과를 생성할 것인지는 곰곰이 생각해봐야 한다. 다음과 같이 확인하면 이 코드가 제대로 실행될 것이라는 확신이 들 것이다.

power는 언제나 2의 거듭제곱이다.

power는 결코 n보다 커지지 않는다.

• 루프를 돌 때마다 power가 증가하므로, 루프가 언젠가는 종료된다.

• 루프가 종료된 후 2*powern보다 크다.

while 루프가 어떻게 작동하는지 알아내려면 이와 같은 방법으로 생각을 정리해야 한다. 우리가 작성할 루프는 대부분 이 루프보다는 간단하지만, 작성한 루프가 원하는 대로 작동할지 직접 검증해야 한다.

tenhellos.py처럼 단 몇 번만 반복하는 루프든, powersoftwo.py처럼 수십 번 반복하는 루프든, 잠시 후에 알아볼 수백만 번 반복하는 루프든, 검증 방법은 똑같다. 몇 개의 작은 경우에서 아주 큰 연산까지 확장하는 것은 수학적 귀납법처럼 심오하다. 루프를 작성할 때는 문장을 추가해 값을 추적하거나 적은 횟수로 프로그램을 실행시켜 검증함으로써 루프를 반복할 때마다 변숫값이 어떻게 바뀌는지 이해하는 것이 중요하다. 이렇게 해서 루프가 실행되는 방식을 이해한 후에는 컴퓨터의 진정한 능력을 활용할 수 있다.

약식 할당문 표기법 프로그래밍할 때 변수를 변경하는 것은 상당히 자주 수행하는 연산이므로 파이썬과 같은 최신 프로그래밍 언어들은 이런 용도에 맞는 약식 표기법을 지원한다. 특히 i = i + 1 형태의 할당문을 약식 표기법 i += 1로 간단히 표현하는 것은 흔히 볼 수 있다. 이 표기법은 -, *, / 등 다른 이진 연산자에도 동일하게 적용된다. 예를 들어 대부분의 프로그래머는 [프로그램 1.3.3]에 있는 power = 2 * power 대신 power *= 2를 사용한다. 이런 약식 표기법은 1970년대 C 프로그래밍 언어와 함께 널리 사용되기 시작해 표준적인 표기법이 되었다. 프로그램이 간결하고, 우아하고, 이해하기 쉬워지므로 이런 약식 표기법은 오랜 검증 기간을 거쳐 살아남은 것이다. 지금부터 우리가 작성할 프로그램에서는 가능한 한 이와 같은 연산 할당문(augmented assignment statement)을 사용할 것이다.*

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.