소개
이 섹션에서는 첫 번째 프로그램 생성, 인터프리터 실행, 그리고 기본적인 디버깅에 대해 논의합니다.
이 섹션에서는 첫 번째 프로그램 생성, 인터프리터 실행, 그리고 기본적인 디버깅에 대해 논의합니다.
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 에 대한 여러 가지 중요한 핵심 개념을 배울 수 있습니다.
Python 프로그램은 일련의 문장으로 구성됩니다.
a = 3 + 4
b = a * 2
print(b)
각 문장은 줄 바꿈으로 종료됩니다. 문장은 제어가 파일의 끝에 도달할 때까지 하나씩 순차적으로 실행됩니다.
주석은 실행되지 않는 텍스트입니다.
a = 3 + 4
## This is a comment
b = a * 2
print(b)
주석은 #로 표시되며 해당 줄의 끝까지 확장됩니다.
변수는 값의 이름입니다. a 부터 z 까지의 문자 (소문자 및 대문자) 를 사용할 수 있습니다. 밑줄 문자 _도 사용할 수 있습니다. 숫자도 변수 이름의 일부가 될 수 있지만, 첫 번째 문자로는 사용할 수 없습니다.
height = 442 ## valid
_height = 442 ## valid
height2 = 442 ## valid
2height = 442 ## invalid
변수는 값의 타입으로 선언될 필요가 없습니다. 타입은 변수 이름이 아닌 오른쪽에 있는 값과 연관됩니다.
height = 442 ## An integer
height = 442.0 ## Floating point
height = 'Really tall' ## A string
Python 은 동적 타입 언어입니다. 프로그램이 실행됨에 따라 변수의 "타입"은 현재 할당된 값에 따라 변경될 수 있습니다.
Python 은 대소문자를 구분합니다. 대문자와 소문자는 서로 다른 문자로 간주됩니다. 다음은 모두 서로 다른 변수입니다.
name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'
언어 구문은 항상 소문자입니다.
while x < 0: ## OK
WHILE x < 0: ## ERROR
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 아래에 들여쓰기된 문장이 실행됩니다.
들여쓰기는 함께 묶이는 문장 그룹을 나타내는 데 사용됩니다. 이전 예제를 살펴보겠습니다.
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() 문은 들여쓰기되지 않았으므로 루프에 속하지 않습니다. 빈 줄은 가독성을 위한 것입니다. 실행에는 영향을 미치지 않습니다.
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
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')
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
입력된 사용자 입력을 한 줄 읽으려면 input() 함수를 사용합니다.
name = input('Enter your name:')
print('Your name is', name)
input은 사용자에게 프롬프트를 출력하고 응답을 반환합니다. 이것은 작은 프로그램, 학습 연습 또는 간단한 디버깅에 유용합니다. 실제 프로그램에서는 널리 사용되지 않습니다.
때로는 빈 코드 블록을 지정해야 합니다. 키워드 pass가 이를 위해 사용됩니다.
if a > b:
pass
else:
print('Computer says false')
이것은 또한 "no-op" 문이라고도 합니다. 아무것도 하지 않습니다. 나중에 추가될 수 있는 문장의 자리 표시자 역할을 합니다.
이것은 Python 파일을 생성하고 실행해야 하는 첫 번째 일련의 연습입니다. 이 시점부터 ~/project/ 디렉토리에서 파일을 편집한다고 가정합니다. 적절한 위치를 찾는 데 도움이 되도록, 적절한 파일 이름으로 여러 개의 빈 시작 파일이 생성되었습니다. 첫 번째 연습에서 사용되는 파일 bounce.py를 찾으십시오.
고무공이 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
다음 코드 조각은 시어스 타워 문제의 코드를 포함하고 있습니다. 또한 버그도 포함하고 있습니다.
## 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 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.