[연습문제] 예외처리(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!')
- 풀이에서는 예외처리 추가됨
- 오랜만에 혼자 구현 해냈다 흑흑 감격