====== 파이썬 시작 가이드 ======
이 문서는 파이썬(Python) 프로그래밍 언어의 기본적인 개념부터 실제 활용 예제까지 다루는 종합 가이드입니다. 파이썬은 배우기 쉽고 강력하며 다양한 분야에서 활용되는 언어로, 초보자부터 숙련된 개발자까지 모두에게 유용합니다. 이 가이드를 통해 파이썬의 핵심 문법을 이해하고, 간단한 프로그램을 직접 작성할 수 있는 기반을 마련할 수 있습니다.
{{wiki:it:programming:python_1.png?600}}
===== 1. 파이썬 개요 =====
파이썬은 1991년 귀도 반 로섬(Guido van Rossum)이 개발한 **고수준(high-level)**, 인터프리터(interpreted), 객체 지향(object-oriented) 프로그래밍 언어입니다. 간결하고 읽기 쉬운 문법으로 유명하며, 다양한 운영체제에서 호환됩니다.
* **고수준(high-level)** 은 우수하다는 말이 아닌, 기계어보다 사람의 언어에 가깝다는 의미입니다.
* **인터프리터(interpreted)** 는 코드를 실행 시점에 한 줄씩 해석하여 실행하는 방식을 의미합니다.
* **객체 지향(object-oriented)** 은 프로그램을 객체들의 상호작용으로 구성하는 프로그래밍 패러다임을 의미합니다.
----
==== 1) 파이썬의 특징 ====
* **쉬운 학습 곡선**: 다른 언어에 비해 문법이 직관적이고 간결하여 빠르게 배울 수 있습니다.
* **다양한 활용 분야**: 웹 개발, 데이터 과학, 인공지능, 자동화, 게임 개발 등 광범위한 분야에서 사용됩니다.
* **강력한 라이브러리 생태계**: 수많은 내장 모듈과 외부 라이브러리(예: NumPy, Pandas, Django, Flask, TensorFlow)를 통해 복잡한 기능을 쉽게 구현할 수 있습니다.
* **크로스 플랫폼**: Windows, macOS, Linux 등 다양한 운영체제에서 동일하게 동작합니다.
* **오픈 소스**: 누구나 자유롭게 사용하고 기여할 수 있습니다.
----
==== 2) 파이썬 개발 환경 설정 ====
파이썬 코드를 실행하기 위해서는 파이썬 인터프리터가 설치되어 있어야 합니다. 공식 웹사이트에서 다운로드하여 설치할 수 있습니다.
* **파이썬 설치**:
- 공식 웹사이트 (''python.org'')에서 최신 버전 다운로드.
- 설치 시 "Add Python to PATH" 옵션을 **반드시** 체크하여 환경 변수에 추가합니다.
* **통합 개발 환경 (IDE) / 코드 에디터**:
- **PyCharm**: 파이썬 개발에 특화된 강력한 IDE.
- **VS Code**: 가볍고 확장성이 뛰어난 코드 에디터 (파이썬 확장 설치 필요).
- **Jupyter Notebook**: 데이터 과학 및 대화형 개발에 유용.
===== 2. 파이썬 기본 문법 =====
이 섹션에서는 파이썬 프로그래밍의 가장 기본적인 문법 요소들을 다룹니다.
----
==== 1) 변수와 자료형 ====
변수는 값을 저장하는 공간이며, 파이썬은 동적 타이핑(dynamic typing)을 지원하여 변수 선언 시 자료형을 명시할 필요가 없습니다.
* **기본 자료형**:
- **정수 (Integer)**: age = 30
- **부동 소수점 (Float)**: pi = 3.14159
- **문자열 (String)**: name = "Alice" (작은따옴표 또는 큰따옴표 사용)
- **불리언 (Boolean)**: is_active = True (True 또는 False)
* **변수 할당 예시**:
# 정수형 변수
num_int = 10
# 부동 소수점 변수
num_float = 3.14
# 문자열 변수
text_str = "Hello, Python!"
# 불리언 변수
is_valid = True
print(num_int)
print(num_float)
print(text_str)
print(is_valid)
----
==== 2) 연산자 ====
파이썬은 다양한 종류의 연산자를 제공합니다.
^ 연산자 종류 ^ 설명 ^ 예시 ^ 결과 ^
| 산술 연산자 | 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 거듭제곱 | %%5 + 2%%, %%5 - 2%%, %%5 * 2%%, %%5 / 2%%, %%5 % 2%%, %%5 ** 2%% | 7, 3, 10, 2.5, 1, 25 |
| 비교 연산자 | 두 값의 크기 비교 | %%5 == 2%%, %%5 != 2%%, %%5 > 2%%, %%5 < 2%%, %%5 >= 2%%, %%5 <= 2%% | False, True, True, False, True, False |
| 논리 연산자 | 조건들을 조합 | %%True and False%%, %%True or False%%, %%not True%% | False, True, False |
| 할당 연산자 | 변수에 값 할당 | %%x = 10%%, %%x += 5%% (x = x + 5) | x는 10, x는 15 |
----
==== 3) 조건문 (if, elif, else) ====
특정 조건에 따라 코드 블록을 실행할 때 사용합니다.
score = 85
if score >= 90:
print("학점: A")
elif score >= 80:
print("학점: B")
elif score >= 70:
print("학점: C")
else:
print("학점: D 또는 F")
----
==== 4) 반복문 (for, while) ====
코드 블록을 여러 번 반복 실행할 때 사용합니다.
* **for 반복문**:
- 주로 리스트, 튜플, 문자열 등 //반복 가능한(iterable)// 객체의 요소를 하나씩 순회할 때 사용합니다.
# 리스트의 각 요소 출력
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
# 0부터 4까지 출력 (range(5)는 0, 1, 2, 3, 4를 생성)
for i in range(5):
print(i)
* **while 반복문**:
- 특정 조건이 //참(True)//인 동안 코드 블록을 반복 실행합니다.
count = 0
while count < 5:
print("Count:", count)
count += 1 # count = count + 1
===== 3. 함수 =====
함수는 특정 작업을 수행하는 코드 블록을 묶어 재사용 가능하게 만든 것입니다.
----
==== 1) 함수 정의 및 호출 ====
`def` 키워드를 사용하여 함수를 정의하고, 함수 이름 뒤에 괄호를 붙여 호출합니다.
# 매개변수가 없는 함수
def greet():
print("안녕하세요!")
greet() # 함수 호출
# 매개변수가 있는 함수
def greet_name(name):
print(f"안녕하세요, {name}님!") # f-string 사용
greet_name("김철수") # 함수 호출
# 반환값이 있는 함수
def add(a, b):
return a + b
result = add(5, 3)
print("덧셈 결과:", result)
----
==== 2) 기본 매개변수와 가변 인자 ====
* **기본 매개변수**:
- 함수 정의 시 매개변수에 기본값을 할당하여, 호출 시 해당 매개변수를 생략할 수 있게 합니다.
def introduce(name, age=30):
print(f"이름: {name}, 나이: {age}")
introduce("이영희") # 나이 생략 시 기본값 30 사용
introduce("박민준", 25) # 나이 지정 시 지정된 값 사용
* **가변 인자 (%%*args%%, %%**kwargs%%)**:
- %%*args%%: 개수 제한 없이 위치 인자를 받을 때 사용합니다. 튜플 형태로 전달됩니다.
- %%**kwargs%%: 개수 제한 없이 키워드 인자를 받을 때 사용합니다. 딕셔너리 형태로 전달됩니다.
def print_args(*args):
print("위치 인자:", args)
print_args(1, 2, "hello")
def print_kwargs(**kwargs):
print("키워드 인자:", kwargs)
print_kwargs(name="Alice", age=25)
===== 4. 데이터 구조 =====
파이썬은 데이터를 효율적으로 저장하고 관리하기 위한 다양한 내장 데이터 구조를 제공합니다.
----
==== 1) 리스트 (List) ====
여러 개의 값을 순서대로 저장하는 **변경 가능한(mutable)** 컬렉션입니다. 대괄호 `[]`를 사용합니다.
* **특징**:
- 순서가 있습니다 (인덱싱 가능).
- 중복된 값을 허용합니다.
- 다양한 자료형을 함께 저장할 수 있습니다.
* **주요 연산**:
- ''append()'': 요소 추가
- ''insert()'': 특정 위치에 요소 삽입
- ''remove()'': 요소 제거
- ''pop()'': 특정 인덱스의 요소 제거 및 반환
- ''len()'': 길이 반환
my_list = [1, "hello", 3.14, True]
print("원본 리스트:", my_list)
my_list.append(5)
print("요소 추가 후:", my_list)
my_list.insert(1, "world")
print("요소 삽입 후:", my_list)
my_list.remove("hello")
print("요소 제거 후:", my_list)
popped_item = my_list.pop(0)
print("제거된 요소:", popped_item)
print("pop 후 리스트:", my_list)
print("리스트 길이:", len(my_list))
----
==== 2) 튜플 (Tuple) ====
여러 개의 값을 순서대로 저장하는 **변경 불가능한(immutable)** 컬렉션입니다. 소괄호 `()`를 사용합니다.
* **특징**:
- 리스트와 유사하지만, 한 번 생성되면 요소를 변경하거나 추가/삭제할 수 없습니다.
- 주로 데이터의 무결성을 보장해야 할 때 사용됩니다.
my_tuple = (1, "apple", 3.14)
print("튜플:", my_tuple)
# 튜플은 변경 불가능하므로 다음 코드는 오류 발생:
# my_tuple[0] = 10
# my_tuple.append(5)
print("첫 번째 요소:", my_tuple[0])
print("튜플 길이:", len(my_tuple))
----
==== 3) 딕셔너리 (Dictionary) ====
`키(key)`와 `값(value)`의 쌍으로 이루어진 **변경 가능한(mutable)** 컬렉션입니다. 중괄호 `{}`를 사용합니다.
* **특징**:
- 순서가 없습니다 (Python 3.7+부터는 삽입 순서 유지).
- 키는 고유해야 하며, 변경 불가능한 자료형(문자열, 숫자, 튜플)만 가능합니다.
- 값을 키를 통해 빠르게 검색할 수 있습니다.
* **주요 연산**:
- ''dict[key] = value'': 요소 추가 또는 변경
- ''dict.get(key)'': 키에 해당하는 값 가져오기 (키가 없으면 None 반환)
- ''del dict[key]'': 요소 제거
- ''dict.keys()'': 모든 키 반환
- ''dict.values()'': 모든 값 반환
- ''dict.items()'': 모든 키-값 쌍 반환
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print("원본 딕셔너리:", my_dict)
# 값 접근
print("이름:", my_dict["name"])
print("나이 (get 메서드):", my_dict.get("age"))
# 값 변경 및 추가
my_dict["age"] = 26
my_dict["job"] = "Engineer"
print("변경 및 추가 후:", my_dict)
# 요소 제거
del my_dict["city"]
print("요소 제거 후:", my_dict)
print("모든 키:", my_dict.keys())
print("모든 값:", my_dict.values())
print("모든 항목:", my_dict.items())
----
==== 4) 세트 (Set) ====
중복되지 않는 요소들을 저장하는 **변경 가능한(mutable)** 컬렉션입니다. 중괄호 `{}`를 사용하지만, 키-값 쌍이 아닌 단일 요소들을 저장합니다.
* **특징**:
- 순서가 없습니다.
- 중복된 요소를 허용하지 않습니다.
- 수학의 집합 연산(합집합, 교집합, 차집합)에 유용합니다.
* **주요 연산**:
- ''add()'': 요소 추가
- ''remove()'': 요소 제거
- ''union()'': 합집합
- ''intersection()'': 교집합
- ''difference()'': 차집합
my_set = {1, 2, 3, 4, 3, 2} # 중복 제거됨
print("원본 세트:", my_set)
my_set.add(5)
print("요소 추가 후:", my_set)
my_set.remove(1)
print("요소 제거 후:", my_set)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print("합집합:", set1.union(set2))
print("교집합:", set1.intersection(set2))
print("차집합 (set1 - set2):", set1.difference(set2))
===== 5. 모듈과 패키지 =====
모듈은 파이썬 코드를 담고 있는 파일(`''.py''` 확장자)이며, 패키지는 여러 모듈을 계층적으로 조직한 디렉토리입니다. 코드를 재사용하고 관리하기 쉽게 만들어줍니다.
----
==== 1) 모듈 임포트 ====
`import` 키워드를 사용하여 다른 모듈의 기능을 가져올 수 있습니다.
# math 모듈 전체 임포트
import math
print("파이:", math.pi)
# math 모듈에서 특정 함수만 임포트
from math import sqrt, ceil
print("루트 9:", sqrt(9))
print("올림 3.14:", ceil(3.14))
# 모듈에 별칭 부여
import random as rd
print("랜덤 숫자:", rd.randint(1, 10))
----
==== 2) 사용자 정의 모듈 ====
새로운 `''.py''` 파일을 생성하여 자신만의 모듈을 만들 수 있습니다. 예를 들어, `''my_module.py''` 파일을 만들고 그 안에 함수를 정의합니다.
* **''my_module.py'' 내용**:
# my_module.py
def hello(name):
return f"안녕하세요, {name}님! (from my_module)"
MY_CONSTANT = 123
* **다른 파일에서 사용**:
# main_script.py
import my_module
message = my_module.hello("DokuWiki")
print(message)
print("상수 값:", my_module.MY_CONSTANT)
===== 6. 파일 입출력 =====
파이썬을 사용하여 파일을 읽고 쓰는 방법을 알아봅니다.
----
==== 1) 파일 열기 및 닫기 ====
''open()'' 함수를 사용하여 파일을 열고, ''close()'' 메서드로 파일을 닫습니다. ''with'' 문을 사용하면 파일을 자동으로 닫아주므로 더 안전하고 편리합니다.
^ 모드 ^ 설명 ^
| 'r' | 읽기 모드 (기본값). 파일이 없으면 오류. |
| 'w' | 쓰기 모드. 파일이 없으면 생성, 있으면 내용 삭제 후 새로 작성. |
| 'a' | 추가 모드. 파일이 없으면 생성, 있으면 기존 내용 끝에 추가. |
| 'x' | 배타적 생성 모드. 파일이 있으면 오류, 없으면 생성. |
| 'b' | 바이너리 모드 (예: `'rb'`, `'wb'`). |
| 't' | 텍스트 모드 (기본값). |
# 파일 쓰기 (기존 내용 덮어쓰기)
with open("example.txt", "w", encoding="utf-8") as file:
file.write("첫 번째 줄입니다.\n")
file.write("두 번째 줄입니다.\n")
print("example.txt 파일에 쓰기 완료.")
# 파일 읽기
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print("\n--- example.txt 내용 ---")
print(content)
print("example.txt 파일 읽기 완료.")
# 파일 추가 쓰기
with open("example.txt", "a", encoding="utf-8") as file:
file.write("세 번째 줄이 추가되었습니다.\n")
print("example.txt 파일에 내용 추가 완료.")
# 다시 읽기
with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines() # 각 줄을 리스트로 반환
print("\n--- example.txt 내용 (줄 단위) ---")
for line in lines:
print(line.strip()) # strip()으로 줄바꿈 문자 제거
===== 7. 예외 처리 =====
프로그램 실행 중 발생할 수 있는 오류(예외)를 처리하여 프로그램이 비정상적으로 종료되는 것을 방지합니다. ''try'', ''except'', ''finally'' 블록을 사용합니다.
try:
# 잠재적으로 오류가 발생할 수 있는 코드
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
result = num1 / num2
print(f"나눗셈 결과: {result}")
except ValueError:
# ValueError 발생 시 처리
print("오류: 유효한 숫자를 입력해주세요.")
except ZeroDivisionError:
# ZeroDivisionError 발생 시 처리
print("오류: 0으로 나눌 수 없습니다.")
except Exception as e:
# 모든 예외를 잡는 일반적인 예외 처리
print(f"예상치 못한 오류 발생: {e}")
finally:
# 예외 발생 여부와 관계없이 항상 실행되는 코드
print("예외 처리 블록이 종료되었습니다.")
===== 8. 간단한 파이썬 예제 =====
앞서 배운 개념들을 활용하여 간단한 프로그램을 만들어봅니다.
----
==== 1) 사용자 입력과 조건문을 이용한 간단한 게임 ====
사용자에게 숫자를 맞추는 게임을 만들어봅니다.
import random
secret_number = random.randint(1, 10)
attempts = 0
print("1부터 10 사이의 숫자를 맞춰보세요!")
while True:
try:
guess = int(input("숫자를 입력하세요: "))
attempts += 1
if guess < secret_number:
print("더 큰 숫자입니다!")
elif guess > secret_number:
print("더 작은 숫자입니다!")
else:
print(f"정답입니다! {attempts}번 만에 맞추셨어요!")
break
except ValueError:
print("유효한 숫자를 입력해주세요.")
----
==== 2) 리스트와 반복문을 이용한 평균 계산기 ====
여러 숫자의 평균을 계산하는 프로그램입니다.
def calculate_average(numbers):
if not numbers: # 리스트가 비어있는지 확인
return 0
total = sum(numbers) # 내장 함수 sum() 사용
return total / len(numbers)
# 사용자로부터 숫자 입력 받기
input_numbers_str = input("숫자들을 쉼표(,)로 구분하여 입력하세요: ")
# 문자열을 쉼표로 분리하고 각 부분을 정수로 변환
try:
numbers_list = [int(num.strip()) for num in input_numbers_str.split(',')]
avg = calculate_average(numbers_list)
print(f"입력된 숫자들의 평균: {avg:.2f}") # 소수점 둘째 자리까지 표시
except ValueError:
print("잘못된 입력입니다. 숫자를 쉼표로 구분하여 입력해주세요.")
except Exception as e:
print(f"오류 발생: {e}")
====== 결론 ======
이 가이드를 통해 파이썬 프로그래밍의 기본적인 개념과 문법을 익히셨기를 바랍니다. 파이썬은 광범위한 분야에서 활용될 수 있는 강력한 도구이며, 이 가이드는 그 첫걸음일 뿐입니다.
* **다음 학습 단계**:
- **객체 지향 프로그래밍 (OOP)**: 클래스와 객체에 대해 학습합니다.
- **고급 데이터 구조**: 스택, 큐, 트리, 그래프 등.
- **특정 라이브러리 학습**:
- 웹 개발: ''Django'', ''Flask''
- 데이터 과학: ''NumPy'', ''Pandas'', ''Matplotlib''
- 인공지능/머신러닝: ''TensorFlow'', ''PyTorch'', ''scikit-learn''
- **실전 프로젝트**: 작은 프로젝트를 직접 만들어보면서 배운 내용을 적용하고 문제 해결 능력을 키웁니다.
꾸준한 연습과 탐구를 통해 파이썬 전문가로 성장하시길 응원합니다!