파이썬 기초 문법 튜토리얼

Python 기초 문법 튜토리얼: 프로그래밍의 첫걸음

Python 기초 문법 튜토리얼: 프로그래밍의 첫걸음

Python 소개

Python은 간결하고 읽기 쉬운 문법으로 유명한 프로그래밍 언어입니다. 초보자가 배우기 쉬우면서도 강력한 기능을 제공하여 웹 개발, 데이터 분석, 인공지능, 자동화 등 다양한 분야에서 활용됩니다. Python의 철학은 “가독성이 중요하다(Readability counts)”로, 코드를 작성하는 것만큼 읽기 쉬운 코드를 작성하는 것을 중요하게 생각합니다.

설치 및 실행 방법

Python을 시작하려면 먼저 Python을 설치해야 합니다. python.org에서 최신 버전을 다운로드할 수 있습니다:

# Python 버전 확인
python --version

# Python 대화형 셸 실행
python

# Python 스크립트 실행
python script.py

1. 변수와 자료형

변수란?

변수는 데이터를 저장하는 공간입니다. Python에서는 변수를 선언할 때 자료형을 명시하지 않아도 되며, 값을 할당하면 자동으로 자료형이 결정됩니다.

# 변수 선언과 할당
# Python에서는 변수 타입을 명시하지 않습니다
name = "김철수"  # 문자열
age = 25  # 정수
height = 175.5  # 실수
is_student = True  # 불린

print("이름:", name)
print("나이:", age)
print("키:", height)
print("학생 여부:", is_student)

# 변수의 타입 확인
print("\n변수의 자료형 확인:")
print("name의 타입:", type(name))
print("age의 타입:", type(age))
print("height의 타입:", type(height))
print("is_student의 타입:", type(is_student))

# 다중 할당
x, y, z = 10, 20, 30
print(f"\nx = {x}, y = {y}, z = {z}")

# 변수 값 교환
a, b = 5, 10
print(f"교환 전: a = {a}, b = {b}")
a, b = b, a  # Python의 특별한 기능
print(f"교환 후: a = {a}, b = {b}")

변수 명명 규칙

Python에서 변수 이름을 지을 때는 몇 가지 규칙을 따라야 합니다. 변수명은 영문자, 숫자, 언더스코어(_)로 구성되며, 숫자로 시작할 수 없습니다. 또한 Python의 예약어는 변수명으로 사용할 수 없습니다.

# 올바른 변수명
user_name = "홍길동"
userAge = 30
_private_var = "비공개"
MAX_SIZE = 100  # 상수는 대문자로 표현

# 잘못된 변수명 (실행 시 에러 발생)
# 2name = "error"  # 숫자로 시작
# user-name = "error"  # 하이픈 사용 불가
# class = "error"  # 예약어 사용 불가

# Python 예약어 확인
import keyword
print("Python 예약어 목록:")
print(keyword.kwlist)

2. 숫자형 데이터

Python은 정수(int), 실수(float), 복소수(complex) 등 다양한 숫자형 데이터를 지원합니다. 각 타입은 서로 변환이 가능하며, 다양한 수학 연산을 수행할 수 있습니다.

# 정수형 (int)
integer_num = 42
binary_num = 0b1010  # 2진수 (10)
octal_num = 0o12  # 8진수 (10)
hex_num = 0xFF  # 16진수 (255)

print(f"정수: {integer_num}")
print(f"2진수 0b1010 = {binary_num}")
print(f"8진수 0o12 = {octal_num}")
print(f"16진수 0xFF = {hex_num}")

# 실수형 (float)
float_num = 3.14159
scientific_num = 1.23e-4  # 과학적 표기법

print(f"\n실수: {float_num}")
print(f"과학적 표기법: {scientific_num}")

# 기본 연산
a, b = 10, 3
print(f"\n기본 연산 (a={a}, b={b}):")
print(f"덧셈: {a} + {b} = {a + b}")
print(f"뺄셈: {a} - {b} = {a - b}")
print(f"곱셈: {a} * {b} = {a * b}")
print(f"나눗셈: {a} / {b} = {a / b}")
print(f"정수 나눗셈: {a} // {b} = {a // b}")
print(f"나머지: {a} % {b} = {a % b}")
print(f"거듭제곱: {a} ** {b} = {a ** b}")

# 수학 함수 사용
import math

