Ch4 파이썬 중급 문제풀이 60-69 (중급문풀6-8)

김민지·2023년 3월 16일
0

Part 01. Python

목록 보기
12/12
  1. 예외처리
    try:
        print(f'{n1} / {n2} = {n1 / n2}')
    except ZeroDivisionError as e:
        print(e)

-> 0으로 나눌 수 없을 때 예외처리


class NotPrimeException(Exception):
    def __init__(self, n):
        super().__init__(f'{n} is not prime number')


class PrimeException(Exception):
    def __init__(self, n):
        super().__init__(f'{n} is prime number')

def isPrime(number):
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False
            break
    if flag == False:
        raise NotPrimeException(number)

    else:
        raise PrimeException(number)
import prime_module as pm

import random

primeNumbers = []

n = 0
while n < 10:
    rn = random.randint(1, 1000)
    if rn not in primeNumbers:
        try:
            pm.isPrime(rn)
        except pm.NotPrimeException as e:
            print(e)
            continue
        except pm.PrimeException as e:
            print(e)
            primeNumbers.append(rn)
    else:
        print(f'{rn} is overlap number.')
        continue
    n += 1

print(primeNumbers)
  • 예외처리(03) 진짜 너무어려움
class EmptyDataException(Exception):
    def __init__(self, i):
        super().__init__(f'{i} is empty')


def checkInputData(n, m, p, a, ph):

    if n == '':
        raise EmptyDataException('name')
    elif m == '':
        raise EmptyDataException('mail')
    elif p == '':
        raise EmptyDataException('password')
    elif a == '':
        raise EmptyDataException('address')
    elif ph == '':
        raise EmptyDataException('phone')


class RegistMember():
    def __init__(self, n, m, p, a, ph):
        self.m_name = n
        self.m_mail = m
        self.m_pw = p
        self.m_addr = a
        self.m_phone = ph
        print('Membership complete!!')

    def printMemberInfo(self):
        print(f'm_name: {self.m_name}')
        print(f'm_mail: {self.m_mail}')
        print(f'm_pw: {self.m_pw}')
        print(f'm_addr: {self.m_addr}')
        print(f'm_phone: {self.m_phone}')
import mem

m_name = input('이름 입력: ')
m_mail = input('메일 주소 입력: ')
m_pw = input('비밀번호 입력: ')
m_addr = input('주소 입력: ')
m_phone = input('연락처 입력: ')

try:
    mem.checkInputData(m_name, m_mail, m_pw, m_addr, m_phone)
    new_member = mem.RegistMember(m_name, m_mail, m_pw, m_addr, m_phone)
    new_member.printMemberInfo()
except mem.EmptyDataException as e:
    print(e)
  • 예외(05)도 어려움.. 복잡하다
  1. 텍스트파일
  • 회원가입하고, 로그인,비번 쳐서 일기 쓰고 보기
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 f:
        f.write(f'[{timeStr}] {d}\n')


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

    return datas
import diary

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

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

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

    if selectNum == 1:
        mId = input('input ID: ')
        mPw = input('input PW: ')
        members[mId] = mPw
        printMembers()
    elif selectNum == 2:
        mId = input('input ID: ')
        mPw = input('input PW: ')

        if mId in members and members[mId] == mPw:
            print('login success!!')
            fileName = 'myDiary_' + mId + '.txt'
            data = input('오늘 하루 인상 깊은 일을 기록하세요.')
            diary.writeDiary(uri, fileName, data)

        else:
            print('login fail!!')
            printMembers()
    elif selectNum == 3:
        mId = input('input ID: ')
        mPw = input('input PW: ')

        if mId in members and members[mId] == mPw:
            print('login success!!')
            fileName = 'myDiary_' + mId + '.txt'
            datas = diary.readDiary(uri, fileName)
            for d in datas:
                print(d, end='')

        else:
            print('login fail!!')
            printMembers()
    elif selectNum == 4:
        print('Bye~')
        break
  • 입금하기, 출금하기 (최종잔액만 있는 파일, 기록을 남기는 파일 사용)
import time

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

while True:

    selectNum = int(input('1.입금, \t 2.출금, \t 3.종료 '))

    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/poketMoneyRegister.txt', 'a') as f:
            f.write('--------------------------------------\n')
            f.write(f'{getTime()} \n')
            f.write(f'[입금] {memo} : {str(money)}원 \n')
            f.write(f'[잔액] : {str(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/poketMoneyRegister.txt', 'a') as f:
            f.write('--------------------------------------\n')
            f.write(f'{getTime()} \n')
            f.write(f'[출금] {memo} : {str(money)}원 \n')
            f.write(f'[잔액] : {str(int(m) - money)}원 \n')
        print('출금 완료!!!')
        print(f'기존 잔액: {m}')
        print(f'출금 후 잔액: {int(m) - money}')

    elif selectNum == 3:
        print('Bye')
        break
    else:
        print('다시 입력하세요.')
  • 소수 구해서 텍스트파일에 기록
inputNum = int(input('0보다 큰 정수 입력: '))

prime = []

for number in range(2, inputNum+1):
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False
            break

    if flag:
        prime.append(number)

if len(prime) > 0:
    try:
        with open('C:/pythonTxt/prime.txt', 'a') as f:
            f.write(f'{inputNum}까지의 소수: ')
            f.write(f'{prime}\n')
    except Exception as e:
        print(e)
    else:
        print('prime write complete!!')
ship1 = 3
ship2 = 4
ship3 = 5
maxDay = 0

for i in range(1, (ship1+1)):
    if ship1 % i == 0 and ship2 % i == 0:
        maxDay = i

minDay = (ship1 * ship2) // maxDay

newDay = minDay
for i in range(1, newDay+1):
    if newDay % i == 0 and ship3 % i == 0:
        maxDay = i

minDay = (newDay * ship3) // maxDay     #최소공배수는 최대공약수를 구한 후에야 구할 수 있음 (최소공배수 = 두 수의 곱 // 두 수의 최대공약수)


print(f'minDay: {minDay}')
print(f'maxDay: {maxDay}')

from datetime import datetime
from datetime import timedelta             #시간 계산을 해줌

n = 1
baseTime = datetime(2021, 1, 1, 10, 0, 0)    #년,월,일,시간,분,초 정함

with open('C:/pythonTxt/arrive.txt', 'a') as f:
    f.write(f'2021년 모든 선박 입항일\n')
    f.write(f'{baseTime}\n')

nextTime = baseTime + timedelta(days=minDay)
while True:
    with open('C:/pythonTxt/arrive.txt', 'a') as f:
        f.write(f'{nextTime}\n')

    nextTime += timedelta(days=minDay)
    if nextTime.year > 2021:
        break
  • 중급 들어가고부터 기초수학, 리스트, 딕셔너리 등 갑자기 처음 보는 개념들과 새로 배우는 클래스, 모듈, 상속 등이 생소하고 아직 많이 어렵다. 많은 복습이 필요할 것 같다.

<제로베이스 데이터 취업 스쿨>

0개의 댓글