리보그 일기 =============== .. index:: print(), function argument .. index:: 함수 인자 리보그에서 다음 프로그램을 실행한다:: print() *Reeborg writes:* 라는 제목을 갖는 팝업 윈도우가 나타난다. 이 윈도우가 리보그 일기장이다. 자유로이 컴퓨터 화면 여기저기로 옮겨본다. .. note:: **중요:** 바로 옆 예제는 함수 ``move`` 를 실행하지 않는다; 하지만, 만약 다음과 같이 작성하면:: print( move() ) ``move`` 가 실행되고, 파이썬 키워드 ``None`` 이 출력된다. 이유는 나중에 설명한다. 이제, 다음 명령어를 실행한다:: print(move) 사용설명서를 저자가 작성하는 시점에, 리보그 일기장에 나온 결과는 다음과 같다. (``move`` 대신에 ``_move_`` 가 나타난 이유는 여기 페이지를 쭉 읽은 후에 추측할 수 있을 것이다.) 동일한 객체(함수)에 대해서 또다른 변수(명칭)를 정의하면 어떨까? .. code-block: python3 step = move print(step) print(move) 결과는 다음과 같다:: 상기 결과를 통해서 ``=`` 은 단순히 명칭을 객체에 부여함이 확실히 나타난다. 이 경우 객체가 출력하도록 요청받을 때 파이썬이 ```` 을 호출한 것이다. 다른 한편으로, 완전히 새로운 함수를 다음과 같이 정의하면:: # step = move def step(): move() print(step) 결과는 다음과 같다:: 함수는 인자을 수 있다. ------------------------------- 컴퓨터 프로그램에서, 단어 **인자(argument)** 는 함수에 대한 결과를 결정하는 변수를 지칭한다. 예를 들어, 앞서 살펴봤듯이:: print(move) 변수 ``move`` 가 ``print()`` 함수에 대한 인자가 된다. 함수 인자는 괄호 사이에 보이며, 괄호는 함수 호출을 나타낸다. 텍스트 작성하기 -------------------- ``print()`` 함수를 사용해서 위에서 했던 것처럼 함수명칭을 적는 것은 프로그램을 작성할 때, **극단적으로** 드물다. 훨씬 자주 작업하는 것은 텍스트를 적어 넣는 것이다. 프로그래밍 용어로, *문자(character)* 는 임의 문자, 숫자, 출력될 수 있는 기호다. 그리고 연속된 문자 단순히 *문자열(string)* 은 출력될 수 있는 임의로 연속된 문자다. 예를 들어, 다음과 같이 작성할 수 있다:: print("Hello world!") print('Hello again.') .. index:: \', \", \n, escape character, escape sequence .. index:: \', \", \n, 확장 문자, 확장 비트열 *문자열* 주위를 감싸는 인용부호는 ``"`` 처럼 이중 인용부호든지 ``'`` 처럼 단일 인용부호든지 동일해야 된다. 인용부호를 포함하는 문자열이 있다면, 다른 유형의 인용부호로 감싸던가 *확장문자(escape character)* ``\`` 을 사용한다:: print("Let's go.") print('Let\'s go.') ``+`` 기호를 사용해서 문자열을 조합할 수 있다:: print("Goodbye! " + "And thanks for all the fish.") 다음 *확장 비트열(escape sequence)* ``\n`` 을 사용해서 개행(new line)하여 다음 줄에서 시작한다:: print("Thank you. \nTry again") .. topic:: 시도해 보기! 상기 표본 코드 혹은 유사한 코드를 확실히 시도해 본다. 리보그는 수학을 알고 있다. --------------------------------- .. index:: +, *, -, /, // .. topic:: 시도해 보기! 다음 프로그램을 시도해 보고 리보그 일기장에 출력결과를 살펴본다. .. code-block:: py3 print( 2 + 3 ) # 숫자를 더한다. print( 2 * 3 ) # 숫자를 곱한다. print( 3 - 2 ) # 숫자를 뺀다. print( 6 / 2 ) # 숫자를 나눈다. print( 1 + 3 * 2 ) # 곱셈이 덧셈보다 먼저 수행된다. # 괄호를 사용해서 정상적인 연산 우선순위를 바꾼다. print( (1 + 3) * 2 ) print( 2 ** 5 ) # 멱승 ... 2**5 = 2 * 2 * 2 * 2* 2 .. note:: ``+`` 와 ``*`` 같은 연산자 주위 공백은 파이썬이 무시함에 주목한다; 하지만, 공백을 통해 사람이 코드를 읽을 때, 가독성을 좋게 한다. 상기 예제에서, 결과는 숫자를 나눌 때 **부동소수점(floating point)** 수가 될 때를 제외하고 항상 정수가 된다: ``6 / 2`` 결과는 ``3.0`` 이 된다. 두 숫자를 나눠 정수 결과를 원하면, 두번 나누셈 기호를 사용한다:: print( 6 // 2 ) # 정수 나눗셈 변수 사용하기 ------------------ 이미 다른 명칭 (변수)을 동의어로 사용하는 아이디어로 살펴봤다. 수학 연산에 다시 한번 이런 아이디어를 사용하자:: length = 4 width = 6 area = length * width # 사각형 면적 print(area) # 결과는 24 .. topic:: 시도해 보기! 본인 만의 예제를 만들어서, 실행해 본다. .. important:: *문자* "2" 는 *숫자* 2와 같지 않다. 다음을 실행해 본다:: print("2" + 2) 복수 인자 ------------------- ``print()`` 같은 일부 함수는 많은 인자를 받을 수 있다: 여러 인자는 코마로 구분된다. 이것을 시연하는데, 다음 프로그램을 실행한다:: length = 4 width = 6 area = length * width print("직사각형 길이:", length, "넓이:", width, "면적:", area)