====== 파이썬 시작 가이드 ====== 이 문서는 파이썬(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'' - **실전 프로젝트**: 작은 프로젝트를 직접 만들어보면서 배운 내용을 적용하고 문제 해결 능력을 키웁니다. 꾸준한 연습과 탐구를 통해 파이썬 전문가로 성장하시길 응원합니다!