Phython 커리큘럼

김민주·2025년 4월 2일

GK

목록 보기
6/15

1️⃣ 강의 소개 및 파이썬 개요

목표와 용어 설명

1-1. 강의 소개

목표 : 컴퓨터와 친구처럼 소통할 수 있는 방법 => 프로그래밍에 대해 배울 것임

프로그래밍이란?

  • 프로그래밍은 컴퓨터에게 “이렇게 해줘!”라고 명령을 내리는 방법
  • 예를 들어, 게임을 만들거나, 계산을 하거나, 그림을 그리도록 컴퓨터에게 알려줄 수 있음

1-2. 파이썬 (Python)이란?

  • 쉬운 문법: 파이썬은 영어 문장처럼 간단해서 읽기 쉽고 쓰기 쉬움
  • 다양한 활용: 웹사이트 만들기, 게임 개발, 데이터 분석, 로봇 제어 등 많은 분야에서 사용됨
  • 많은 자료와 커뮤니티: 파이썬을 배우는 사람들이 많아서, 궁금한 점이 생기면 도움을 받을 수 있음

파이썬을 배우는 이유?

  • 친근한 언어: 처음 배우는 사람들도 쉽게 이해할 수 있도록 만들어졌어요.

  • 재미있는 프로젝트: 게임이나 간단한 계산기, 그림 그리기 같은 프로젝트를 해볼 수 있어요.

  • 미래의 도구: 나중에 더 큰 프로젝트나 다른 프로그래밍 언어를 배울 때 기본이 될 거예요.

실제 사용 예시

  • 학교에서 간단한 프로그램 만들기

  • 인터넷에서 인기 있는 게임 개발

  • 로봇이나 드론 조종하기

예제 코드

print("Hello, World!")

2️⃣ 개발 환경 설정

2-1. 파이썬 설치하기

  • 공식 웹사이트 방문 https://www.python.org/

  • 다운로드 및 설치

  • 웹사이트에서 "Download Python" 버튼을 찾아 클릭해요.

  • 다운로드 받은 파일을 실행하여 설치를 진행해요.

  • 설치할 때 "Add Python to PATH"라는 옵션이 있으면 꼭 체크해 주세요.

    2-2. 개발 도구(IDE/편집기) 소개

IDE란?

IDE(통합 개발 환경)는 코드를 쓰고, 실행하고, 디버깅할 수 있도록 도와주는 프로그램

  • 추천 IDE :
  1. VS Code (비주얼 스튜디오 코드)
  • 사용법 간단, 여러가지 기능 추가 가능
  • 초보자도 쉽게 사용할 수 있도록 친절한 도움말이 있음
  1. IDLE
  • 파이썬을 설치하면 기본적으로 제공되는 간단한 개발환경
  • 처음 파이썬 접하는 사람에게 추천
  1. Jupyter Notebook
  • 코드와 설명을 한 화면에 함께 작성할 수 있어서 학습에 매우 유용
  • 데이터 분석이나 시각화에 많이 사용

3️⃣ 기본 문법 및 데이터 타입

3-1. 변수와 자료형

변수란 ?

  • 데이터를 저장할 수 있는 상자와 같은 역할
  • ex : age = 10 -> 숫자 10을 저장하는 변수

자료형

  1. 숫자 (Number) : 정수(int)와 실수 (float)
  • ex : num1 = 5, pi = 3.14
  1. 문자열(String) : 따옴표(" ") or 작은 따옴표(' ')로 감싸서 작성
  • ex : greeting = "안녕하세요"
  1. 불린(Boolean) : 참(True) 또는 거짓(False)값을 표현
  • ex : is_active = True

3-2. 변수와 자료형

1. 산술 연산자

덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%), 거듭제곱(**)

2. 비교 연산자

크거나 같다(>=), 작거나 같다(<=), 같다(==), 같지 않다(!=), 크다(>), 작다(<)