print(f"\n수학 함수:")
print(f"절댓값: abs(-5) = {abs(-5)}")
print(f"반올림: round(3.7) = {round(3.7)}")
print(f"제곱근: math.sqrt(16) = {math.sqrt(16)}")
print(f"올림: math.ceil(3.2) = {math.ceil(3.2)}")
print(f"내림: math.floor(3.8) = {math.floor(3.8)}")

3. 문자열 다루기

문자열은 텍스트 데이터를 다루는 기본 자료형입니다. Python에서는 작은따옴표(”) 또는 큰따옴표(“”)로 문자열을 표현하며, 다양한 문자열 메서드를 제공합니다.

# 문자열 생성
single_quote = 'Python은 재미있다'
double_quote = "Python은 강력하다"
multi_line = """여러 줄
문자열을
작성할 수 있습니다"""

print("단일 따옴표:", single_quote)
print("이중 따옴표:", double_quote)
print("여러 줄 문자열:")
print(multi_line)

# 문자열 연산
str1 = "Hello"
str2 = "World"
print(f"\n문자열 연결: {str1} + {str2} = {str1 + ' ' + str2}")
print(f"문자열 반복: {str1} * 3 = {str1 * 3}")

# 문자열 인덱싱과 슬라이싱
text = "Python Programming"
print(f"\n원본 문자열: {text}")
print(f"첫 번째 문자: {text[0]}")
print(f"마지막 문자: {text[-1]}")
print(f"처음 6글자: {text[:6]}")
print(f"7번째부터 끝까지: {text[7:]}")
print(f"역순: {text[::-1]}")

# 문자열 메서드
sample = "  Hello, Python World!  "
print(f"\n원본: '{sample}'")
print(f"대문자: {sample.upper()}")
print(f"소문자: {sample.lower()}")
print(f"공백 제거: '{sample.strip()}'")
print(f"치환: {sample.replace('Python', 'Java')}")
print(f"분리: {sample.split(',')}")

# 문자열 포맷팅
name = "김철수"
age = 25
height = 175.5

# 방법 1: % 포맷팅 (구식)
print("\n%s님은 %d살이고 키는 %.1fcm입니다." % (name, age, height))

# 방법 2: format() 메서드
print("{}님은 {}살이고 키는 {:.1f}cm입니다.".format(name, age, height))

# 방법 3: f-string (Python 3.6+, 권장)
print(f"{name}님은 {age}살이고 키는 {height:.1f}cm입니다.")

4. 리스트(List)

리스트는 여러 개의 값을 순서대로 저장할 수 있는 가변(mutable) 자료형입니다. 대괄호 []를 사용하여 생성하며, 서로 다른 타입의 요소를 포함할 수 있습니다.

# 리스트 생성
empty_list = []
numbers = [1, 2, 3, 4, 5]
mixed = ["apple", 3.14, True, [1, 2]]
fruits = ["사과", "바나나", "오렌지", "포도"]

print("빈 리스트:", empty_list)
print("숫자 리스트:", numbers)
print("혼합 리스트:", mixed)
print("과일 리스트:", fruits)

# 리스트 인덱싱과 슬라이싱
print(f"\n첫 번째 과일: {fruits[0]}")
print(f"마지막 과일: {fruits[-1]}")
print(f"처음 두 개: {fruits[:2]}")
print(f"2번째부터 끝까지: {fruits[1:]}")

# 리스트 수정
fruits[0] = "딸기"
print(f"\n수정 후: {fruits}")

# 리스트 메서드
print("\n리스트 메서드 사용:")
fruits.append("수박")  # 끝에 추가
print(f"append 후: {fruits}")

fruits.insert(1, "키위")  # 특정 위치에 삽입
print(f"insert 후: {fruits}")

removed = fruits.pop()  # 마지막 요소 제거 및 반환
print(f"pop 후: {fruits}, 제거된 요소: {removed}")

fruits.remove("키위")  # 특정 값 제거
print(f"remove 후: {fruits}")

# 리스트 정렬
numbers = [3, 1, 4, 1, 5, 9, 2]
print(f"\n원본 숫자: {numbers}")
numbers.sort()
print(f"오름차순 정렬: {numbers}")
numbers.sort(reverse=True)
print(f"내림차순 정렬: {numbers}")

# 리스트 컴프리헨션
squares = [x**2 for x in range(1, 6)]
print(f"\n1-5의 제곱: {squares}")

even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(f"1-10 중 짝수: {even_numbers}")

5. 튜플(Tuple)

