Raspberry Pi_Kor_23.5.3 Python 문법


Published Book on Amazon


All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1
All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)
최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


23.5.3  Python 문법 

 

23.5.3.1    Python 시작문

 

Python 프로그램을 시작할 때는 "#!"(shebang)으로 시작하는 것이 좋다. 이 행은 운영체제에게 Python 파일들을 어디에서 찾아야 하는지를 알려준다. 이 행은 IDLE 내에서 프로그램이 실행되거나 Terminal에서 별도로 "python" 명령을 호출할 때는 전혀 필요가 없고, 프로그램 파일명을 직접 호출하여 실행하는 경우에 필요한 것이다. Python으로 작성한 프로그램의 실행파일이 어디에 설치되어 있는지 상관없이 프로그램이 실행될 수 있도록 하기 위해 사용하는 것이다.

 

Python 프로그램의 첫 행은 통상 다음 문장으로 시작한다. 이 문장은 "/usr/bin/env" 명령으로 환경변수(environment variable) "$PATH"를 참조하여 python 프로그램이 있는 곳을 찾아서 실행한다는 의미이다.

 

#!/usr/bin/env python

 

이 행은 Raspberry Pi 시스템에 어떤 Linux 배포판을 사용하더라도, 운영체제가 Python의 위치를 찾을 때 문제없이 작동할 수 있도록 "$PATH" 환경변수을 참조하도록 지시한다. "$PATH" 변수는 실행 파일들이 저장되어 있는 디렉터리들의 목록을 가지고 있으며, 사용자가 console이나 Terminal 화면에서 실행할 프로그램 이름을 쳤을 때, 그 프로그램의 위치를 찾는데 사용된다.

 

어떤 Python 프로그램에서는 다음과 같이 시작하기도 하는데, 이것은 환경변수를 사용하여 프로그램이 있는 위치를 찾지 않고, 곧바로 "/usr/bin/python"에 있는 프로그램을 사용하라는 의미이다.

 

#!/usr/bin/python

 


 

23.5.3.2    간단히 인쇄하기

 

Python에서 "Hello world"를 인쇄하려면 다음과 같은 명령을 사용한다. 아주 간단하다.

 

print("Hello world")

 

 

23.5.3.3    프로그램 들여쓰기(indentation)

 

C와 같은 개발 언어에서는 내부에 함께 포함되는 여러 행들을 하나로 묶기 위해서 braces {  }를 사용하고, 내부포함을 시각적으로 표현하기 위해서 사용하는 각 행에 대한 들여쓰기는 개발자가 자유롭게 정렬하도록 하고 있다. 하지만 Python은 내부포함을 표시하기 위해서 braces {  }를 사용하지 않고, 대신 들여쓰기를 반드시 하도록 강력하게 요구하고 있다. 만약 들여쓰기를 하는 것은 단순히 보이는 모습을 정렬하는 것에 그치지 않고, 프로그램의 실행에 까지 영향을 미치게 되어 있다.

 

우선 아래에서 C 프로그램과 Python 프로그램의 차이점을 살펴보기 바란다. C 언어에서는 들여쓰기를 사용하여 프로그램 코드를 읽기 좋게 정렬하거나, 간단하게 압축할 수도 있어서 다양한 형태의 문장 배열이 가능하다.

 

// 들여쓰기가 잘 된 C 프로그램
int factorial(int x)
{
    if(x == 0) {
        return 1;
    } else {
        return x * factorial(x - 1);
    }
}
 
// 읽기 어렵게 쓰인 C:
int factorial(int x) { 
 if(x == 0) {return 1;} else
 {return x * factorial(x - 1); } }

 


 

다음은 이전의 C 프로그램과 동일한 내용의 Python 프로그램이다. Python에서는 C 언어에서와 같이 다양한 방식으로 배열하는 것이 허용되지 않고, 사전에 정해진 일정한 형식의 들여쓰기를 하도록 되어 있다.

 

def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)

 

다음은 Python에서 반복 처리를 위해서 순환 처리를 사용하는 사례이다.

 

for i in range(10):
    print("Hello")

 

위에서는 들여쓰기가 반드시 필요하다. 들여쓰기 된 두 번째 행은 순환 처리 내부의 일부이다. 만약 두 번째 행이 들여쓰기가 되어 있지 않으면 순환처리 밖에 있다는 것을 의미한다. 다음 예를 보자. code를 실행하면 두 "print" 문이 모두 순환 처리 내부에 있는 것으로 처리되어, 아래와 같은 결과가 나온다.

 

for i in range(2):
    print("A")
    print("B")

 

A
B
A
B

 


 

그럼 이제 내용은 그대로 두고 단지 들여쓰기만 조정해서 다시 실행해 보도록 하겠다. 이번에는 print("A") 문은 순환 처리 내부에 있고, print("B")는 순환 처리 밖에 있는 것으로 처리되어 다른 결과가 나온다.

 

for i in range(2):
    print("A")
print("B")

 

A
A
B

 

다음 예제는 "if" 문에서의 들여쓰기에 대한 것입니다. "True"인 경우 2개의 "print" 문이 실행되고, "False"인 경우 또 다른 2개의 "print" 문이 실행되도록 하기 위해서 block 단위로 처리해야 하는 문장들이 들여쓰기로 정렬되어 있는 것을 볼 수 있습니다.

 

if True:
    print("Answer")
    print("True")
else:
    print("Answer")
    print("False")   

 


 

