Python 실습(예외 처리)

dumbbelldore·2024년 11월 10일
0

zero-base 33기

목록 보기
15/97

1. 두 수의 합 계산 프로그램

  • 두 수의 합을 입력받아 단순 합 결과를 반환하는 프로그램을 만드시오. (단, 두 수가 int형태가 아닐 경우에 대비하여 적절한 예외처리를 수행하시오.)
# calculator.py
def num_add(num_1, num_2):

    # num_1 캐스팅 검증
    try:
        num_1 = float(num_1)
    except:
        print("첫 번째 숫자가 올바르게 입력되지 않았습니다.")
        return

    # num_2 캐스팅 검증
    try:
        num_2 = float(num_2)
    except:
        print("두 번째 숫자가 올바르게 입력되지 않았습니다.")
        return

    sum = int(num_1 + num_2)
    print(sum)

# run.py
import calculator as cc

if __name__ == "__main__":

    num_1 = input("숫자1을 입력하세요: ")
    num_2 = input("숫자2를 입력하세요: ")

    cc.num_add(num_1, num_2)

# run.py 실행결과
# 숫자1을 입력하세요: 4
# 숫자2를 입력하세요: a
# 두 번째 숫자가 올바르게 입력되지 않았습니다.

2. 소수 판별 프로그램

  • 1 부터 1,000까지의 수 중 난수 발생기를 이용하여 소수인지 판별하는 프로그램을 만드시오. 소수인 경우 누적 10개까지 리스트에 저장하고, 소수가 아닌 경우 사용자 예외처리를 통해 알림 메시지를 발생하시오.
# calc_prime.py
class NotPrimeException(Exception):
    def __init__(self, num):
        super().__init__(f"추출된 {num}은 소수가 아닙니다.")

class YesPrimeException(Exception):
    def __init__(self, num):
        super().__init__(f"추출된 {num}은 소수에 해당하여 리스트에 저장합니다.")
        
def check_prime(num):
    flag = False

    for i in range(2, num):
        if num % i == 0:
            flag = True
            break

    if flag == True:
        raise NotPrimeException(num)

    else:
        raise YesPrimeException(num)

# run.py
import random
import calc_prime as cp

if __name__ == "__main__":

    prime_num_list = list()

    while True:
        if len(prime_num_list) == 10:
            print(f"추출된 소수 리스트: {prime_num_list}")
            break

        else:
            num = random.randint(1, 1_000)
            if num in prime_num_list:
                print(f"추출된 {num}은 이미 리스트에 존재합니다.")
                continue

            else:
                try:
                    cp.check_prime(num)

                except cp.YesPrimeException as e:
                    print(e)
                    prime_num_list.append(num)

                except cp.NotPrimeException as e:
                    print(e)
                    
# run.py 실행결과
# 추출된 114은 소수가 아닙니다.
# 추출된 981은 소수가 아닙니다.
# 추출된 619은 소수에 해당하여 리스트에 저장합니다.
# 추출된 859은 소수에 해당하여 리스트에 저장합니다.
# (중략)
# 추출된 815은 소수가 아닙니다.
# 추출된 637은 소수가 아닙니다.
# 추출된 102은 소수가 아닙니다.
# 추출된 941은 소수에 해당하여 리스트에 저장합니다.
# 추출된 소수 리스트: [619, 859, 211, 757, 127, 797, 997, 157, 977, 941]

3. 회원가입 프로그램

  • 이름, 메일, 비밀번호, 주소, 연락처를 입력받는 회원가입 프로그램을 제작하되, 한 개 이상의 데이터가 비어 있는 경우 에러를 출력하도록 설계하시오.
# member_register.py
class Member():
    def __init__(self, name, mail, pw, addr, phone):
        self.name = name
        self.mail = mail
        self.pw = pw
        self.addr = addr
        self.phone = phone

class NullDataException(Exception):
    def __init__(self, var_name):
        super().__init__(f"'{var_name}'은(는) 반드시 입력하셔야 합니다.")

class MemberManage():
    def __init__(self):
        self.db = dict()

    def reg_member(self, member):
        if member.name == '':
            raise NullDataException("이름")
        else:
            self.db["이름"] = member.name

        if member.mail == '':
            raise NullDataException("메일")
        else:
            self.db["메일"] = member.mail

        if member.pw == '':
            raise NullDataException("비번")
        else:
            self.db["비번"] = member.pw

        if member.addr == '':
            raise NullDataException("주소")
        else:
            self.db["주소"] = member.addr

        if member.phone == '':
            raise NullDataException("연락처")
        else:
            self.db["연락처"] = member.phone

        print("회원가입 완료")

# run.py
import member_register as mr

if __name__ == "__main__":

    name = input("이름: ")
    mail = input("메일: ")
    pw = input("비번: ")
    addr = input("주소: ")
    phone = input("연락처: ")

    member = mr.Member(name, mail, pw, addr, phone)

    try:
        member_register = mr.MemberManage().reg_member(member)

    except mr.NullDataException as e:
        print(e)

# run.py 실행결과
# 이름: Jane Doe
# 메일: jdoe@gmail.com
# 비번: jdoe12345
# 주소: 
# 연락처: 008-1122-2232
# '주소'은(는) 반드시 입력하셔야 합니다.

*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글