첫 번째 프로그램

Intermediate

This tutorial is from open-source community. Access the source code

소개

이 섹션에서는 첫 번째 프로그램 생성, 인터프리터 실행, 그리고 기본적인 디버깅에 대해 논의합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 58%입니다.학습자들로부터 93%의 긍정적인 리뷰율을 받았습니다.

Python 실행

Python 프로그램은 항상 인터프리터 내에서 실행됩니다.

인터프리터는 일반적으로 명령 셸에서 실행되는 "콘솔 기반" 애플리케이션입니다.

python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

숙련된 프로그래머는 일반적으로 이러한 방식으로 인터프리터를 사용하는 데 문제가 없지만, 초보자에게는 그다지 사용자 친화적이지 않습니다. Python 에 대한 다른 인터페이스를 제공하는 환경을 사용할 수도 있습니다. 괜찮습니다. 하지만 Python 터미널을 실행하는 방법을 배우는 것은 여전히 유용한 기술입니다.

대화형 모드

Python 을 시작하면 실험할 수 있는 대화형 모드를 얻게 됩니다.

명령문을 입력하면 즉시 실행됩니다. 편집/컴파일/실행/디버그 사이클이 없습니다.

>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>>

이른바 read-eval-print-loop (REPL) 는 디버깅 및 탐색에 매우 유용합니다.

중단: Python 과 상호 작용하는 방법을 모르는 경우, 하던 일을 멈추고 방법을 찾아보세요. IDE 를 사용하고 있다면 메뉴 옵션이나 다른 창 뒤에 숨겨져 있을 수 있습니다. 이 과정의 많은 부분은 인터프리터와 상호 작용할 수 있다고 가정합니다.

REPL 의 요소를 자세히 살펴보겠습니다.

  • >>>는 새 명령문을 시작하기 위한 인터프리터 프롬프트입니다.
  • ...는 명령문을 계속하기 위한 인터프리터 프롬프트입니다. 빈 줄을 입력하여 입력을 완료하고 실행합니다.

... 프롬프트는 환경에 따라 표시될 수도 있고 그렇지 않을 수도 있습니다. 이 과정에서는 코드 샘플을 쉽게 잘라내어 붙여넣을 수 있도록 공백으로 표시됩니다.

밑줄 _는 마지막 결과를 저장합니다.

>>> 37 * 42
1554
>>> _ * 2
3108
>>> _ + 50
3158
>>>

이것은 대화형 모드에서만 해당됩니다. 프로그램에서는 _를 사용하지 않습니다.

프로그램 생성

프로그램은 .py 파일에 저장됩니다.

## hello.py
print('hello world')

좋아하는 텍스트 편집기를 사용하여 /home/labex/project 디렉토리에 hello.py 파일을 만들 수 있습니다.

프로그램 실행

프로그램을 실행하려면 터미널에서 python 명령을 사용하여 실행합니다. 예를 들어, 명령줄 Unix 에서:

$ python hello.py
hello world
bash %

또는 Windows 셸에서:

C:\SomeFolder>hello.py
hello world

C:\SomeFolder>c:\python36\python hello.py
hello world

참고: Windows 에서는 c:\python36\python과 같이 Python 인터프리터의 전체 경로를 지정해야 할 수 있습니다. 그러나 Python 이 일반적인 방식으로 설치된 경우 hello.py와 같이 프로그램의 이름만 입력할 수 있습니다.

샘플 프로그램

다음 문제를 풀어보겠습니다.

어느 날 아침, 시카고의 시어스 타워 옆 보도에 1 달러 지폐 한 장을 놓습니다. 그 후 매일 지폐 수를 두 배로 늘립니다. 지폐 더미가 타워 높이를 초과하는 데 얼마나 걸릴까요?

다음은 /home/labex/project 디렉토리에 sears.py 파일을 생성하는 솔루션입니다.

## sears.py
bill_thickness = 0.11 * 0.001 ## Meters (0.11 mm)
sears_height = 442 ## Height (meters)
num_bills = 1
day = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

실행하면 다음과 같은 출력을 얻습니다.