3. 논리 연산자

그리고(and), 또는 (or), 부정(not)

3-3. 기본 입출력 함수

출력

  • print() 함수를 사용하여 화면에 결과를 보여줌
print("안녕하세요")

입력

  • input() 함수를 사용하여 사용자로부터 데이터를 입력받음
name = input("이름을 입력하세요: ")
print("안녕하세요, " + name + "님!")

3-4. 실습 문제

실습 문제 1: 간단한 계산기 프로그램 만들기

  • 목표: 사용자로부터 두 개의 숫자를 입력받아, 덧셈, 뺄셈, 곱셈, 나눗셈의 결과를 출력하는 프로그램을 작성합니다.
  1. input( ) 함수를 사용해 두 숫자를 문자열로 받습니다.
  2. int( ) 또는 float( ) 함수를 사용해 숫자로 변환합니다.
  3. 각 연산자의 결과를 계산하고 print( )로 출력합니다.
# 사용자에게 숫자 입력 받기
num1 = float(input("첫 번째 숫자를 입력하세요: "))
num2 = float(input("두 번째 숫자를 입력하세요: "))

# 계산
print("더하기:", num1 + num2)
print("빼기:", num1 - num2)
print("곱하기:", num1 * num2)
# 나눗셈은 0으로 나누지 않도록 처리
if num2 != 0:
    print("나누기:", num1 / num2)
else:
    print("두 번째 숫자는 0이면 안됩니다.")

실습 문제 2: 사용자 정보 출력 프로그램

  • 목표: 사용자의 이름, 나이, 좋아하는 과목을 입력받고, 이를 포맷팅하여 출력하는 프로그램 작성

    사용자에게 input( )으로 정보를 입력받습니다.
    받은 데이터를 변수에 저장합니다.
    print( )를 사용하여 포맷팅된 문장을 출력합니다.

name = input("이름을 입력하세요: ")
age = input("나이를 입력하세요: ")
subject = input("좋아하는 과목을 입력하세요: ")

print("\n안녕하세요! 저는", name, "입니다.")
print("나이는", age, "살이고, 좋아하는 과목은", subject, "입니다.")

4️⃣ 제어문

4-1. 조건문 (if, elif, else)

조건문이란?

  • 프로그램이 조건에 따라 다른 코드를 실행하도록 함

<예제>

num = 10
if num > 10:
    print("10보다 큽니다.")
elif num == 10:
    print("10입니다.")
else:
    print("10보다 작습니다.")

개념 설명

  • if : 주어진 조건이 참일 때 실행
  • elif : 앞선 조건이 거짓일 경우 + 추가로 조건 검사
  • else : 위의 조건이 거짓일 때 실행

4-2. 반복문(for, while)

for 루프

  • 반복 가능한 자료(리스트, 문자열 등)의 각 항목에 대해 반복
    <기본형>
for 변수 in 반복가능한_객체:
실행할_코드

for i in [1,2,3]:
print(i) 

출력값
1
2
3

<range()>

for i in range(5): # 0부터 4까지
print(i) 

출력값
0
1
2
3
4

<예제>

for i in range(1, 6):
    print(i)

while 루프

  • 조건이 참인 동안 계속해서 실행
    <예제>
count = 1
while count <= 5:
    print(count)
    count += 1  # count = count + 1와 동일

4-3. 실습 문제

실습 문제 1: 구구단 출력 프로그램

  • 목표: 사용자가 입력한 숫자의 구구단(1단~9단)을 출력하는 프로그램 작성

설명:

사용자에게 단을 입력받습니다.
for 루프를 사용해 1부터 9까지 반복합니다.
각 반복마다 곱셈 결과를 출력합니다.

예시 코드:

dan = int(input("출력할 구구단의 단을 입력하세요: "))
print(f"=== {dan}단 구구단 ===")
for i in range(1, 10):
    print(f"{dan} x {i} = {dan * i}")

