예외(Exceptions)

프로그램에서 에러가 발생할 가능성을 방지하여 안정적으로 처리하기 위해 예외를 작성한다.

fruit = ['apple', 'banana', 'strawberry']

try:
    fruit[3]
except:
    print("인덱스를 참조할 수 없습니다.")
# else:
#     print("정상 수행")
finally:
    print("명령 수행")

try에는 예외가 발생 가능성이 있는 코드를 작성하고 except는 에러 상황을 만났을 때, 우회하여 어떤 처리를 해야하는지 설정한다. else는 정상적으로 코드를 수행했을 때 작동하며, finally는 에러가 발생하든 정상적으로 실행되든 작동한다.

 

 

파일 읽기/쓰기

파일 경로를 설정 할 때에는 절대경로와 상대경로가 있다.

절대경로는 컴퓨터의 전체 경로를 말하며(보통 C:\Users\...로 시작한다.) 특수한 경우를 제외하면 일반적으로 작업할 때에는 컴퓨터에 종속되지 않는 상대경로를 쓴다.

f = open('literature\poem.txt', 'r', encoding='UTF-8')

print(f.read()) # 전체
print(f.readline()) # 한 줄
print(f.readlines()) # 전체 줄

f.close()

파일을 읽은 후에는 파일이 유실되지 않도록 close( ) 함수로 닫아주어야한다.

 

with문은 close( ) 함수를 사용하지 않아도 파일을 읽고 자동으로 닫는다.

with open('literature\poem.txt', 'r', encoding='UTF-8') as f:
    print(f.read())

 

쓰기는 a와 w 두 가지 방법이 있다.

f = open('literature\poem.txt', 'a', encoding='UTF-8')
f = open('literature\poem2.txt', 'w', encoding='UTF-8')

f.write("새로운 글이 작성되었습니다.")

f.close()

a는 기존의 내용에 새로 추가하는 것이고, w는 기존의 내용에서 새로운 내용으로 대체하는 것이다. w 모드를 사용할 때에는 기존의 내용이 유실되므로 주의하자.

 

 

'Back-End > Python' 카테고리의 다른 글

객체지향  (0) 2023.08.09
회원가입 프로그램 실습 - 파이썬(Python) 편  (0) 2023.08.08
함수  (0) 2023.08.07
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20
클래스(Classes)

클래스의 이름은 함수나 변수의 이름과는 다르게 첫글자를 대문자로 시작한다.

self는 __init__ 생성자 함수를 만들 때 필요한 첫 번째 파라미터이다. self를 넣지 않으면 예기치 못한 오류를 발생시킬 수 있다.

# 클래스 (Classes)

class Student:

    def __init__(self, name, major, is_graduated):
        self.name = name
        self.major = major
        self.is_graduated = is_graduated

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과', False)

student_1_name = student_1.name
print(student_1_name)

student_1.study()

인스턴스화 된 student_1을 바로 print로 출력하면 지정된 주소값이 나온다. 저장된 값을 불러오기 위해서는 변수를 만들어 넣어주어야한다.study 함수에는 이미 출력 함수가 들어있기 때문에 따로 print에 넣어주지 않아도 출력된다.

 

정보를 수정하는 방법에 대해 알아보자.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과')

student_1.major = 'ㅁㅁ과'
print(student_1.major)

위처럼 직접적으로 정보를 수정할 수 있다. 그러나 이 방법은 보안 부분에서 좋지 않은 방법이다.

 

함수를 구성하여 인스턴스의 속성을 바꾸는 것이 바람직하다.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

    def edit_major(self, new_major):
        student_1.major = new_major
        print(f'{student_1.major}로 전공이 변경되었습니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅁㅁ과')

student_1.edit_major('ㅁㅁ과')
print(student_1.major)

 

 

상속(Inheritance)

기존에 사용하던 클래스의 공통적인 속성을 가져와 사용할 수 있다.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과')

student_1.major = 'ㅁㅁ과'
print(student_1.major)

# 상속
class ForeignStudent(Student):

    def __init__(self, name, major, country):
        super().__init__(name, major)
        self.country = country

foreign_stud_1 = ForeignStudent('박사람', '도예학과', '미국')
print(foreign_stud_1.name)
print(foreign_stud_1.major)
print(foreign_stud_1.country)
print(foreign_stud_1.is_graduated)

 

부모 클래스에서 정의된 함수를 자식 클래스에서 덮어 쓰는 것을 오버라이딩이라고 한다.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과')

student_1.major = 'ㅁㅁ과'
print(student_1.major)

# 상속
class ForeignStudent(Student):

    def __init__(self, name, major, country):
        super().__init__(name, major)
        self.country = country
        
    # 오버라이딩
    def study(self):
        print(f'{self.name} is studing now.')

foreign_stud_1 = ForeignStudent('박사람', '도예학과', '미국')

foreign_stud_1.study()

 

만든 클래스를 모듈에서 함수를 불러왔던 것처럼 활용할 수 있다.

# from classes import Student, ForeignStudent
from classes import * # 모든 함수

stud_1 = Student('김사람', 'ㅁㅁ과')
foreign_stud_1 = ForeignStudent('박사람', '도예학과', '미국')

stud_1.study()
foreign_stud_1.study()

 

 

'Back-End > Python' 카테고리의 다른 글

예외 처리와 파일 다루기  (0) 2023.08.10
회원가입 프로그램 실습 - 파이썬(Python) 편  (0) 2023.08.08
함수  (0) 2023.08.07
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20

파이썬으로 회원가입 프로그램을 만들어보자.