튜플은 리스트와 유사하지만 불변(immutable)한 자료형입니다. 한 번 생성되면 수정할 수 없으며, 소괄호 ()를 사용하여 생성합니다.

# 튜플 생성
empty_tuple = ()
single_tuple = (1,)  # 요소가 하나일 때는 콤마 필수
coordinates = (3, 5)
info = ("김철수", 25, "서울")

print("빈 튜플:", empty_tuple)
print("단일 요소 튜플:", single_tuple)
print("좌표:", coordinates)
print("정보:", info)

# 튜플 인덱싱
print(f"\n이름: {info[0]}")
print(f"나이: {info[1]}")
print(f"도시: {info[2]}")

# 튜플 언패킹
x, y = coordinates
print(f"\nx 좌표: {x}, y 좌표: {y}")

name, age, city = info
print(f"이름: {name}, 나이: {age}, 도시: {city}")

# 튜플의 불변성
# info[0] = "이영희"  # 에러 발생: 튜플은 수정 불가

# 튜플을 사용하는 경우
def get_min_max(numbers):
    return min(numbers), max(numbers)  # 여러 값 반환

nums = [3, 1, 4, 1, 5, 9]
minimum, maximum = get_min_max(nums)
print(f"\n최솟값: {minimum}, 최댓값: {maximum}")

6. 딕셔너리(Dictionary)

딕셔너리는 키(key)와 값(value)의 쌍으로 이루어진 자료형입니다. 순서가 없고, 키를 통해 값에 빠르게 접근할 수 있습니다.

# 딕셔너리 생성
empty_dict = {}
person = {
    "이름": "김철수",
    "나이": 25,
    "직업": "개발자",
    "취미": ["독서", "영화감상"]
}

print("빈 딕셔너리:", empty_dict)
print("사람 정보:", person)

# 값 접근
print(f"\n이름: {person['이름']}")
print(f"나이: {person.get('나이')}")
print(f"주소: {person.get('주소', '정보 없음')}")  # 기본값 설정

# 값 추가 및 수정
person["이메일"] = "kim@example.com"
person["나이"] = 26
print(f"\n수정 후: {person}")

# 딕셔너리 메서드
print(f"\n키 목록: {list(person.keys())}")
print(f"값 목록: {list(person.values())}")
print(f"키-값 쌍: {list(person.items())}")

# 딕셔너리 순회
print("\n딕셔너리 순회:")
for key in person:
    print(f"{key}: {person[key]}")

print("\n키-값 쌍으로 순회:")
for key, value in person.items():
    print(f"{key} => {value}")

# 중첩 딕셔너리
students = {
    "S001": {"이름": "김철수", "점수": {"국어": 90, "수학": 85}},
    "S002": {"이름": "이영희", "점수": {"국어": 95, "수학": 90}},
}

print(f"\n학생 정보:")
for student_id, info in students.items():
    print(f"{student_id}: {info['이름']} - 국어: {info['점수']['국어']}, 수학: {info['점수']['수학']}")

7. 집합(Set)

집합은 중복되지 않은 요소들의 모음입니다. 수학의 집합 개념과 동일하며, 집합 연산을 수행할 수 있습니다.

# 집합 생성
empty_set = set()  # 빈 집합은 set()으로 생성
numbers = {1, 2, 3, 4, 5}
fruits = {"사과", "바나나", "오렌지", "사과"}  # 중복 제거됨

print("빈 집합:", empty_set)
print("숫자 집합:", numbers)
print("과일 집합:", fruits)  # '사과'는 하나만 포함

# 리스트에서 중복 제거
duplicates = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(duplicates))
print(f"\n중복 제거: {duplicates} → {unique}")

# 집합 연산
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}

print(f"\n집합 A: {set_a}")
print(f"집합 B: {set_b}")
print(f"합집합: {set_a | set_b}")
print(f"교집합: {set_a & set_b}")
print(f"차집합 (A-B): {set_a - set_b}")
print(f"대칭차집합: {set_a ^ set_b}")

# 집합 메서드
colors = {"빨강", "파랑", "노랑"}
print(f"\n원본 색상: {colors}")

colors.add("초록")
print(f"add 후: {colors}")

colors.update(["보라", "주황"])
print(f"update 후: {colors}")

colors.remove("노랑")
print(f"remove 후: {colors}")

8. 조건문

조건문은 특정 조건에 따라 다른 코드를 실행하도록 하는 제어 구조입니다. Python에서는 if, elif, else를 사용합니다.