실습 문제 2: 1부터 50까지의 홀수 출력 프로그램

  • 목표: 1부터 50까지의 숫자 중 홀수만 출력하는 프로그램을 작성합니다.

설명:

while 루프 또는 for 루프를 사용하여 1부터 50까지 반복합니다.
각 숫자가 홀수인지(num % 2 != 0) 확인한 후 출력합니다.

예시 코드 (while 루프 사용):

num = 1
print("1부터 50까지의 홀수:")
while num <= 50:
    if num % 2 != 0:
        print(num, end=" ")
    num += 1
print()  # 줄바꿈
예시 코드 (for 루프 사용):
print("1부터 50까지의 홀수:")
for num in range(1, 51):
    if num % 2 != 0:
        print(num, end=" ")
print()  # 줄바꿈

5️⃣ 함수

5-1. 함수란 무엇인가?

  • 함수는 입력(인자)을 받아 정해진 작업을 수행하고 결과(반환값)를 돌려주는 작은 기계

5-2. 함수 정의와 기본 문법

def 키워드 사용:

def greet():
    print("안녕하세요!")
  • 인자와 반환값:

인자(매개변수): 함수가 외부에서 받는 값

반환값: 함수의 작업 결과를 돌려주는 값

def add(a, b):
    result = a + b
    return result

호출 예:

sum_result = add(3, 4)  # 결과: 7
print(sum_result)

5-3. 내장 함수 소개

len(): 문자열이나 리스트 등 길이를 반환

word = "파이썬"
print(len(word))  # 결과: 3

range(): 숫자 범위를 생성하는 함수 (반복문과 자주 사용)

for i in range(1, 6):
    print(i)  # 1부터 5까지 출력

sum(): 리스트나 튜플의 모든 요소의 합을 계산

numbers = [1, 2, 3, 4]
print(sum(numbers))  # 결과: 10

5-4. 람다 함수 (익명 함수)

  • 개념:
    람다 함수는 이름 없이 간단하게 한 줄로 함수를 만들 때 사용해요.

문법과 예제:

square = lambda x: x * x
print(square(5))  # 결과: 25
  • 특징 및 차이점:
  1. 정의 간결성: 이름 없이 한 줄에 정의할 수 있어요.

  2. 용도: 복잡한 로직이 아니라 단순 계산이나 임시 함수를 만들 때 유용해요.

  3. 제한: 여러 줄의 복잡한 처리는 일반 함수(def)로 작성해야 해요.

5-5. 실습 문제

실습 문제 1: 제곱 계산 함수 만들기

  • 목표: 입력된 숫자의 제곱을 계산하는 함수를 작성

설명:

함수 이름은 square로 정합니다.
인자로 숫자 하나를 받고, 그 숫자의 제곱을 계산하여 반환합니다.

예시 코드:

def square(num):
    return num * num


print("4의 제곱:", square(4))  # 결과: 16
print("7의 제곱:", square(7))  # 결과: 49

=> lambda로도 바꿔보기!!

실습 문제 2: 두 숫자의 평균을 계산하는 함수 작성

  • 목표: 두 숫자를 받아서 평균을 계산하여 반환하는 함수를 작성

함수 이름은 average로 정합니다.
두 개의 숫자를 인자로 받아 합을 2로 나눠 반환합니다.

def average(a, b):
    return (a + b) / 2


print("평균:", average(10, 20))  # 결과: 15.0
print("평균:", average(5, 15))   # 결과: 10.0

6️⃣ 기본 자료구조

6-1. 리스트와 튜플

리스트(List)

특징:

  • 순서가 있는 데이터 집합
  • 수정, 추가, 삭제 가능

생성 및 예제:

fruits = ["사과", "바나나", "오렌지"]
print(fruits[0])  # 첫 번째 요소: "사과"
fruits.append("포도")  # 새 요소 추가
print(fruits)

