Python 요약정리

Posted by Albert 67Day 8Hour 41Min 40Sec ago [2025-12-01]

1. Python 기초

1.1 첫 프로그램

Python은 간단한 문법으로 시작할 수 있습니다.

' 주석은 '으로 시작합니다
print("Hello, World!")  ' 화면에 출력

' 여러 줄 주석
"""
이것은
여러 줄 주석입니다
"""

1.2 변수 선언

Python은 변수 타입을 자동으로 인식합니다.

' 변수 선언 (타입 지정 불필요)
name = "홍길동"
age = 25
height = 175.5
is_student = True

print(f"이름: {name}, 나이: {age}")  ' f-string 사용

2. 데이터 타입과 변수

2.1 기본 데이터 타입

' 숫자형
integer_num = 10           ' 정수
float_num = 3.14          ' 실수
complex_num = 3 + 4j      ' 복소수

' 문자열
text = "Python"
multi_line = """여러 줄
문자열"""

' 불린
is_true = True
is_false = False

' 타입 확인
print(type(integer_num))  ' <class 'int'>

2.2 문자열 연산

' 문자열 결합
greeting = "Hello" + " " + "World"

' 문자열 반복
repeated = "Ha" * 3  ' "HaHaHa"

' 문자열 인덱싱과 슬라이싱
text = "Python"
print(text[0])      ' 'P' (첫 번째 문자)
print(text[-1])     ' 'n' (마지막 문자)
print(text[0:3])    ' 'Pyt' (0~2번 인덱스)
print(text[2:])     ' 'thon' (2번부터 끝까지)

' 문자열 메서드
print(text.upper())       ' 'PYTHON'
print(text.lower())       ' 'python'
print(text.replace('P', 'J'))  ' 'Jython'

2.3 형변환

' 문자열을 숫자로
num_str = "123"
num = int(num_str)

' 숫자를 문자열로
age = 25
age_str = str(age)

' 실수를 정수로
pi = 3.14
int_pi = int(pi)  ' 3

3. 제어문

3.1 조건문 (if-elif-else)

score = 85

if score >= 90:
    print("A등급")
elif score >= 80:
    print("B등급")
elif score >= 70:
    print("C등급")
else:
    print("D등급")

' 삼항 연산자
result = "합격" if score >= 60 else "불합격"

3.2 반복문 - for

' 리스트 반복
fruits = ["사과", "바나나", "오렌지"]
for fruit in fruits:
    print(fruit)

' 범위 반복
for i in range(5):  ' 0, 1, 2, 3, 4
    print(i)

for i in range(1, 6):  ' 1, 2, 3, 4, 5
    print(i)

' enumerate로 인덱스와 값 함께 가져오기
for idx, fruit in enumerate(fruits):
    print(f"{idx}: {fruit}")

3.3 반복문 - while

' while 반복
count = 0
while count < 5:
    print(count)
    count += 1

' break와 continue
for i in range(10):
    if i == 3:
        continue  ' 3일 때 건너뛰기
    if i == 7:
        break     ' 7일 때 반복 종료
    print(i)

4. 함수

4.1 기본 함수

' 함수 정의
def greet(name):
    return f"안녕하세요, {name}님!"

' 함수 호출
message = greet("홍길동")
print(message)

' 매개변수 기본값
def introduce(name, age=20):
    return f"{name}, {age}세"

print(introduce("김철수"))          ' 김철수, 20세
print(introduce("이영희", 25))      ' 이영희, 25세

4.2 다양한 매개변수