# 기본 if문
age = 20
if age >= 18:
    print("성인입니다.")
else:
    print("미성년자입니다.")

# elif를 사용한 다중 조건
score = 85
print(f"\n점수: {score}")

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"학점: {grade}")

# 논리 연산자 사용
username = "admin"
password = "1234"

if username == "admin" and password == "1234":
    print("\n로그인 성공!")
else:
    print("\n로그인 실패!")

# in 연산자 사용
fruits = ["사과", "바나나", "오렌지"]
search = "바나나"

if search in fruits:
    print(f"\n{search}가 목록에 있습니다.")
else:
    print(f"\n{search}가 목록에 없습니다.")

# 삼항 연산자 (조건부 표현식)
age = 15
status = "성인" if age >= 18 else "미성년자"
print(f"\n나이 {age}세: {status}")

# 중첩 조건문
temperature = 25
humidity = 60

print(f"\n온도: {temperature}°C, 습도: {humidity}%")

if temperature >= 20:
    if humidity < 70:
        print("쾌적한 날씨입니다.")
    else:
        print("덥고 습합니다.")
else:
    print("쌀쌀합니다.")

9. 반복문

반복문은 특정 코드를 여러 번 실행할 때 사용합니다. Python에서는 for와 while 두 가지 반복문을 제공합니다.

# for 반복문 - 리스트 순회
fruits = ["사과", "바나나", "오렌지", "포도"]
print("과일 목록:")
for fruit in fruits:
    print(f"- {fruit}")

# range() 함수 사용
print("\n1부터 5까지:")
for i in range(1, 6):
    print(i, end=" ")
print()

# enumerate() 사용
print("\n인덱스와 함께 출력:")
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# 딕셔너리 순회
scores = {"국어": 90, "수학": 85, "영어": 88}
print("\n과목별 점수:")
for subject, score in scores.items():
    print(f"{subject}: {score}점")

# while 반복문
count = 0
print("\nwhile 반복문:")
while count < 5:
    print(f"카운트: {count}")
    count += 1

# break와 continue
print("\nbreak 예제:")
for i in range(1, 11):
    if i == 6:
        break
    print(i, end=" ")
print()

print("\ncontinue 예제 (홀수만 출력):")
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i, end=" ")
print()

# 중첩 반복문
print("\n구구단 (2단~3단):")
for i in range(2, 4):
    print(f"\n{i}단:")
    for j in range(1, 10):
        print(f"{i} × {j} = {i*j}")

# 리스트 컴프리헨션 vs 반복문
# 반복문 방식
squares_loop = []
for i in range(1, 6):
    squares_loop.append(i**2)

# 리스트 컴프리헨션 방식
squares_comp = [i**2 for i in range(1, 6)]

print(f"\n제곱수 (반복문): {squares_loop}")
print(f"제곱수 (컴프리헨션): {squares_comp}")

10. 함수

함수는 특정 작업을 수행하는 코드 블록입니다. 코드의 재사용성을 높이고, 프로그램을 구조화하는 데 필수적입니다.

# 기본 함수 정의
def greet():
    print("안녕하세요!")

greet()  # 함수 호출

# 매개변수가 있는 함수
def greet_with_name(name):
    print(f"안녕하세요, {name}님!")

greet_with_name("김철수")

# 반환값이 있는 함수
def add(a, b):
    return a + b

result = add(3, 5)
print(f"\n3 + 5 = {result}")

# 기본 매개변수
def introduce(name, age, city="서울"):
    print(f"\n이름: {name}")
    print(f"나이: {age}")
    print(f"도시: {city}")

introduce("김철수", 25)
introduce("이영희", 30, "부산")

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

print(f"\n합계: {sum_all(1, 2, 3, 4, 5)}")
print(f"합계: {sum_all(10, 20, 30)}")

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

print_info(이름="김철수", 나이=25, 직업="개발자")

# 람다 함수 (익명 함수)
square = lambda x: x**2
print(f"\n5의 제곱: {square(5)}")

# 람다 함수 활용
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(f"제곱수: {squared}")

# 함수 문서화
def calculate_area(width, height):
    """
    사각형의 넓이를 계산합니다.
    
    Args:
        width: 가로 길이
        height: 세로 길이
    
    Returns:
        사각형의 넓이
    """
    return width * height

print(f"\n넓이: {calculate_area(5, 3)}")
print(f"함수 설명: {calculate_area.__doc__}")