print('==============================')
print('회원가입')
print('==============================')

register = False

while not register:
    print('회원가입을 진행하시겠습니까?\n y:진행     N:취소')
    register_input = input('>> ')
    register_input = register_input.lower()

    if register_input == 'y':
        register = True
        print('==============================')
        print('회원가입이 진행됩니다.')
        print('==============================')
    elif register_input == 'n':
        print('==============================')
        print('회원가입이 취소됩니다.')
        print('==============================')
        exit()
    else:
        print('입력 값을 확인해주세요.')

users = [] # 회원정보 저장

while True:

    user = {} # 회원 하나하나의 정보

    username = input('ID: ')
    while True:
        password = input('PW: ')
        password_confirm = input('PW 확인: ')
        if password == password_confirm:
            break
        else:
            print('비밀번호가 일치하지 않습니다.')
    name = input('이름: ')
    while True:
        birth_date = input('생년월일(6자리): ')
        if len(birth_date) == 6:
            break
        else:
            print('생년월일 입력값이 올바르지 않습니다.')
    email = input('이메일: ')

    # user 딕셔너리에 추가
    user['username'] = username
    user['password'] = password
    user['name'] = name
    user['birth_date'] = birth_date
    user['email'] = email
    
    users.append(user) # users 리스트에 추가
    print(users)

    print("------------------------------")
    print(f"{user['name']} 님 가입을 환영합니다!")
    print("------------------------------")

    print('회원가입을 추가로 진행하시겠습니까?\n y:진행     N:취소')
    register_another_input = input('>> ')
    register_another_input = register_another_input.lower()

    if register_another_input == 'y':
        pass
    elif register_another_input == 'n':
        exit()

위에 입력한 회원가입 정보는 실제로 저장되지 않는다.

실제로 회원가입이 저장되기를 원한다면 데이터베이스와 연동하여 프로그램을 짜야한다.

'Back-End > Python' 카테고리의 다른 글

예외 처리와 파일 다루기  (0) 2023.08.10
객체지향  (0) 2023.08.09
함수  (0) 2023.08.07
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20
함수(Functions)

함수는 def를 통해 선언한다. 함수의 이름은 변수와 마찬가지로 규칙에 따라 정해야한다.

값을 받아 함수를 처리하려면 파라미터가 있어야한다. 파라미터는 괄호( )에 들어가는 변수이다.

def print_name(name):     # 'name' => 매개변수(파라미터)
    print(f'이름은 {name}입니다')

print_name("김토끼")
print_name("이토끼")     # "김토끼", "이토끼", "박토끼" => 인자(인수)
print_name("박토끼")

파라미터는 함수를 정의하는 부분에 쓰인 변수, 인자는 함수를 실행할 때 넘겨지는 값이라고 보면 된다.

 

함수를 정의할 때 파라미터를 반드시 사용하지 않아도 된다.

def print_ex_string():
    print('예시 문자열입니다.')

print_ex_string()

 

파라미터를 두 개 이상 사용해도 된다.

def print_name_age(name, age):
    print(f'이름은 {name}이고 {age}살 입니다.')

print_name_age("김토끼", "3")

 

파라미터에 기본값을 설정하면 인자를 주지 않아도 오류가 발생하지 않는다.

def order_coffee(qty, option = 'hot'):
    print(f'{qty}잔 / {option}')

order_coffee(3, 'iced')
order_coffee(3)

주의할 점은 기본값이 있는 파라미터는 기본값이 없는 파라미터의 뒤에 와야한다.

 

파라미터를 직접 가져와 입력하면 순서에 상관없이 입력할 수 있다.

def order_coffee(qty, option = 'hot'):
    print(f'{qty}잔 / {option}')

order_coffee(option ='iced', qty = 5)

 

return은 값을 반환시켜 다른 곳에 사용할 수 있도록 해준다.

def get_id(email):

    email_id = email.removesuffix('@test.com')
    print(email_id)

    return email_id

user_id = get_id('user@test.com')
print(user_id)

 

return이 없으면 user_id는 값이 없는 변수가 된다.

def get_id(email):

    email_id = email.removesuffix('@test.com')
    print(email_id)

    # return email_id

user_id = get_id('user@test.com')
print(user_id)

 

if 문을 활용한 함수

def get_id(email):

    if email.endswith('@test.com'):
        email_id = email.removesuffix('@test.com')
        print(email_id)
        return email_id
    else:
        print('처리할 수 없는 이메일 주소입니다.')

user_id = get_id('user@example.com')
print(user_id)

 

 

모듈

연관이 있는 함수들의 집합

모듈로 함수를 관리하게 되면 하나의 라이브러리처럼 만들어서 다양한 프로그램에 공통적으로 활용할 수 있다.

 

먼저 모듈로 사용할 파일을 만든다.

def get_id(email):

    if email.endswith('@test.com'):
        email_id = email.removesuffix('@test.com')
        print(email_id)
        return email_id
    else:
        print('처리할 수 없는 이메일 주소입니다.')

함수를 넣어준 뒤, 저장한다.

 

새로운 파일에서 모듈에 있는 함수를 불러와 활용할 수 있다.

from id_getter import get_id

user_id = get_id('user@test.com')
print(user_id)

from은 모듈의 파일명이고 import는 모듈에서 불러올 함수의 이름이다.

 

 

'Back-End > Python' 카테고리의 다른 글

객체지향  (0) 2023.08.09
회원가입 프로그램 실습 - 파이썬(Python) 편  (0) 2023.08.08
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20
변수와 자료형  (0) 2023.07.19

+ Recent posts