<2주차_2일> 파이썬 중급 문풀

Nary Kim·2023년 5월 11일
0
post-thumbnail

파이썬 중급 문풀을 끝냈다. 이번에는 실습을 먼저 내가 만들어보고 수업을 듣는 식으로 해서 시간이 오래 걸렸다. 그러나 확실히 좀더 클래스를 만드는 것이 능숙해졌다. 유익한 시간이였다.
실습 중에 예외처리에 관한 것과 파일 입출력에 관한 것을 남겨둔다.

1. 예외처리

  • 메인실행코드
import bank_class as bc

hanaBank = bc.BankWork()
name = input('통장 개설을 위한 예금주 입력 :')
myAccount = bc.BankAccount(hanaBank, name)
hanaBank.addAccount(myAccount)

anwer = int(input('1. 입금, 2. 출금, 3. 종료 '))
while anwer != 3:
    if anwer == 1:
        hanaBank.deposit(myAccount)
    elif anwer == 2:
        try:
            hanaBank.withdraw(myAccount)
        except bc.LackMoneyError as e:
            print(e)
        finally:
            hanaBank.printMeney(myAccount)

    anwer = int(input('1. 입금, 2. 출금, 3. 종료 '))
  • 패키지 코드
import random

class BankAccount:

    def __init__(self, bank, name):
        self.bank = bank
        self.name = name
        self.number = random.randint(10000,99999)
        self.money = 0

        while bank.isAccount(self.number):
            self.number = random.randint(10000,99999)

        bank.addAccount(self)

        self.printAccountInfo()

    def printAccountInfo(self):
        print('='*50)
        print(f'name : {self.name}')
        print(f'account number : {self.number}')
        print(f'money : {self.money}')
        print('=' * 50)


class BankWork:

    def __init__(self):
        self.accounts = {}

    def isAccount(self,num):
        return num in self.accounts

    def addAccount(self, u):
        self.accounts[u.number] = u

    def deposit(self, u):
        self.printMeney(u)
        m = int(input('입금액 입력 : '))
        print(f'{m}원 입금합니다.')

        self.accounts[u.number].money += m

        self.printMeney(u)

    def withdraw(self, u):
        self.printMeney(u)
        m = int(input('출금액 입력 : '))
        print(f'{m}원 출금합니다.')
        if self.accounts[u.number].money >= m:
            self.accounts[u.number].money -= m
        else:
            raise LackMoneyError()

    def printMeney(self,u):
        print('=' * 40)
        print(f'현재 잔액은 {self.accounts[u.number].money}원 입니다.')
        print('=' * 40 + '\n')


class LackMoneyError(Exception):
    def __init__(self):
        super().__init__('잔액이 부족하여 출금하지 못하였습니다.')

2. 파일 입출력

  • 메인실행코드
import boatSchedule as bs


center = bs.boatSchduleCenter()
b1 = bs.boat(center, 'bo1', 3, 'fruits')
b2 = bs.boat(center, 'bo2', 4, 'fishes')
b3 = bs.boat(center, 'bo3', 5, 'vegetables')

center.fileRW(center.calMaxday())
  • 패키지 코드
import math
import datetime

class boat:

    def __init__(self,bt, n, dt, p):
        self.name = n
        self.dayterm = int(dt)
        self.product = p
        self.num = len(bt.boats)

        bt.addBoat(self)

class boatSchduleCenter:

    def __init__(self):
        self.boats = {}

    def addBoat(self, b):
        self.boats[b.num] = b

    def calMaxday(self):
        dt = 1
        for i in self.boats:
            dt = math.lcm(dt,self.boats[i].dayterm)
        return dt

    def fileRW(self,num):
        basetime = datetime.datetime(2022, 1, 1, 10, 0, 0)

        with open('/Users/nary_macbook/Documents/pythonex/project/arrive.txt','a') as f:
            f.write(f'2022년 모든 선박 입항일\n')
            f.write(f'{basetime}\n')

        nexttime = basetime + datetime.timedelta(days=num)

        while True:
            with open('/Users/nary_macbook/Documents/pythonex/project/arrive.txt', 'a') as f:
                f.write(f'{nexttime}\n')
                nexttime = nexttime + datetime.timedelta(days=num)
            if nexttime.year > 2022:
                break
profile
나는 무엇이 될것인가!!

0개의 댓글