11. 모듈과 패키지

모듈은 Python 코드를 담고 있는 파일이며, 패키지는 여러 모듈을 모아놓은 디렉토리입니다. 코드를 구조화하고 재사용하는 데 중요합니다.

# 표준 라이브러리 모듈 import
import math
import random
import datetime
from collections import Counter, defaultdict

# math 모듈 사용
print("Math 모듈 사용:")
print(f"원주율: {math.pi}")
print(f"제곱근: {math.sqrt(16)}")
print(f"올림: {math.ceil(3.2)}")

# random 모듈 사용
print("\nRandom 모듈 사용:")
print(f"랜덤 정수 (1-10): {random.randint(1, 10)}")
print(f"랜덤 실수 (0-1): {random.random():.4f}")

fruits = ["사과", "바나나", "오렌지"]
print(f"랜덤 선택: {random.choice(fruits)}")

# datetime 모듈 사용
print("\nDatetime 모듈 사용:")
now = datetime.datetime.now()
print(f"현재 시각: {now}")
print(f"날짜: {now.date()}")
print(f"시간: {now.time()}")
print(f"포맷팅: {now.strftime('%Y년 %m월 %d일 %H시 %M분')}")

# collections 모듈 사용
print("\nCollections 모듈 사용:")
# Counter
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]
word_count = Counter(words)
print(f"단어 빈도: {word_count}")

# defaultdict
dd = defaultdict(list)
dd["fruits"].append("apple")
dd["fruits"].append("banana")
dd["vegetables"].append("carrot")
print(f"defaultdict: {dict(dd)}")

# 사용자 정의 모듈 예제
# my_module.py 파일이 있다고 가정
"""
# my_module.py 내용
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

PI = 3.14159
"""

# 사용 예제
# import my_module
# result = my_module.add(5, 3)
# print(result)

12. 종합 예제: 성적 관리 프로그램

지금까지 배운 내용을 종합하여 간단한 성적 관리 프로그램을 만들어보겠습니다. 이 예제는 Python의 다양한 기능을 활용합니다.

# 종합 예제: 학생 성적 관리 시스템
import json
import datetime
from statistics import mean, median

class StudentGradeManager:
    def __init__(self):
        self.students = {}
        self.subjects = ["국어", "영어", "수학", "과학"]
    
    def add_student(self, student_id, name):
        """학생 추가"""
        if student_id not in self.students:
            self.students[student_id] = {
                "이름": name,
                "점수": {},
                "등록일": datetime.datetime.now().strftime("%Y-%m-%d")
            }
            print(f"학생 '{name}'(ID: {student_id})이 추가되었습니다.")
        else:
            print(f"이미 존재하는 학생 ID입니다: {student_id}")
    
    def add_score(self, student_id, subject, score):
        """점수 추가"""
        if student_id in self.students:
            if subject in self.subjects:
                if 0 <= score <= 100:
                    self.students[student_id]["점수"][subject] = score
                    print(f"{self.students[student_id]['이름']}의 {subject} 점수가 {score}점으로 등록되었습니다.")
                else:
                    print("점수는 0-100 사이여야 합니다.")
            else:
                print(f"유효하지 않은 과목입니다. 가능한 과목: {', '.join(self.subjects)}")
        else:
            print(f"존재하지 않는 학생 ID입니다: {student_id}")
    
    def calculate_average(self, student_id):
        """평균 점수 계산"""
        if student_id in self.students:
            scores = self.students[student_id]["점수"].values()
            if scores:
                return mean(scores)
            else:
                return 0
        return None
    
    def get_grade(self, score):
        """점수를 학점으로 변환"""
        if score >= 90:
            return "A"
        elif score >= 80:
            return "B"
        elif score >= 70:
            return "C"
        elif score >= 60:
            return "D"
        else:
            return "F"
    
    def print_report_card(self, student_id):
        """성적표 출력"""
        if student_id in self.students:
            student = self.students[student_id]
            print(f"\n{'='*50}")
            print(f"성적표 - {student['이름']} (ID: {student_id})")
            print(f"{'='*50}")
            
            total_score = 0
            count = 0
            
            for subject in self.subjects:
                if subject in student["점수"]:
                    score = student["점수"][subject]
                    grade = self.get_grade(score)
                    print(f"{subject:8} : {score:3}점 ({grade})")
                    total_score += score
                    count += 1
                else:
                    print(f"{subject:8} : 미입력")
            
            if count > 0:
                average = total_score / count
                print(f"{'-'*50}")
                print(f"평균 점수: {average:.1f}점 ({self.get_grade(average)})")
            print(f"{'='*50}\n")
        else:
            print(f"존재하지 않는 학생 ID입니다: {student_id}")
    
    def print_class_statistics(self):
        """전체 통계 출력"""
        print(f"\n{'='*50}")
        print("전체 학급 통계")
        print(f"{'='*50}")
        
        if not self.students:
            print("등록된 학생이 없습니다.")
            return
        
        # 과목별 통계
        subject_scores = {subject: [] for subject in self.subjects}
        
        for student in self.students.values():
            for subject, score in student["점수"].items():
                subject_scores[subject].append(score)
        
        print("과목별 평균 점수:")
        for subject, scores in subject_scores.items():
            if scores:
                avg = mean(scores)
                print(f"  {subject}: {avg:.1f}점 (최고: {max(scores)}, 최저: {min(scores)})")
        
        # 전체 평균
        all_averages = []
        for student_id in self.students:
            avg = self.calculate_average(student_id)
            if avg:
                all_averages.append(avg)
        
        if all_averages:
            print(f"\n전체 평균: {mean(all_averages):.1f}점")
            print(f"최우수 학생 평균: {max(all_averages):.1f}점")
            print(f"{'='*50}\n")

