230915_스터디노트

Sihyun Kim·2023년 9월 15일

[연습문제] 예외처리(05)

import random

class PrivateBank:

    def __init__(self, bank, account_name):
        self.bank = bank
        self.account_name = account_name

        while True:
            newAccountNo = random.randint(10000, 99999)
            if bank.isAccount(newAccountNo):
                continue
            else:
                self.account_no = newAccountNo
                break

        self.totalMoney = 0
        bank.addAccount(self)

    def printBankInfo(self):
        print('-' * 40)
        print(f'account_name: {self.account_name}')
        print(f'account_no: {self.account_no}')
        print(f'totalMoney: {self.totalMoney}')
        print('-' * 40)

class Bank:

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

    def addAccount(self, privateBank):
        self.accounts[privateBank.account_no] = privateBank

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

    def doDeposit(self, ano, m):
        pb = self.accounts[ano]
        pb.totalMoney += m

    def doWithdraw(self, ano, m):
        pb = self.accounts[ano]

        if pb.totalMoney - m < 0:
            raise LackException(pb.totalMoney, m)

        else:
            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. 종료\t'))

    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('잘못 입력했습니다. 다시 선택하세요.')

[연습문제] 텍스트파일(01)

import time

def writeDiary(u, f, d):
    lt = time.localtime()
    timeStr = time.strftime('%Y-%m-%d %I:%M:%S %p', lt)

    filePath = u + f
    with open(filePath, 'a') as o:
        o.write(f'[{timeStr}] {d}\n')

def readDiary(u, f):
    filePath = u + f
    datas = []
    with open(filePath, 'r') as o:
        datas = o.readlines()

    return datas
  • localtime 불러와서 쓰는 방법 기억하기
  • read 할 때, [ ] 리스트 형태로 저장해서 불러오기
import diary

members = {}
uri = 'C:/pythontxt/'

def printMembers():
    for m in members.keys():
        print(f'ID: {m}, PW: {members[m]}')


Flag = True

while Flag:

    selectNum = int(input('1.회원가입 2.한줄일기쓰기 3.일기보기 4.종료\t'))

    if selectNum == 1:
        userID = input('input ID: ')
        userPW = input('input PW: ')
        members[userID] = userPW
        printMembers()

    elif selectNum == 2:
        userID = input('input ID: ')
        userPW = input('input PW: ')

        if userID in members and members[userID] == userPW:
            print('login success')
            fileName = 'myDiary_' + userID + '.txt'
            d = input('오늘의 한 줄 일기: ')
            diary.writeDiary(uri, fileName, d)
        else:
            print('login Fail')
            printMembers()

    elif selectNum == 3:
        userID = input('input ID: ')
        userPW = input('input PW: ')

        if userID in members and members[userID] == userPW:
            print('login success')
            fileName = 'myDiary_' + userID + '.txt'
            data = diary.readDiary(uri, fileName)
            for d in data:
                print(d, end='')

        else:
            print('login Fail')
            printMembers()

    elif selectNum == 4:
        print('Bye')
        Flag = False
  • 로그인 기능 빼고 구현 성공
  • 회원가입 - 딕셔너리 저장 - 회원정보 확인 - 일치하면 파일 접근 권한가짐

[연습문제] 텍스트파일(02)

import time

def getTime():
    lt = time.localtime()
    st = time.strftime('%Y-%m-%d %H:%M:%S')
    return st

while True:

    selectNum = int(input('1. 입금\t2.출금\t3.종료\t'))

    if selectNum == 1:
       money = int(input('입금액 입력: '))
       with open('C:/pythontxt/bank/money.txt', 'r') as f:
           m = f.read()

       with open('C:/pythontxt/bank/money.txt', 'w') as f:
           f.write(str(int(m) + money))

       memo = input('입금 내역 입력: ')
       with open('C:/pythontxt/bank/moneyRegister.txt', 'a') as f:
           f.write('--------------------------------\n')
           f.write(f'{getTime()} \n')
           f.write(f'[입금] {memo} : {money}원\n')
           f.write(f'[잔액] : {(int(m)) + money}원\n')

       print('입금 완료!')
       print(f'기존 잔액: {m}')
       print(f'입금 후 잔액: {(int(m)) + money}원')


    elif selectNum == 2:
        money = int(input('출금액 입력: '))
        with open('C:/pythontxt/bank/money.txt', 'r') as f:
            m = f.read()

        with open('C:/pythontxt/bank/money.txt', 'w') as f:
            f.write(str(int(m) - money))

        memo = input('출금 내역 입력: ')
        with open('C:/pythontxt/bank/moneyRegister.txt', 'a') as f:
            f.write('--------------------------------\n')
            f.write(f'{getTime()} \n')
            f.write(f'[출금] {memo} : {money}원\n')
            f.write(f'[잔액] : {(int(m)) + money}원\n')

        print('출금 완료!')
        print(f'기존 잔액: {m}')
        print(f'출금 후 잔액: {(int(m)) - money}원')


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

    else:
        print('입력 오류. 다시 입력하세요!')

[연습문제] 텍스트파일(03)

uri = 'C:/pythontxt/'
userNum = int(input('0보다 큰 정수 입력: '))

divisorList = []

for i in range(1, userNum+1):
    if userNum % i == 0:
        divisorList.append(i)

with open(uri+'divisor.txt', 'a') as f:
    f.write(f'{userNum}의 약수: {divisorList}\n')
    print('divisor write complete!')
  • 풀이에서는 예외처리 추가됨
  • 오랜만에 혼자 구현 해냈다 흑흑 감격
  • 소수는 다음 시간에!
profile
문과이과예체능통합형인재

0개의 댓글