데이터 스쿨 2주차 학습내용 정리 - 2

호진·2023년 11월 11일
0

AI_스쿨

목록 보기
4/51

제로베이스 데이터 스 2주차 학습 내용 정리 -2

연습문제를 풀면서 파이썬 기초와 중급 사이에는 크나큰 벽이 있는걸 느꼈습니다 ㅎㅎ...

입력 받은 문자 뒤집기

파일명 main
import reverseStr
# 문자열 받기
userInput = input('문자열 입력 : ')
#모듈안의 함수 기능을 사용하여 뒤집어줌
reverseInput = reverseStr.reverseStr(userInput)
print(reverseInput)

간단히 userInput에 문자열을 입력받고 굳이 외부에 선언된 함수 reverseStr를 reverseStr파일 안에서 불러와 뒤집어 주는 코드를 작성했습니다.

#파일명 reverseStr
def reverseStr(str):
    reversedString = ''
    for c in str:
        reversedString = c + reversedString
    return reversedString

str 변수를 받아오면 빈 reversedString 변수에 한글자씩 넣어서 문자열을 뒤집어 준 뒤 return을 통해 내보내주는 함수를 작성해줍니다.

약수와 소수 구하기

제로베이스 중급강의를 들으면서 가장 많이 나오는 단골 유형이다. 외우도록하자

# 0보다 큰 정수를 입력 받음
num = int(input('0보다 큰 정수 입력 : '))
# 약수와 소수를 저장할 공간을 선언
divisor = []
prime = []
# 1에서 부터 본인까지 하기위해 num+1까지를 범위로 선언해줌
for number in range(1,(num + 1)):
# num을 본인보다 작은 모든 자연수로 나눠주고 이중에 나머지가 0이면 그것은 약수!!
    if num % number == 0:
# 이를 append를 통해 딕셔너리에 저장
        divisor.append(number)
print(divisor)
# 2에서 부터 본인까지 하기위해 num+1까지를 범위로 선언해줌
for number in range(2, (num + 1)):
    flag = True
# 2보다 큰 숫자를 1부터 나눠주는 작업을 수행함
    for i in range(2, number):
# 나눠준 값의 나머지가 0이면 그것은 1과 본인을 제외한 다른것으로 나눠진다는 뜻이므로 소수가 아니다!
        if number % i == 0:
            flag = False
            break
# flag가 참이였던 것들을 prime 딕셔너리에 추가해줌             
    if flag:
        prime.append(number)
print(prime)

약수는 생각보다 이론이 간단하지만 소수는 파이썬으로 풀어보라고 하니 뇌정지가 왔으나 한줄한줄 곱씹어보니 이해가 가는 코드였다.

계좌 생성 및 입,출금 시스템만들기

함수 클레스 모듈 예외처리 파이썬 중급에서 배운 내용의 집합체라고 봐도 무방한 문제였다. 풀면서 이해하는데 3시간은 걸린거 같은 문제였다.

# 개인계좌 클래스 생성
class PrivateBank:
    # 클래스 초기화 함수
    def __init__(self, bank, account_name):
        # 은행 이름 저장
        self.bank = bank
        # 예금주 이름 저장
        self.account = account_name

        # 계좌번호 생성
        while True:
            num = random.randint(10000, 99999)
            if bank.isAccount(num):
                continue
            else:
                self.account_no = num
                break

        # 총 예금액 초기화
        self.totalMoney = 0

        # 은행에 계좌 추가
        bank.addAccount(self)

    # 계좌 정보 출력 함수
    def printBankInfo(self):
        print(f'예금주: {self.account}')
        print(f'계좌번호: {self.account_no}')
        print(f'총 예금액: {self.totalMoney}')


# 은행 클래스 생성
class Bank:

    # 클래스 초기화 함수
    def __init__(self):
        # 계좌 정보 저장 딕셔너리
        self.accounts = {}

    # 계좌 추가 함수
    def addAccount(self, privateBank):
        # 계좌번호를 키로, 계좌 정보를 값으로 하는 딕셔너리에 계좌 추가
        self.accounts[privateBank.account_no] = privateBank

    # 계좌 존재 여부 확인 함수
    def isAccount(self, ano):
        # 딕셔너리에 계좌번호가 존재하면 True, 아니면 False 반환
        return ano in self.accounts

    # 입금 함수
    def doDeposit(self, ano, m):
        # 계좌번호에 해당하는 계좌 정보 가져오기
        pb = self.accounts[ano]

        # 총 예금액 증가
        pb.totalMoney = pb.totalMoney + m

    # 출금 함수
    def doWithdraw(self, ano, m):
        # 계좌번호에 해당하는 계좌 정보 가져오기
        pb = self.accounts[ano]

        # 출금액보다 총 예금액이 적으면 예외 발생
        if pb.totalMoney - m < 0:
            raise LackException(pb.totalMoney, m)

        # 총 예금액 감소
        pb.totalMoney = pb.totalMoney - m


# 예금액 부족 예외 클래스
class LackException(Exception):
    def __init__(self, m1, m2):
        # 예외 메시지 설정
        super().__init__(f'잔고 부족!! 잔액: {m1}, 출금액: {m2}')

은행 계좌 생성부터 입출금 관련 기능들을 선언

import bank

# 한국은행 객체 생성
koreaBank = bank.Bank()

# 예금주 이름 입력 받기
new_account_name = input('통장 개설을 위한 예금주 입력 : ')

# 예금주 이름을 바탕으로 은행 계좌 생성
myAccount = bank.PrivateBank(koreaBank, new_account_name)

# 계좌 정보 출력
myAccount.printBankInfo()

# 메뉴 선택
while True:
    selectNum = int(input('1.입금, 2.출금, 3.종료'))

    if selectNum == 1:
        # 입금액 입력 받기
        m = int(input('입금액 입력: '))

        # 입금
        koreaBank.doDeposit(myAccount.account_no, m)

        # 계좌 정보 출력
        myAccount.printBankInfo()

    elif selectNum == 2:
        # 출금액 입력 받기
        m = int(input('출금액 입력: '))

        try:
            # 출금
            koreaBank.doWithdraw(myAccount.account_no, m)

        except bank.LackException as e:
            # 예금액 부족 예외 발생 시 예외 메시지 출력
            print(e)

        finally:
            # 계좌 정보 출력
            myAccount.printBankInfo()

    elif selectNum == 3:
        print('Bye~')
        break

    else:
        print('잘못 입력 하셨습니다.')

위에서 생성한 은행계좌와 입출금 기능들을 사용하였고 while문으로 선택지를 제시해 기능을 사용할수있도록 한다.

profile
중요한 건 꺽였는데도 그냥 하는 마음

0개의 댓글

관련 채용 정보