23.5.3.4    변수(variable) 사용하기

 

프로그램 내에서 일시적으로 어떤 값을 저장하고자 할 때 변수를 사용한다. 변수에 값을 저장하기 위해서는 다음과 같이 사용한다.

 

name = "Bob"
age = 15

 

앞에서 이런 변수에 대해서 사전에 자료형(data type)을 지정하지 않았다. Python에서는 자료형(data type)이 자체적으로 추정되어 결정되고, 동적(dynamic)으로 변경할 수도 있다.

 

age = 15
age += 1  # increment age by 1
print(age)

 

 

23.5.3.5    주석(Comments)

 

주석(Comments)는 프로그램이 실행될 때 무시된다. 주석은 프로그램 작성자나 다른 사람이 나중에 참조할 수 있는 여러 가지 정보를 기록해 두는데 사용된다. 주석을 표시할 때는 # (hash) 기호를 사용한다. 문장의 처음부터 시작할 수도 있고, 다른 문장의 뒤에서 시작할 수도 있다. 만약 여러 행의 주석을 표시하려면, """  """ (triple quote)를 사용한다. 아래 code는 주석를 사용한 사례이다.  

 

# this test program
age = 15
print(age)     # age is printed
"""
This is a very simple Python program that prints "Hello".
That's all it does.
"""
print("Hello")

 


 

23.5.3.6    배열(list)

 

Python에서는 모든 자료형의 자료 집합을 표시할 때 list를 사용한다. 어떤 언어에서는 array라고도 한다. 배열을 표현할 때는 "[  ]" (square bracket)을 사용하고, 내부에서 item "," (comma)로 구분한다.

 

numbers = [1, 2, 3]

 

 

23.5.3.7    반복처리(Iteration)

 

어떤 자료형의 자료는 반복처리(iterable)가 가능하다. 이것은 내부에 포함되어 있는 자료에 대해서 순환처리(loop)가 가능하다는 것을 의미한다. 다음은 list에 대한 사례이다. 이것은 배열 "numbers"에 포함되어 있는 각 item에 대해서 값을 인쇄해 준다.

 

numbers = [1, 2, 3]
 
for number in numbers:
    print(number)

 

1
2
3

 

여기서 배열 "numbers" 속에 있는 각 item을 표시하기 위해서 "number"라고 사용한 것을 주의해서 보기 바란다. Python에서는 변수(variable)의 성격을 설명하는 단어를 사용하도록 권장하고 있는데, 배열에 대해서는 복수형(plural) 단어를 사용하고, item에 대해서는 단수형(singular) 단어를 사용하도록 권장하고 있다. 이렇게 하면 나중에 읽을 때 이해하기 쉽다.


 

반복처리가 가능한 또 다른 자료 유형들이 있다. 예를 들면 "string" 자료이다. 다음 code "dog_name"에 저장되어 있는 단어의 각 문자를 반복처리를 통해 인쇄를 해준다.

 

dog_name = "BINGO"
 
for char in dog_name:
    print(char)

 

B
I
N
G
O

 


 

23.5.3.8    "range"

 

정수(integer) 자료 유형은 반복처리(iteration)를 할 수 없다. 만약 그런 자료에 반복처리를 시도하면 오류가 발생한다. 예를 들어 다음과 같은 code를 실행해 보자. 그러면 아래와 같은 오류가 발생할 것이다.

 

for i in 3:
    print(i)

 

TypeError: 'int' object is not iterable


 

하지만 "range" function을 사용하면, 반복처리가 가능한 객체를 만들어 낼 수 있다. 다음 사례를 보자. 여기서 "range(3)" 0부터 2까지 세개의 숫자를 의미한다. "range(5)"는 숫자 0, 1, 2, 3, 4 (전체 5)를 의미한다. 만약 숫자 1부터 5까지의 자료가 필요하면 "range(1, 5)"를 사용한다.

 

for i in range(3):
    print(i)

 

 

 


 

23.5.3.9    "len"

 

문자열(string)이나 배열(list)의 크기를 알고 싶으면 "len" function을 사용할 수 있다.

 

name = "Jamie"
print(len(name))  # print 5
 
names = ["Bob", "Jane", "James", "Alice"]
print(len(names))  # print 4

 

 

 

23.5.3.10  "if"

 

프로그램의 처리 흐름을 조정하고 싶으면 "if" 문을 사용한다.

 

name = "Joe"
 
if len(name) > 3:
    print("Nice name,")
    print(name)
else:
    print("That's a short name,")
    print(name)

 

 


 

23.5.3.11  순환 처리(loop processing)

 

특정 작업을 반복해서 실행하고자 하면 순환처리(loop processing)를 이용할 수 있다.

 

   "while"

 

"while" 문은 특정 조건이 만족할 때까지 지정된 작업을 반복적으로 처리해 준다

 

아래 사례는 사용자가 "hello"라고 입력하면 실행을 멈춘다.   

 

 n = raw_input("Please enter 'hello':")
while n.strip() != 'hello':
    n = raw_input("Please enter 'hello':")

 

 

   "for"

 

"for" 문은 지정된 특정 범위에 대해서 지정된 작업을 반복적으로 처리해 준다

 

아래 사례는 "words" 변수 저장된 각각의 단어와 그 길이를 인쇄해 준다.  

 

# Measure some strings:
words = ['cat', 'window', 'defenestrate']
for w in words:
    print(w, len(w))

 


 

Leave a Reply