$ python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
Number of days 23
Number of bills 4194304
Final height 461.37344

이 프로그램을 가이드로 사용하여 Python 에 대한 여러 가지 중요한 핵심 개념을 배울 수 있습니다.

문장 (Statements)

Python 프로그램은 일련의 문장으로 구성됩니다.

a = 3 + 4
b = a * 2
print(b)

각 문장은 줄 바꿈으로 종료됩니다. 문장은 제어가 파일의 끝에 도달할 때까지 하나씩 순차적으로 실행됩니다.

주석 (Comments)

주석은 실행되지 않는 텍스트입니다.

a = 3 + 4
## This is a comment
b = a * 2
print(b)

주석은 #로 표시되며 해당 줄의 끝까지 확장됩니다.

변수 (Variables)

변수는 값의 이름입니다. a 부터 z 까지의 문자 (소문자 및 대문자) 를 사용할 수 있습니다. 밑줄 문자 _도 사용할 수 있습니다. 숫자도 변수 이름의 일부가 될 수 있지만, 첫 번째 문자로는 사용할 수 없습니다.

height = 442 ## valid
_height = 442 ## valid
height2 = 442 ## valid
2height = 442 ## invalid

타입 (Types)

변수는 값의 타입으로 선언될 필요가 없습니다. 타입은 변수 이름이 아닌 오른쪽에 있는 값과 연관됩니다.

height = 442           ## An integer
height = 442.0         ## Floating point
height = 'Really tall' ## A string

Python 은 동적 타입 언어입니다. 프로그램이 실행됨에 따라 변수의 "타입"은 현재 할당된 값에 따라 변경될 수 있습니다.

대소문자 구분 (Case Sensitivity)

Python 은 대소문자를 구분합니다. 대문자와 소문자는 서로 다른 문자로 간주됩니다. 다음은 모두 서로 다른 변수입니다.

name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'

언어 구문은 항상 소문자입니다.

while x < 0:   ## OK
WHILE x < 0:   ## ERROR

반복 (Looping)

while 문은 루프를 실행합니다.

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

while 뒤의 표현식이 true인 동안 while 아래에 들여쓰기된 문장이 실행됩니다.

들여쓰기 (Indentation)

들여쓰기는 함께 묶이는 문장 그룹을 나타내는 데 사용됩니다. 이전 예제를 살펴보겠습니다.

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

들여쓰기는 다음 문장들을 반복되는 연산으로 함께 묶습니다.

    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

마지막 print() 문은 들여쓰기되지 않았으므로 루프에 속하지 않습니다. 빈 줄은 가독성을 위한 것입니다. 실행에는 영향을 미치지 않습니다.

들여쓰기 (Indentation) 모범 사례

  • 탭 대신 공백을 사용합니다.
  • 레벨당 4 개의 공백을 사용합니다.
  • Python 을 인식하는 편집기를 사용합니다.

Python 의 유일한 요구 사항은 동일한 블록 내의 들여쓰기가 일관되어야 한다는 것입니다. 예를 들어, 다음은 오류입니다.

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
        day = day + 1 ## ERROR
    num_bills = num_bills * 2

조건문 (Conditionals)

if 문은 조건부 실행에 사용됩니다.

if a > b:
    print('Computer says no')
else:
    print('Computer says yes')

elif를 사용하여 추가적인 검사를 추가하여 여러 조건을 확인할 수 있습니다.

if a > b:
    print('Computer says no')
elif a == b:
    print('Computer says yes')
else:
    print('Computer says maybe')

출력 (Printing)

print 함수는 전달된 값으로 단일 텍스트 줄을 생성합니다.

print('Hello world!') ## Prints the text 'Hello world!'

변수를 사용할 수 있습니다. 출력되는 텍스트는 변수의 이름이 아닌 변수의 값입니다.

x = 100
print(x) ## Prints the text '100'

print에 둘 이상의 값을 전달하면 공백으로 구분됩니다.

name = 'Jake'
print('My name is', name) ## Print the text 'My name is Jake'