# 메인 프로그램
def main():
    manager = StudentGradeManager()
    
    # 학생 추가
    print("=== 학생 성적 관리 시스템 ===")
    print("\n1. 학생 등록")
    manager.add_student("S001", "김철수")
    manager.add_student("S002", "이영희")
    manager.add_student("S003", "박민수")
    manager.add_student("S004", "정수진")
    
    # 점수 입력
    print("\n2. 점수 입력")
    # 김철수
    manager.add_score("S001", "국어", 85)
    manager.add_score("S001", "영어", 92)
    manager.add_score("S001", "수학", 88)
    manager.add_score("S001", "과학", 90)
    
    # 이영희
    manager.add_score("S002", "국어", 92)
    manager.add_score("S002", "영어", 88)
    manager.add_score("S002", "수학", 95)
    manager.add_score("S002", "과학", 87)
    
    # 박민수
    manager.add_score("S003", "국어", 78)
    manager.add_score("S003", "영어", 85)
    manager.add_score("S003", "수학", 82)
    
    # 정수진
    manager.add_score("S004", "국어", 95)
    manager.add_score("S004", "영어", 98)
    manager.add_score("S004", "수학", 100)
    manager.add_score("S004", "과학", 96)
    
    # 개별 성적표 출력
    print("\n3. 개별 성적표")
    for student_id in ["S001", "S002", "S003", "S004"]:
        manager.print_report_card(student_id)
    
    # 전체 통계
    print("\n4. 전체 통계")
    manager.print_class_statistics()
    
    # 추가 기능: 우수 학생 찾기
    print("\n5. 우수 학생 (평균 90점 이상)")
    honor_students = []
    for student_id, student in manager.students.items():
        avg = manager.calculate_average(student_id)
        if avg >= 90:
            honor_students.append((student["이름"], avg))
    
    if honor_students:
        honor_students.sort(key=lambda x: x[1], reverse=True)
        for name, avg in honor_students:
            print(f"  - {name}: {avg:.1f}점")
    else:
        print("  우수 학생이 없습니다.")

# 프로그램 실행
if __name__ == "__main__":
    main()

마무리

이 튜토리얼에서는 Python의 기초 문법을 체계적으로 살펴보았습니다. 변수와 자료형부터 시작하여 조건문, 반복문, 함수, 그리고 객체지향 프로그래밍의 기초까지 다루었습니다. 마지막 종합 예제를 통해 이러한 개념들이 실제로 어떻게 활용되는지 확인할 수 있었습니다.

Python 학습을 위한 추가 팁:
  • 매일 조금씩이라도 코드를 작성하며 연습하세요
  • 에러 메시지를 두려워하지 말고, 이해하려고 노력하세요
  • 다른 사람의 코드를 읽고 분석해보세요
  • 작은 프로젝트부터 시작하여 점진적으로 복잡한 프로그램을 만들어보세요
  • Python 공식 문서와 커뮤니티를 적극 활용하세요

#python #tutorial #파이썬 #튜토리얼 #기초 #문법 #가이드

댓글 남기기

AI, 코딩, 일상 및 다양한 정보 공유에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기