' 가변 인자 (*args)
def sum_all(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

print(sum_all(1, 2, 3, 4, 5))  ' 15

' 키워드 인자 (**kwargs)
def print_info(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

print_info(name="홍길동", age=25, city="서울")

4.3 람다 함수

' 람다 함수 (익명 함수)
square = lambda x: x ** 2
print(square(5))  ' 25

' 리스트와 함께 사용
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  ' [1, 4, 9, 16, 25]

5. 자료구조

5.1 리스트 (List)

' 리스트 생성
fruits = ["사과", "바나나", "오렌지"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]

' 리스트 메서드
fruits.append("포도")           ' 끝에 추가
fruits.insert(1, "딸기")        ' 특정 위치에 추가
fruits.remove("바나나")         ' 값으로 제거
popped = fruits.pop()          ' 마지막 요소 제거 및 반환
fruits.sort()                  ' 정렬
fruits.reverse()               ' 뒤집기

' 리스트 컴프리헨션
squares = [x**2 for x in range(10)]
even_squares = [x**2 for x in range(10) if x % 2 == 0]

5.2 튜플 (Tuple)

' 튜플 (변경 불가능)
coordinates = (10, 20)
person = ("홍길동", 25, "서울")

' 튜플 언패킹
x, y = coordinates
name, age, city = person

' 튜플은 변경 불가
' coordinates[0] = 15  ' 오류 발생!

5.3 딕셔너리 (Dictionary)

' 딕셔너리 생성
person = {
    "name": "홍길동",
    "age": 25,
    "city": "서울"
}

' 값 접근
print(person["name"])           ' 홍길동
print(person.get("age"))        ' 25

' 값 추가/수정
person["job"] = "개발자"
person["age"] = 26

' 딕셔너리 메서드
keys = person.keys()            ' 모든 키
values = person.values()        ' 모든 값
items = person.items()          ' (키, 값) 쌍

' 딕셔너리 컴프리헨션
squares_dict = {x: x**2 for x in range(5)}

5.4 셋 (Set)

' 셋 (중복 없음, 순서 없음)
fruits = {"사과", "바나나", "오렌지"}
fruits.add("포도")
fruits.remove("바나나")

' 집합 연산
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

union = set1 | set2              ' 합집합: {1, 2, 3, 4, 5, 6}
intersection = set1 & set2       ' 교집합: {3, 4}
difference = set1 - set2         ' 차집합: {1, 2}

6. 객체지향 프로그래밍

6.1 클래스 기본

' 클래스 정의
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def introduce(self):
        return f"제 이름은 {self.name}이고, {self.age}세입니다."
    
    def birthday(self):
        self.age += 1

' 객체 생성
person1 = Person("홍길동", 25)
print(person1.introduce())
person1.birthday()
print(person1.age)  ' 26

6.2 상속

' 부모 클래스
class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        pass

' 자식 클래스
class Dog(Animal):
    def speak(self):
        return f"{self.name}가 멍멍!"

class Cat(Animal):
    def speak(self):
        return f"{self.name}가 야옹!"

dog = Dog("바둑이")
cat = Cat("나비")
print(dog.speak())  ' 바둑이가 멍멍!
print(cat.speak())  ' 나비가 야옹!

6.3 클래스 메서드와 정적 메서드

class Calculator:
    pi = 3.14159  ' 클래스 변수
    
    def __init__(self, name):
        self.name = name
    
    ' 인스턴스 메서드
    def add(self, a, b):
        return a + b
    
    ' 클래스 메서드
    @classmethod
    def circle_area(cls, radius):
        return cls.pi * radius ** 2
    
    ' 정적 메서드
    @staticmethod
    def multiply(a, b):
        return a * b

calc = Calculator("기본계산기")
print(calc.add(3, 5))                    ' 8
print(Calculator.circle_area(5))        ' 78.53975
print(Calculator.multiply(4, 5))        ' 20

7. 파일 처리

7.1 파일 읽기/쓰기

' 파일 쓰기
with open("example.txt", "w", encoding="utf-8") as file:
    file.write("안녕하세요\n")
    file.write("Python 파일 처리입니다\n")

' 파일 읽기
with open("example.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)

' 한 줄씩 읽기
with open("example.txt", "r", encoding="utf-8") as file:
    for line in file:
        print(line.strip())

' 파일 추가
with open("example.txt", "a", encoding="utf-8") as file:
    file.write("추가 내용\n")

8. 예외 처리

8.1 try-except

' 기본 예외 처리
try:
    number = int(input("숫자를 입력하세요: "))
    result = 10 / number
    print(f"결과: {result}")
except ValueError:
    print("올바른 숫자를 입력하세요!")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다!")
except Exception as e:
    print(f"오류 발생: {e}")
else:
    print("오류 없이 실행됨")
finally:
    print("항상 실행되는 코드")

8.2 사용자 정의 예외

' 사용자 정의 예외 클래스
class InvalidAgeError(Exception):
    def __init__(self, age):
        self.age = age
        super().__init__(f"유효하지 않은 나이입니다: {age}")

def check_age(age):
    if age < 0 or age > 150:
        raise InvalidAgeError(age)
    return "유효한 나이입니다"

try:
    print(check_age(200))
except InvalidAgeError as e:
    print(e)

9. 모듈과 패키지

9.1 모듈 사용

' 내장 모듈 사용
import math
import random
import datetime

' math 모듈
print(math.sqrt(16))        ' 4.0
print(math.pi)              ' 3.141592...

' random 모듈
print(random.randint(1, 10))        ' 1~10 사이 랜덤 정수
print(random.choice(['a', 'b', 'c']))  ' 랜덤 선택

' datetime 모듈
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))

' 특정 함수만 import
from math import sqrt, pi
print(sqrt(25))

' 별칭 사용
import numpy as np  ' numpy가 설치되어 있다면

10. 고급 기능

10.1 데코레이터

' 데코레이터 정의
def timer_decorator(func):
    import time
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 실행시간: {end - start:.4f}초")
        return result
    return wrapper

' 데코레이터 사용
@timer_decorator
def slow_function():
    import time
    time.sleep(1)
    return "완료"

slow_function()

10.2 제너레이터

' 제너레이터 함수
def number_generator(n):
    for i in range(n):
        yield i ** 2

' 제너레이터 사용 (메모리 효율적)
gen = number_generator(5)
for num in gen:
    print(num)

' 제너레이터 표현식
squares = (x**2 for x in range(10))
print(list(squares))

10.3 컨텍스트 매니저

' 사용자 정의 컨텍스트 매니저
class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self.file = None
    
    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.file:
            self.file.close()

' 사용
with FileManager("test.txt", "w") as f:
    f.write("컨텍스트 매니저 테스트")

10.4 리스트 고급 기능

' filter, map, reduce
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

' filter: 조건에 맞는 요소만
even = list(filter(lambda x: x % 2 == 0, numbers))

' map: 모든 요소에 함수 적용
squared = list(map(lambda x: x**2, numbers))

' reduce: 누적 계산
from functools import reduce
total = reduce(lambda x, y: x + y, numbers)

' zip: 여러 리스트 결합
names = ["홍길동", "김철수", "이영희"]
ages = [25, 30, 28]
combined = list(zip(names, ages))
print(combined)  ' [('홍길동', 25), ('김철수', 30), ('이영희', 28)]

10.5 언패킹과 확장

' 언패킹
numbers = [1, 2, 3, 4, 5]
first, *rest, last = numbers
print(first)  ' 1
print(rest)   ' [2, 3, 4]
print(last)   ' 5

' 딕셔너리 병합
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
merged = {**dict1, **dict2}

' 리스트 확장
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = [*list1, *list2]

실전 예제: 간단한 학생 관리 프로그램

class Student:
    def __init__(self, name, student_id):
        self.name = name
        self.student_id = student_id
        self.grades = {}
    
    def add_grade(self, subject, score):
        self.grades[subject] = score
    
    def get_average(self):
        if not self.grades:
            return 0
        return sum(self.grades.values()) / len(self.grades)
    
    def __str__(self):
        return f"학생: {self.name} (ID: {self.student_id})"

class StudentManager:
    def __init__(self):
        self.students = {}
    
    def add_student(self, name, student_id):
        student = Student(name, student_id)
        self.students[student_id] = student
        return student
    
    def get_student(self, student_id):
        return self.students.get(student_id)
    
    def print_all_students(self):
        for student in self.students.values():
            print(f"{student} - 평균: {student.get_average():.2f}")

' 사용 예제
manager = StudentManager()

' 학생 추가
student1 = manager.add_student("홍길동", "2024001")
student2 = manager.add_student("김철수", "2024002")

' 성적 추가
student1.add_grade("수학", 90)
student1.add_grade("영어", 85)
student2.add_grade("수학", 95)
student2.add_grade("영어", 88)

' 전체 학생 출력
manager.print_all_students()

학습 팁

  1. 단계별 학습: 기초부터 차근차근 배우세요
  2. 실습 중심: 코드를 직접 작성하고 실행해보세요
  3. 프로젝트 만들기: 배운 내용으로 작은 프로젝트를 만들어보세요
  4. 공식 문서 읽기: Python 공식 문서는 최고의 학습 자료입니다
  5. 커뮤니티 활용: Stack Overflow, GitHub 등을 활용하세요

Python은 배우기 쉽지만 강력한 언어입니다. 꾸준히 연습하면 누구나 능숙하게 사용할 수 있습니다!




LIST

Copyright © 2014 visionboy.me All Right Reserved.