방명록
- 파일 입출력, 함수, 클래스, 예외 처리2024년 02월 09일 07시 15분 27초에 업로드 된 글입니다.작성자: 재형이반응형
- 오늘은 설날 공휴일이라 느긋하게 일어나서 작성 중이다
- 이런 꿀 같은 공휴일을 잘 활용해야 내가 계획하고 있는 것들을 잘 마무리할 수 있을 것이다
- 아무나 하지 못하는 걸 해야 특별한 삶을 살 수 있다고 믿는다
- 누구보다 열심히 하자
1. 파이썬(Python) 파일 입출력
- 파일 객체를 만들 때는 open(), 파일 객체를 닫을 때는 close() 함수를 사용한다
- 파이썬에서는 여러 가지 파일 모드(mode)를 제공한다
- r: 읽기(read) 모드(파일 읽기)
- w: 쓰기(write) 모드(파일에 내용을 쓰기)
- a: 추가(append) 모드(파일의 마지막에 새로운 내용 추가)
1-1. 파일 출력
- 파일에 데이터를 쓸 때는 write() 함수를 사용할 수 있다
- 줄바꿈 기호(\n)을 사용하여, 줄을 변경할 수 있다
- 여러 줄에 걸쳐서 파일에 데이터를 작성할 수 있다
f = open("result.txt", "w", encoding='utf8') for line in range(1, 6): data = f"{line}번째 줄\n" f.write(data) f.close()
1-2. 파일 읽기
- readline() 함수를 이용하면 파일의 데이터를 한 줄씩 읽을 수 있다
- 각 줄을 출력할 때 기본적으로 마지막 줄에 줄바꿈 기호(\n)도 함께 포함된다
- strip() 함수를 사용하지 않으면, 두 줄씩 줄바꿈이 수행된다
f = open("data.txt", "r") while True: line = f.readline() if not line: # 더 읽을 문장이 없다면 break else: print(line.strip()) f.close()
- 파일의 모든 줄을 한꺼번에 읽을 때는 readlines() 함수를 사용할 수 있다
- readlines() 함수는 기본적으로 각 줄을 그대로 읽기 때문에 줄바꿈 기호(\n)가 포함된다
- 줄바꿈 기호를 제거하기 위해 strip()을 사용할 수 있다
- strip() 함수를 사용하지 않으면, 두 줄씩 줄바꿈이 수행된다
f = open("result.txt", "r", encoding='utf8') lines = f.readlines() for i in range(len(lines)): line = lines[i].strip() print(f"{i}번째 줄의 내용: {line}") f.close()
- read() 함수를 사용하면 파일의 전체 내용을 하나의 문자열로 반환한다
f = open("result.txt", "r", encoding='utf8') data = f.read() print(data) f.close()
1-3. 파일 객체 자동으로 열고 닫기
- 다음의 문법을 활용하여 파일 객체를 자동으로 열고 닫을 수 있다
- open() 함수와 close() 함수의 기능이 함께 사용된다
1-3-1. a 모드 사용
file_name = "result.txt" with open(file_name, "a", encoding='utf8') as f: f.write("Hello World")
1-3-2. w 모드 사용
file_name = "result.txt" with open(file_name, "w", encoding='utf8') as f: f.write("Hello World")
2. 파이썬(Python) 함수
- 함수는 def 구문을 이용하여 작성할 수 있다
- 그리고 tab(들여쓰기, 스페이스 4칸)를 사용해 구분할 수 있다
2-1. 리스트 내 원소 중에서 가장 큰 값의 인덱스(위치)를 찾아서 반환하는 함수를 작성해 보자
def find_max_index(arr): max_index = 0 for i in range(len(arr)): if arr[max_index] < arr[i]: # 더 큰 값을 찾은 경우 max_index = i return max_index data = [7, 1, 5, 9, 3, 2, 4] max_index = find_max_index(data) print(max_index) # 3
2-2. 특정한 값을 가지는 원소의 인덱스를 찾는 함수를 작성해 보자
def find_certain_value(arr, value): for i, x in enumerate(arr): if x == value: return i return -1 # 찾지 못한 경우 -1을 반환 print(find_certain_value([3, 5, 7, 9], 2)) print(find_certain_value([3, 5, 7, 9], 7)) # -1 # 2
2-3. 하나의 자연수가 주어졌을 때, 소수인지 아닌지 판별하는 함수를 작성해 보자
def is_prime_number(x): # 1이하인 경우 소수가 아님 if x <= 1: return False # 1과 자기 자신 외의 자연수로 나누어 떨어지는 경우 소수가 아님 for divisor in range(2, x): if x % divisor == 0: return False return True print(is_prime_number(1)) print(is_prime_number(2)) print(is_prime_number(5)) print(is_prime_number(7)) print(is_prime_number(9)) print(is_prime_number(12)) print(is_prime_number(17)) # False # True # True # True # False # False # True
3. 파이썬(Python) 클래스
- 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이란 프로그래밍을 컴퓨터의 시각이 아닌 인간의 시각으로 이해할 수 있도록 작성하는 것을 말합니다. 여기서 객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있습니다. 이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍입니다.
- 이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 합니다
- 그리고 선언된 클래스로부터 생성된 객체를 인스턴스(instance)라고 합니다
- 상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다
이러한 상속은 캡슐화, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다
# 사람이라는 부모 클래스 class Human: def __init__(self, name, age): self.name = name self.age = age def show_human(self): print("===== 인적 사항 =====") print(f"이름: {self.name}") print(f"나이: {self.age}") # 선생이라는 자식 클래스 class Teacher(Human): def __init__(self, name, age, teacher_id, subject, salary): super().__init__(name, age) self.teacher_id = teacher_id self.subject = subject self.salary = salary def show_teacher(self): print("===== 교직원 카드 =====") print(f"교직원 번호: {self.teacher_id}") print(f"담당 과목: {self.subject}") print(f"월급: {self.salary}") # 학생이라는 자식 클래스 class Student(Human): def __init__(self, name, age, student_id, grade, score): super().__init__(name, age) self.student_id = student_id self.grade = grade self.score = score def show_student(self): print("===== 학생 카드 =====") print(f"학생 번호: {self.student_id}") print(f"학년: {self.grade}") print(f"점수: {self.score}") # 테스트 teacher = Teacher("김순자", 40, 1, "사회", 450) teacher.show_human() teacher.show_teacher() student = Student("홍길동", 18, 1, 2, 95) student.show_human() student.show_student() ===== 인적 사항 ===== 이름: 김순자 나이: 40 ===== 교직원 카드 ===== 교직원 번호: 1 담당 과목: 사회 월급: 450 ===== 인적 사항 ===== 이름: 홍길동 나이: 18 ===== 학생 카드 ===== 학생 번호: 1 학년: 2 점수: 95
3-1. 클래스 정렬
- 특정한 기준에 따라서 다수의 인스턴스를 정렬하고 싶을 때가 있다
- key 속성의 값으로 익명 함수를 넣거나, lt 함수를 이용하여 정렬 기능을 구현할 수 있다
class Client: def __init__(self, id, name, age, gender, point): self.id = id self.name = name self.age = age self.gender = gender self.point = point def show(self): print("===== 고객 정보 =====") print(f"고객 번호: {self.id}") print(f"이름: {self.name}") print(f"나이: {self.age}") print(f"성별: {self.gender}") print(f"고객 점수: {self.point}") def __lt__(self, other): return self.point < other.point client1 = Client(1, "홍길동", 20, "남성", 1200) client2 = Client(2, "김순자", 21, "여성", 300) client3 = Client(3, "임꺽정", 23, "남성", 700)
3-1-1. 람다함수(익명함수) 사용
client_list = [client1, client2, client3] result = sorted(client_list, key=lambda x: x.point, reverse=True) for client in result: client.show() ===== 고객 정보 ===== 고객 번호: 1 이름: 홍길동 나이: 20 성별: 남성 고객 점수: 1200 ===== 고객 정보 ===== 고객 번호: 3 이름: 임꺽정 나이: 23 성별: 남성 고객 점수: 700 ===== 고객 정보 ===== 고객 번호: 2 이름: 김순자 나이: 21 성별: 여성 고객 점수: 300
3-1-2. lt 함수 사용 (less than)
# 클래스 선언 시 # def __lt__(self, other): # return self.point < other.point client_list = [client1, client2, client3] result = sorted(client_list, reverse=True) for client in result: client.show() ===== 고객 정보 ===== 고객 번호: 1 이름: 홍길동 나이: 20 성별: 남성 고객 점수: 1200 ===== 고객 정보 ===== 고객 번호: 3 이름: 임꺽정 나이: 23 성별: 남성 고객 점수: 700 ===== 고객 정보 ===== 고객 번호: 2 이름: 김순자 나이: 21 성별: 여성 고객 점수: 300
- 실제로 딥러닝 분야에서 TensorFlow와 PyTorch 프레임워크를 사용할 때는 다양한 클래스를 상속 받아 사용할 수 있다
- 따라서, 다양한 딥러닝 모델을 정의하고 학습을 진행하기 위해 클래스(class)에 대한 개념 숙지가 필수적이다
- 다양한 기능이 라이브러리 형태(클래스 형태)로 제공되기 때문에, 상속을 받아 사용하는 것이 일반적이다
4. 파이썬(Python) 예외 처리
- 예외(exception)란, 코드 실행 도중에 발생하는 오류(error)로 이해할 수 있다
- 기본적으로 예외가 발생하면, 프로그램 실행이 중단된다
- 예외 처리란, 프로그램의 예외를 처리하는 것을 말한다
- 예외가 발생하더라도, 프로그램이 종료되지 않도록 처리할 수 있다
- 예외 처리의 기본적인 형태는 다음과 같다
try: 기본적으로 실행할 코드 except 예외명: 예외가 발생했을 때 실행할 코드
4-1. 각 에러코드에 따른 예외 처리하기
data_list = [1, 2, 3, 4, 5] index = 5; x = 0; # index = 5 일 때는 list index out of range 에러 발생 # x = 0 일 때는 division by zero 에러 발생 try: data = data_list[index] result = data / x print(result) except IndexError as e: print("배열의 크기를 벗어난 인덱스에 접근할 수 없습니다.") print("[오류 메시지]") print(e) except ZeroDivisionError as e: print("0으로 나눌 수 없습니다.") print("[오류 메시지]") print(e)
- 딥러닝 프로그램을 작성할 때 다양한 예외가 발생할 수 있다
- 특히 입력과 출력의 차원(dimension)이 일치하지 않아서 딥러닝 모델 연산 수행 과정에서 오류가 발생할 수 있다
- 존재하지 않거나, 잘못된 데이터를 불러오려고 할 때 오류가 발생할 수 있다
반응형'프로그래밍 언어 > Python' 카테고리의 다른 글
리스트, 튜플, 딕셔너리, 집합, 불, 조건문, 반복문 (2) 2024.02.08 개발환경, 기본 입출력, 정수 자료형, 실수 자료형, 문자열 자료형 (4) 2024.02.07 큐, 덱, 이진 탐색 트리, 우선 순위 큐, 그래프 (2) 2024.02.06 배열, 연결리스트, 파이썬 리스트 자료형,스택 (2) 2024.02.05 다음글이 없습니다.이전글이 없습니다.댓글