튜플(Tuple)

특징:

  • 순서가 있는 데이터 집합
  • 한 번 생성하면 수정할 수 없음 (불변)

생성 및 예제:

colors = ("빨강", "초록", "파랑")
print(colors[1])  # 두 번째 요소: "초록"
# colors[1] = "노랑"  -> 오류 발생 (튜플은 수정 불가)

6-2. 딕셔너리 (Dictionary)

특징:

  • 키(Key)와 값(Value)의 쌍으로 데이터를 저장
  • 순서가 중요하지 않으며, 키를 사용해 값에 접근

생성 및 예제:

student = {"이름": "철수", "나이": 12, "과목": "수학"}
print(student["이름"])  # 결과: "철수"
# 값 수정
student["나이"] = 13
print(student)

6-3. 집합 (Set)

특징:

  • 중복된 값을 허용하지 않는 데이터 집합
  • 수학의 집합처럼 합집합, 교집합, 차집합 등의 연산이 가능

생성 및 예제:

numbers = {1, 2, 3, 3, 4}
print(numbers)  # 중복된 3은 한 번만 출력됨
# 집합 연산: 두 집합의 교집합
set1 = {1, 2, 3}
set2 = {2, 3, 4}
print(set1 & set2)  # 결과: {2, 3}

6-4. 실습 문제

실습 문제 1: 나의 좋아하는 과일 리스트와 색상 튜플 만들기

  • 목표: 좋아하는 과일을 리스트로 만들고,
    각 과일에 어울리는 색상을 튜플로 생성하여 출력

리스트와 튜플의 사용법과 인덱싱, 수정 가능 여부를 체험합니다.

# 좋아하는 과일 리스트
fruits = ["사과", "바나나", "오렌지"]
print("처음 과일 리스트:", fruits)

# 새로운 과일 추가
fruits.append("포도")
print("추가 후 과일 리스트:", fruits)

# 과일에 어울리는 색상 튜플 (튜플은 수정 불가)
fruit_colors = ("빨강", "노랑", "주황", "보라")
print("과일 색상 튜플:", fruit_colors)

실습 문제 2: 학생 정보 관리 프로그램 만들기

  • 목표:
    학생의 정보를 딕셔너리로 관리하고, 여러 학생을 집합(또는 리스트)으로 저장한 후 데이터를 처리해보기

한 학생의 정보(이름, 나이, 좋아하는 과목)를 딕셔너리로 저장
여러 학생의 정보를 리스트에 저장
전체 학생의 이름만 출력하거나, 특정 조건(예: 나이가 13살 이상인 학생)으로 필터링

# 학생 정보 딕셔너리 생성
student1 = {"이름": "철수", "나이": 12, "과목": "수학"}
student2 = {"이름": "영희", "나이": 13, "과목": "과학"}
student3 = {"이름": "민수", "나이": 14, "과목": "영어"}

# 여러 학생을 리스트로 저장
students = [student1, student2, student3]

# 모든 학생의 이름 출력
print("학생 이름:")
for student in students:
    print(student["이름"])

# 나이가 13살 이상인 학생 필터링
print("\n나이가 13살 이상인 학생:")
for student in students:
    if student["나이"] >= 13:
        print(student["이름"], "-", student["과목"])

7️⃣ 파일 입출력 및 모듈 소개

7-1. 파일 입출력 & 모듈

파일 입출력

  • 텍스트 파일의 기본 읽기/쓰기 방법을 다루며, 초보자가 직접 파일을 열어 데이터를 처리해볼 수 있도록 구성

모듈 사용

  • import 문법과 표준 라이브러리(ex. math,datetime) 사용법

자주 사용되는 모듈

  • math: 수학 함수와 상수 제공
  • datetime: 날짜와 시간 처리
  • os: 운영 체제 관련 작업(파일 경로, 환경 변수 등)
  • sys: 인터프리터와 관련된 변수와 함수 제공