print()는 항상 끝에 줄 바꿈 문자를 추가합니다.

print('Hello')
print('My name is', 'Jake')

이것은 다음을 출력합니다:

Hello
My name is Jake

추가적인 줄 바꿈은 억제될 수 있습니다:

print('Hello', end=' ')
print('My name is', 'Jake')

이 코드는 이제 다음을 출력합니다:

Hello My name is Jake

사용자 입력 (User input)

입력된 사용자 입력을 한 줄 읽으려면 input() 함수를 사용합니다.

name = input('Enter your name:')
print('Your name is', name)

input은 사용자에게 프롬프트를 출력하고 응답을 반환합니다. 이것은 작은 프로그램, 학습 연습 또는 간단한 디버깅에 유용합니다. 실제 프로그램에서는 널리 사용되지 않습니다.

pass 문

때로는 빈 코드 블록을 지정해야 합니다. 키워드 pass가 이를 위해 사용됩니다.

if a > b:
    pass
else:
    print('Computer says false')

이것은 또한 "no-op" 문이라고도 합니다. 아무것도 하지 않습니다. 나중에 추가될 수 있는 문장의 자리 표시자 역할을 합니다.

이것은 Python 파일을 생성하고 실행해야 하는 첫 번째 일련의 연습입니다. 이 시점부터 ~/project/ 디렉토리에서 파일을 편집한다고 가정합니다. 적절한 위치를 찾는 데 도움이 되도록, 적절한 파일 이름으로 여러 개의 빈 시작 파일이 생성되었습니다. 첫 번째 연습에서 사용되는 파일 bounce.py를 찾으십시오.

연습 1.5: 튕기는 공

고무공이 100 미터 높이에서 떨어지고, 땅에 닿을 때마다 떨어진 높이의 3/5 만큼 다시 튕겨 올라갑니다. 처음 10 번의 튕김 높이를 보여주는 표를 출력하는 프로그램 bounce.py를 작성하십시오.

다음은 해결책입니다.

## bounce.py

height = 100
bounce = 1
while bounce <= 10:
    height = height * (3 / 5)
    print(bounce, round(height, 4))
    bounce += 1

프로그램은 다음과 유사한 표를 만들어야 합니다.

1 60.0
2 36.0
3 21.599999999999998
4 12.959999999999999
5 7.775999999999999
6 4.6655999999999995
7 2.7993599999999996
8 1.6796159999999998
9 1.0077695999999998
10 0.6046617599999998

참고: round() 함수를 사용하면 출력을 약간 정리할 수 있습니다. 출력을 소수점 4 자리로 반올림하는 데 사용해 보십시오.

1 60.0
2 36.0
3 21.6
4 12.96
5 7.776
6 4.6656
7 2.7994
8 1.6796
9 1.0078
10 0.6047

연습 1.6: 디버깅 (Debugging)

다음 코드 조각은 시어스 타워 문제의 코드를 포함하고 있습니다. 또한 버그도 포함하고 있습니다.

## sears.py

bill_thickness = 0.11 * 0.001    ## Meters (0.11 mm)
sears_height   = 442             ## Height (meters)
num_bills      = 1
day            = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = days + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

위의 코드를 복사하여 sears.py라는 새 프로그램에 붙여넣으십시오. 코드를 실행하면 다음과 같이 프로그램이 충돌하게 만드는 오류 메시지가 나타납니다.

Traceback (most recent call last):
  File "sears.py", line 10, in <module>
    day = days + 1
NameError: name 'days' is not defined

오류 메시지를 읽는 것은 Python 코드의 중요한 부분입니다. 프로그램이 충돌하면, traceback 메시지의 마지막 줄이 프로그램이 충돌한 실제 이유입니다. 그 위에 소스 코드의 조각과 식별 파일 이름 및 줄 번호가 표시됩니다.

  • 오류가 있는 줄은 어디입니까?
  • 오류는 무엇입니까?
  • 오류를 수정하십시오.
  • 프로그램을 성공적으로 실행하십시오.

요약

축하합니다! 첫 번째 프로그램 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.