[Python] 중급 문제 풀이 - 텍스트 파일

박미영·2023년 3월 14일
0

📌텍스트 파일 연습 문제


📍문제 1

회원 계정별 텍스트 파일을 생성한 후 회원 본인 파일에 ‘한 줄 일기’를 쓰고 읽는 프로그램을 만들어보자.

  • diary.py
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
  • ex.py
import diary

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

def printMambers():
    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
        printMambers()

    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!')

    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!')

    elif selectNum == 4:
        print('Bye~')
        break
  • 출력결과

    • 회원 가입

    • 한 줄 일기 작성


    • 일기 보기, 로그인 실패



📍문제 2 - 가계부

텍스트 파일에 수입과 지출을 기록하는 가계부를 만들어보자.

import time

def getTime():
    st = time.strftime('%Y-%m-%d %I:%M:%S %p')  # 시간 형태 지정
    return st

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

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

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

        memo = input('입금 내역 입력: ')
        with open('C:/pythonEx/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:/pythonEx/pythonTxt/bank/money.txt', 'r') as f:
            m = f.read()

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

        memo = input('출금 내역 입력: ')
        with open('C:/pythonEx/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('다시 입력하세요!!')

⚠️read 모드는 파일이 없을 때 읽으려고 하면 에러가 발생한다.

  • 출력결과

  • poketMoneyRegister.txt



📍문제 3 - 약수, 소수

사용자가 입력한 숫자의 약수 또는 소스를 텍스트 파일에 기록해 보자.


  • 약수
# 약수
inputNumber = int(input('0보다 큰 정수 입력: '))

divisor = []
for number in range(1, (inputNumber + 1)):
    if inputNumber % number == 0:
        divisor.append(number)

if len(divisor) > 0:
    try:
        with open('C:/pythonEx/pythonTxt/divisor.txt', 'a') as f:
            f.write(f'{inputNumber}의 약수: ')
            f.write(f'{divisor}\n')
    except Exception as e:
        print(e)
    else:
        print('divisor write complete')
  • divisor.txt

  • 소수
# 소수
inputNumber = int(input('0보다 큰 정수 입력: '))
prime = []
for number in range(2, (inputNumber + 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:/pythonEx/pythonTxt/prime.txt', 'a') as f:
            f.write(f'{inputNumber}까지의 소수: ')
            f.write(f'{prime}\n')
    except Exception as e:
        print(e)
    else:
        print('prime write complete')
  • prime.txt



📍문제 4 - 공약수, 최대공약수

두 개의 수를 입력하면 공약수, 최대공약수를 텍스트 파일에 작성해보자.


  • 공약수
# 두 개의 수 공약수

num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))

common = []

for i in range(1, (num1+1)):
    if num1 % i == 0 and num2 % i == 0:
        common.append(i)

if len(common) > 0:
    try:
        with open('C:/pythonEx/pythonTxt/common.txt', 'a') as f:
            f.write(f'{num1}과 {num2}의 공약수: ')
            f.write(f'{common}\n')
    except Exception as e:
        print(e)
    else:
        print('common factor write complete')
  • common.txt

  • 최대공약수
# 두개의 수 최대공약수

num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))

maxComNum = 0

for i in range(1, (num1+1)):
    if num1 % i == 0 and num2 % i == 0:
        maxComNum = i

try:
    with open('C:/pythonEx/pythonTxt/maxComNum.txt', 'a') as f:
        f.write(f'{num1}과 {num2}의 최대공약수: {maxComNum}\n')
except Exception as e:
    print(e)
else:
    print('max common factor write complete')
  • maxComNum.txt



📍문제 5 - 입항일 기록

섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 때, 모든 배가 입항하는 날짜를 텍스트 파일에 기록해보자.
(첫 입항일은 2021년 1월 1일 오전 10시로 한다.)


ship1, ship2, ship3, maxDay = 3, 4, 5, 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, timedelta

n = 1
baseTime = datetime(2021, 1, 1, 10, 0, 0)

with open('C:/pythonEx/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:/pythonEx/pythonTxt/arrive.txt', 'a') as f:
        f.write(f'{nextTime}\n')

        nextTime += timedelta(days=minDay)
        if nextTime.year > 2021:
            break
  • arrive.txt




"이 글은 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글