7-2. 실습 문제

기본 실습 문제 – 간단한 파일 읽기/쓰기 프로그램

  • 목표: 텍스트 파일을 생성하고, 데이터를 쓰고, 다시 읽어오는 프로그램을 작성합니다.
# 파일에 쓰기
with open("example.txt", "w", encoding="utf-8") as file:
    file.write("안녕하세요, 파이썬 파일 입출력!")

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

심화 실습 문제 – 모듈 활용과 데이터 처리

  • 목표: datetime 모듈을 사용하여 현재 날짜와 시간을 파일에 저장하고, 저장된 데이터를 읽어와 포맷을 변경하여 출력합니다.
import datetime

# 현재 날짜와 시간 가져오기
now = datetime.datetime.now()
timestamp = now.strftime("%Y-%m-%d %H:%M:%S")

# 파일에 저장
with open("time_info.txt", "w", encoding="utf-8") as file:
    file.write("현재 시간: " + timestamp)

# 파일 읽기 및 출력
with open("time_info.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print("저장된 시간 정보:", content)

8️⃣ 종합 실습 및 Q&A

8-1. 종합 예제 실습 문제

실습 문제 1: 기초 종합 문제 – 개인 정보 관리 프로그램

  • 목표: 지금까지 배운 변수, 자료형, 제어문, 함수, 자료구조를 활용하여 간단한 개인 정보를 입력 받고 출력하는 프로그램을 작성합니다.

사용자로부터 이름, 나이, 좋아하는 과목을 입력 받습니다.
입력 받은 정보를 딕셔너리에 저장하고, 이를 리스트에 추가합니다.
리스트에 저장된 모든 학생의 정보를 출력하는 함수를 작성합니다.
예외적으로 나이가 0 이하이거나 비정상적인 값이면 경고 메시지를 출력합니다.

def add_student(students_list):
    name = input("이름을 입력하세요: ")
    age = int(input("나이를 입력하세요: "))
    subject = input("좋아하는 과목을 입력하세요: ")
    
    # 나이 검증
    if age <= 0:
        print("올바른 나이를 입력하세요.")
        return
    
    student = {"이름": name, "나이": age, "과목": subject}
    students_list.append(student)
    print(f"{name} 학생 정보가 추가되었습니다.")

def print_students(students_list):
    print("\n=== 저장된 학생 정보 ===")
    for student in students_list:
        print(f"이름: {student['이름']}, 나이: {student['나이']}, 과목: {student['과목']}")

# 메인 실행 코드
students = []
n = int(input("추가할 학생 수를 입력하세요: "))

for i in range(n):
    add_student(students)

print_students(students)

실습 문제 2: 심화 종합 문제 – 간단한 성적 관리 프로그램

  • 목표: 함수, 조건문, 반복문, 리스트, 딕셔너리, 그리고 내장 함수를 활용하여 학생들의 성적을 관리하는 프로그램을 작성합니다.

학생 이름과 여러 과목의 성적을 입력받아 딕셔너리에 저장합니다.
각 학생의 평균 성적을 계산하는 함수를 작성합니다.
전체 학생 중 평균 성적이 일정 점수(예: 70점) 이상인 학생을 필터링하여 출력합니다.
추가로, 람다 함수를 사용하여 리스트의 정렬(평균 성적 기준)을 진행해 봅니다.

def input_student():
    student = {}
    student["이름"] = input("학생 이름을 입력하세요: ")
    
    # 과목과 성적을 입력받고 딕셔너리에 저장 (예: 3과목)
    subjects = {}
    for i in range(1, 4):
        subject_name = input(f"{i}번째 과목 이름을 입력하세요: ")
        score = float(input(f"{subject_name} 과목의 성적을 입력하세요: "))
        subjects[subject_name] = score
    student["과목"] = subjects
    return student

def calculate_average(student):
    scores = student["과목"].values()
    return sum(scores) / len(scores)

def print_high_achievers(students, threshold=70):
    print(f"\n평균 성적이 {threshold}점 이상인 학생:")
    for student in students:
        avg = calculate_average(student)
        if avg >= threshold:
            print(f"{student['이름']} - 평균 성적: {avg:.2f}")

# 메인 실행 코드
num_students = int(input("학생 수를 입력하세요: "))
students = []

for _ in range(num_students):
    students.append(input_student())

# 각 학생의 평균 성적 계산 및 출력
for student in students:
    avg = calculate_average(student)
    print(f"{student['이름']}의 평균 성적은 {avg:.2f}점입니다.")

# 조건에 따른 필터링
print_high_achievers(students)

# 평균 성적을 기준으로 내림차순 정렬 (람다 함수 사용)
students_sorted = sorted(students, key=lambda s: calculate_average(s), reverse=True)
print("\n평균 성적 순으로 정렬:")
for student in students_sorted:
    print(f"{student['이름']} - 평균 성적: {calculate_average(student):.2f}")

8-2. 질의응답 (Q&A) 예시

예시 질문 1:

질문: "함수에서 인자와 반환값의 차이점이 무엇인가요?"

답변:
"인자는 함수에 외부에서 전달하는 값이며, 함수 내부에서 이 값을 사용하여 연산이나 작업을 수행합니다. 반환값은 함수가 작업을 마치고 결과로 돌려주는 값입니다. 예를 들어, def add(a, b): return a + b에서 a와 b는 인자이고, a + b의 결과가 반환값입니다."

예시 질문 2:

질문: "리스트와 튜플의 차이는 무엇인가요? 왜 둘 다 있어야 하나요?"

답변:
"리스트는 데이터를 자유롭게 추가, 수정, 삭제할 수 있는 가변(mutable) 자료구조입니다. 반면 튜플은 한 번 생성하면 수정할 수 없는 불변(immutable) 자료구조로, 데이터의 변경이 필요 없을 때 사용하여 안정성을 높일 수 있습니다. 각각의 특성을 고려하여 상황에 맞게 사용합니다."

예시 질문 3:

질문: "람다 함수는 왜 사용하나요? 일반 함수와 비교해서 어떤 장점이 있나요?"

답변:
"람다 함수는 짧은 코드로 간단한 기능을 구현할 때 사용합니다. 이름을 지정하지 않고 한 줄로 정의할 수 있어 간결하게 사용할 수 있지만, 복잡한 로직을 처리할 때는 일반 함수가 더 적합합니다. 주로 일회성 작업이나 함수를 인자로 넘길 때 유용합니다."


9️⃣ 강의 마무리

9-1. 오늘 배운 핵심 내용 요약

💡변수와 자료형:
숫자, 문자열, 불린 값 등 다양한 데이터 타입과 이를 저장하는 변수의 개념

💡연산자 및 입출력:
산술, 비교, 논리 연산자를 사용하여 데이터 처리와 print(), input() 함수로 사용자와 상호작용

💡제어문:
조건문(if, elif, else)과 반복문(for, while)을 활용하여 프로그램의 흐름 제어

💡함수:
def 키워드를 사용한 함수 정의, 인자와 반환값, 내장 함수, 그리고 람다 함수의 간단한 사용법

💡기본 자료구조:
리스트, 튜플, 딕셔너리, 집합을 이용해 데이터를 구조적으로 저장하고 처리하는 방법

9-2. 추가 학습 자료 소개

<온라인 강의>

💡 Codecademy의 Python 강좌

💡 Coursera의 파이썬 기초 강좌

<도서>

💡『점프 투 파이썬』 – 초보자를 위한 친절한 입문서

💡『파이썬 코딩 도장』 – 실습 중심의 학습 자료

<공식 문서>

💡Python 공식 문서 – 상세한 언어 스펙과 다양한 예제

0개의 댓글