728x90
# 파이썬 프로그래밍 종합 실습
학습 목표: 기본 문법 복습, 자료형, 함수, 클래스와 객체지향 프로그래밍, 제너레이터와 이터레이터, 파일 입출력, 예외 처리를 종합적으로 활용합니다.
1. 파이썬 기본 문법 복습 및 자료형
문제:사용자로부터 이름, 나이, 이메일을 입력받아 딕셔너리에 저장하는 프로그램을 작성하세요.
나이와 이메일의 형식을 검증하고, 잘못된 입력이 있으면 예외 처리를 하세요.
def validate_age(age):
try:
age = int(age)
# 14세 미만 예외 처리
if age < 14:
raise ValueError("Under 14 years of age, this website cannot be used.")
return age
# 예외 처리 에러 메시지 출력
except ValueError as e:
raise ValueError(f"{e}")
def validate_email(email):
try:
id, form = email.split('@')
em, dot = form.split('.')
email_form = {'naver': 'com', 'gmail': 'com', 'daum': 'net'}
# id 길이 5 이상 15 이하로 글자 수 제한
if len(id) < 5 or len(id) > 15:
raise ValueError("The ID is too short or too long. Please write 5 or more and 15 or less characters.")
# email 형식이 네이버, 구글, 다음 이외의 형식일 경우 예외 처리
if em not in email_form or email_form[em] != dot:
raise ValueError("Invalid email format. Please use naver, gmail, or daum.")
return email
except ValueError as e:
raise ValueError(f"{e}")
# main
user_list = []
while True:
try:
name = input("Enter your name: ")
# 제대로 된 입력일 때까지 반복
while True:
age_input = input("Enter your age: ")
try:
age = validate_age(age_input)
break
except ValueError as e:
print(f"Please input it again : {e}")
while True:
email_input = input("Enter your email: ")
try:
email = validate_email(email_input)
break
except ValueError as e:
print(f"Please input it again : {e}")
# 입력이 제대로 되었을 때, 추가된 값 확인 및 반복문 탈출
user_list.append([name, age, email])
print("Success!",user_list)
break
# 나이, 이메일 예외 이외의 에러가 발생할 시 실행
except Exception as e:
print(f"An unexpected error has occurred.: {e}")
raise
- 파이썬에서 예외를 명시적으로 발생시키는 데 사용되는 키워드
- 예외를 발생시키면 현재 코드의 실행이 중단되고, 예외가 호출 스택을 따라 올라가면서 예외를 처리할 수 있는 try-except 블록을 찾는다.
- raise를 사용하여 특정 조건에서 오류를 나타내고, 코드의 오류 처리 메커니즘을 트리거할 수 있다.
2. 함수 및 클래스와 객체지향 프로그래밍
문제:간단한 계산기 클래스를 작성하세요. 이 클래스는 덧셈, 뺄셈, 곱셈, 나눗셈 메서드를 포함합니다.
사용자로부터 두 숫자와 연산자를 입력받아 계산 결과를 출력하는 프로그램을 작성하세요.
class Calculator:
def __init__(self, a, b):
self.a = a
self.b = b
def __add__(self):
return self.a + self.b
def __sub__(self):
return self.a - self.b
def __mul__(self):
return self.a * self.b
def __truediv__(self):
if self.b != 0:
return self.a / self.b
raise ZeroDivisionError()
try:
calc = Calculator(10,5)
print("Addition:", calc.__add__())
print("Subtraction:", calc.__sub__())
print("Multiplication:", calc.__mul__())
print("Division:", calc.__truediv__())
except ZeroDivisionError as e:
print("Division with zero")
매직 메서드(Magic Methods)
- 특별한 이름을 가진 메서드로, 파이썬이 내부적으로 사용하는 메서드
- 객체의 특정 동작을 사용자 정의할 수 있음
- 대표적인 매직 메서드:
__init__: 객체 초기화 메서드
__str__: 객체의 문자열 표현을 변환
__repr__: 객체의 공식 문자열 표현을 반환
연산자 오버로딩(Operator Overloading)
- 파이썬의 기본 연산자를 사용자 정의 클래스에서 사용할 수 있도록 메서드를 정의
- 객체 간의 연산을 직관적으로 표현 가능
대표적인 매직 메서드
__add__: + 연산자
__sub__: - 연산자
__mul__: * 연산자
__truediv__: / 연산자
3. 제너레이터와 이터레이터
문제:피보나치 수열을 생성하는 제너레이터 함수를 작성하세요.
피보나치 수열의 첫 10개 값을 출력하세요.
def fibonacci():
a, b = 0, 1
while True:
# 현재의 a 값을 반환하고, a, b 를 업데이트
yield a
a, b = b, a + b
# 제너레이터 객체 생성
fib = fibonacci()
# 첫 10개의 피보나치 수열 값 출력
for _ in range(10):
print(next(fib)) # 객체를 반복문을 통해 호출할 때마다 next() 함수로 다음 피보나치 수열 가져옴
이터레이터
- 값을 차례대로 꺼낼 수 있는 객체
- __iter__(): 이터레이터 객체 자신을 반환
- __next__(): 다음 값을 반환하거나 더 이상 반환할 값이 없을 경우 'StopIteration' 예외를 발생시킨다.
제너레이터
- 이터레이터를 생성하는 함수
- 일반 함수와 유사하지만 'yield' 키워드를 사용하여 값을 반환, 함수의 실행 상태를 유지
- 제너레이터는 호출될 때마다 이터레이터를 생성하므로 값을 순차적으로 반환할 수 있다.
* 일반 함수와 제너레이터 차이점
- 일반 함수: return 키워드를 사용하여 값을 한 번 반환하고 함수의 실행을 종료
- 제너레이터: yield 키워드를 사용하여 값을 반환, 함수의 실행 상태를 일시적으로 유지
- next() 함수를 사용하여 값을 하나씩 가져올 수 있다.
* 제너레이터 함수의 동작 방식
- yield 키워드 사용: 현재 함수의 실행을 일시 중지하고 값을 반환한다. 함수의 상태는 여전히 유지되며, 다음 함수 호출 시 yield 이후의 코드부터 실행된다.
- 함수의 실행 상태 유지: 여러 번 호출될 때마다 상태를 유지하면서 값을 반환, 이전 호출 시의 상태를 기억하고 있다.
4. 파일 입출력
문제:사용자로부터 입력받은 데이터를 파일에 저장하고, 파일 내용을 읽어 출력하는 프로그램을 작성하세요.
데이터는 JSON 형식으로 저장하세요
import json
# 데이터 입력 받기
data = {}
data['name'] = input("Enter your name: ")
data['age'] = int(input("Enter your age: "))
data['email'] = input("Enter your email: ")
# 데이터를 JSON 형식으로 파일에 저장
file_name = 'user_data.json'
# 파일을 쓰기 모드('w') 로 열고, 파일 핸들을 'f'에 할당한다.
# 'with'문을 사용하여 파일 핸들이 자동으로 닫히도록 한다.
with open(file_name, 'w') as f:
# 'data' 딕셔너리를 JSON 형식으로 직렬화하여 파일에 저장
json.dump(data, f)
# 파일에서 데이터 읽기
with open(file_name, 'r') as f:
loaded_data = json.load(f)
print(f"Loaded data from {file_name}:")
print(f"Name: {loaded_data['name']}")
print(f"Age: {loaded_data['age']}")
print(f"Email: {loaded_data['email']}")
# open() 함수의 모드
# 1. 읽기 모드('r'): 파일이 존재하지 않으면 에러 발생
with open('filename.txt', 'r') as f:
# 파일을 읽는 작업 수행
data = f.read()
# 2. 쓰기 모드('w'): 파일이 이미 존재할 경우 기존 내용 삭제하고 새로운 내용 작성, 파일이 없으면 새로 생성
with open('filename.txt', 'w') as f:
f.write('Hello, World!')
# 3. 추가 모드('a'): 파일의 끝에 데이터를 추가, 파일이 없으면 새로 생성
with open('filename.txt', 'a') as f:
f.write('Appending new data!)
# 4. 바이너리 모드('b'): 텍스트가 아닌 바이너리 데이터를 다룰 때 사용
with open('filename.bin', 'wb') as f:
f.write(b'Binary data')
# 읽기 및 쓰기 모드 ('r+', 'w') / r+ 는 파일이 이미 있어야 한다.
# 바이너리 읽기 및 쓰기 모드 ('rb+', 'wb+')
5. Database 연동
문제:SQLite 데이터베이스에 사용자 정보를 저장하고, 저장된 데이터를 조회하여 출력하는 프로그램을 작성하세요.
테이블은 users로 하고, id, name, age, email 컬럼을 포함합니다.
Database
1. 파이썬과 데이터베이스 연동
- 파이썬 애플리케이션에서 데이터베이스에 접속하고, 데이터를 조회, 삽입, 수정, 삭제하는 작업
- 데이터를 효율적으로 처리하고, 데이터 기반 애플리케이션 개발
2. 파이썬 DB-API
- 파이썬에서 데이터베이스와 상호작용하기 위한 표준 인터페이스
- Connection 객체: 데이터베이스와의 연결을 관리
- Cursor 객체: SQL 문을 실행하고 결과를 관리
3. 주요 데이터베이스 모듈
- SQLite: 내장형 데이터베이스
- MySQL: 오픈 소스 관계형 데이터베이스
- PostgreSQL: 오픈 소스 객체-관계형 데이터베이스
import sqlite3
# SQLite 데이터베이스에 연결 (데이터베이스 파일이 없으면 생성됨)
connection = sqlite3.connect('user_info.db')
# 커서 객체 생성
cursor = connection.cursor()
# 기존 테이블 삭제 (있다면)
cursor.execute('DROP TABLE IF EXISTS users')
# 테이블 생성 (이미 존재하면 무시)
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
email TEXT
)''')
# 샘플 데이터 삽입
cursor.execute("INSERT INTO users (name, age, email) VALUES (?,?,?)", ('gildong',30,'hong@naver.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (?,?,?)", ('kim',25,'kim@naver.com'))
# 트랜잭션 커밋
connection.commit()
# 데이터 조회
cursor.execute("SELECT * FROM users")
users = cursor.fetchall()
# 조회된 데이터 출력
print("사용자 정보:")
for user in users:
print(f"ID: {user[0]}, name: {user[1]}, age: {user[2]}, email: {user[3]}")
# 커서와 연결 종료
cursor.close()
connection.close()
6. 예외 처리
문제:사용자로부터 숫자를 입력받아, 그 숫자를 10으로 나누는 프로그램을 작성하세요.
0으로 나누는 경우와 숫자가 아닌 값을 입력받는 경우를 처리하세요.
d = 10
try:
num = int(input())
if not num.isdigit():
raise ValueError
elif d == 0:
raise ZeroDivisionError
except ZeroDivisionError:
print("Division with zero")
except ValueError:
print("Invalid Input")
반응형
'🇰 Kakaotech Bootcamp > 실습' 카테고리의 다른 글
Data Visualization 1 실습 (1) | 2024.07.12 |
---|---|
데이터 분석 1 실습 (1) | 2024.07.10 |
python programming 2 종합 실습 (0) | 2024.07.05 |
데이터 전처리 실습 (0) | 2024.07.03 |