<내용정리>
- 관련 파일
- 본문
# 섹션15 응용예제1
class Book:
def set_info(self, title, author):
self.title = title
self.author = author
def print_info(self):
print(f'책 제목: {self.title}')
print(f'책 저자: {self.author}')
book1 = Book()
book2 = Book()
book1.set_info('파이썬', '민경태')
book2.set_info('어린왕자', '생텍쥐페리')
book_list = [book1, book2]
for book in book_list:
book.print_info()
# 응용예제2
class Watch:
def set_time(self):
now = input('현재 시간을 입력하세요 : ')
hms = now.split(':') # :으로 분리
self.hour = int(hms[0])
self.minute = int(hms[1])
self.second = int(hms[2])
def add_hour(self, hour):
if hour <= 0:
return
self.hour += hour
self.hour %= 24
def add_minute(self, minute):
if minute <= 0:
return
self.minute += minute
self.add_hour(self.minute//60)
self.minute %= 60
def add_second(self, second):
if second <= 0:
return
self.second += second
self.add_minute(self.second//60)
self.second %= 60
def print_info(self):
print(f'계산된 시간은 {self.hour}시 {self.minute}분 {self.second}초입니다')
watch = Watch()
watch.set_time()
watch.add_hour(int(input('계산할 시간을 입력하세요 : ')))
watch.add_minute(int(input('계산할 분을 입력하세요 : ')))
watch.add_second(int(input('계산할 초을 입력하세요 : ')))
watch.print_info()
# p282
class Bag:
count = 0
def __init__(self):
Bag.count += 1
@classmethod
def sell(cls):
cls.count -= 1
@classmethod
def remain_bag(cls):
return cls.count
print(f'현재 가방 : {Bag.remain_bag()}개')
bag1 = Bag()
bag2 = Bag()
bag3 = Bag()
print(f'현재 가방 : {Bag.remain_bag()}개')
bag1.sell()
bag2.sell()
print(f'현재 가방 : {Bag.remain_bag()}개')
## 클래스 상속
# p284
class Person: # 슈퍼클래스(부모클래스)
def __init__(self, name):
self.name = name
def eat(self, food):
print(f'{self.name}가 {food}를 먹습니다')
class Student(Person): # 서브클래스(자식클래스)
def __init__(self, name, school):
super().__init__(name)
self.school = school
def study(self):
print(f'{self.name}는 {self.school}에서 공부를 합니다')
potter = Student('해리포터', '호그와트')
potter.eat('감자')
potter.study() # study함수에는 매개변수가 없으므로 빈 소괄호
# p286
class Coffee:
def __init__(self, bean):
self.bean = bean
def coffee_info(self):
print(f'원두 : {self.bean}')
class Espresso(Coffee):
def __init__(self, bean, water):
super().__init__(bean)
self.water = water
def espresso_info(self):
super().coffee_info()
print(f'물 : {self.water}ml')
coffee = Espresso('콜롬비아', 30)
coffee.espresso_info()
### 섹션17 예외처리 p290
## 예외 종류
# SyntaxError : 잘못된 문법
print('asdf)
print((asdf)
# NameError : 참조변수 없음
a = 10
b = 22
print(c)
# ZeroDivisionError : 0 나누기 에러
print(10/0)
# IndexError : 인덱스 범위 에러
x = [1, 2, 3]
print(x[3])
# KeyError : 잘못된 키
dic = {'name' : '홍길동', 'age' : 20}
print(dic['hobby']) # 에러
print(dic.get('hobby')) # 에러 안나고 None을 반환(get함수 사용)
# ValueError : 참조 값이 없을 때
x = [1, 4, 10]
x.remove(100)
# TypeError : 자료형에 맞지 않는 연산을 수행할 경우
x = [1, 2]
y = (1, 2)
z = 'Hello'
print(x + y + z) # 서로 다른 자료형이기 때문에 성립 X
## 모든 예외를 처리하는 방식 ( try ~ except )
try:
num = int(input('정수를 입력하세요: '))
print('원의 반지름 : ', num)
print('원의 둘레 : ', num * 3.14 * 2)
print('원의 넓이 : ', num**2 * 3.14 )
except:
print('정수를 입력하지 않았습니다')
# p297
try:
height = input('키를 입력하세요 : ')
height = round(height)
print(f'입력하신 키는 {height}cm로 처리됩니다')
except:
print('예외 발생')
## 특정 예외 처리
try:
a = int(input('제수를 입력하세요: '))
b = int(input('피제수를 입력하세요: '))
print(f'{a}/{b} = {a/b}')
except ZeroDivisionError:
print('0으로 나눌 수 없습니다')
except ValueError:
print('정수만 입력할 수 있습니다')
except Exception:
print('알 수 없는 에러가 발생했습니다')
## 예외 메시지 처리하기
a = [10, 20, 30, 40, 50]
try:
print(a[10])
except IndexError as e:
print(e)
## else문과 finally문
else : 예외 발생하지 않고 정상적으로 처리될 때 실행되는 구문
finally : 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문
예외 발생 여부와 관계 없이 무조건 실행해야 할 경우에 사용
try 는 단독으로 사용할 수 없고, 반드시 except 또는 finally 와 함께 사용해야 함
else 는 반드시 except 뒤에 사용해야 함
# ex)
try:
num = int(input('정수를 입력하세요: '))
except:
print('정수를 입력하지 않았습니다')
else:
print('원의 반지름 : ', num)
print('원의 둘레 : ', num * 3.14 * 2)
print('원의 넓이 : ', num**2 * 3.14)
finally: # 무조건 실행
print('일단 프로그램이 끝났습니다')
'학부 자료 > Python' 카테고리의 다른 글
[Python] 파이썬 기초 16/20, 웹 크롤링의 이해 (4) | 2023.11.07 |
---|---|
[Python] 파이썬 기초 15/20, 클래스 상속, 예외처리 2(강제로 예외 발생)-raise 예제 (4) | 2023.11.07 |
[Python] 파이썬 기초 13/20, 클래스와 객체 (2) | 2023.11.07 |
[Python] 파이썬 기초 12/20, 파일 입출력의 활용 (1) | 2023.11.07 |
[Python] 파이썬 기초 11/20, 모듈, 파일 입출력 (2) | 2023.11.07 |