파이썬의 텍스트 파일 다루는 문법과 관련된 문제 풀이
EX 1. 회원 계정별 텍스트 파일을 생성한 후 회원 본인 파일에 ‘한 줄 일기’를 쓰고 읽는 프로그램을 만들자.
# diary.py
# 일기 기능을 가지고 있는 공동 모듈을 만들자.
# 1. 읽기
# 2. 쓰기
import time
def writeDiary(u,f,d): # 사용자가 입력한 문자열 매개변수 d, 파일 경로(url + file name)를 받고
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 = '/Users/sunju/PycharmProjects/python/text'
# 회원 정보를 출력해주는 함수를 만들자
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: # 회원가입이라면
# 회원 아이디와 비밀번호를 입력받자
id = input('id: ')
pw = input('pw: ')
members[id] = pw
printMembers()
elif selectNum == 2:
id = input('id: ')
pw = input('pw: ')
if id in members and members[id] == pw:
print('Login success!')
fileName = 'myDiary_' + id + '.txt'
content = input('오늘 하루 일어난 일들을 기록해보세요.')
diary.writeDiary(uri,fileName,content)
else:
print('Login fail!')
printMembers()
elif selectNum == 3:
id = input('id: ')
pw = input('pw: ')
if id in members and members[id] == pw:
print('Login success!')
fileName = 'myDiary_' + id + '.txt'
datas = diary.readDiary(uri, fileName)
for d in datas:
print(d, end='')
else:
print('Login fail!')
printMembers()
elif selectNum == 4:
print('Bye~')
break
EX 2. 텍스트 파일에 수입과 지출을 기록하는 가계부를 만들자.
# 잔고와 입금 내역을 관리하는 두가지 텍스트 파일을 만들어줘야 한다.
import time
# 시간을 조정해주는 함수
def getTime():
d = time.localtime()
st = time.strftime('%Y-%m-%d %H:%M:%S')
return st
while True:
selectNum = int(input('1.입금, 2.출금, 3.종료'))
if selectNum == 1: # 입금
money = int(input('입금액 입력: '))
with open('/Users/sunju/PycharmProjects/python/text/bank/money.txt', 'r') as f: # 잔고 먼저 읽기
m = f.read()
with open('/Users/sunju/PycharmProjects/python/text/bank/money.txt', 'w') as f: # 잔고 + 입금 쓰기
m = f.write(str(int(m) + money))
memo = input('입금 내역 입력: ') # 어떻게 수입이 생겼는지에 대한 정보
with open('/Users/sunju/PycharmProjects/python/text/bank/pocketMoneyRegister.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('/Users/sunju/PycharmProjects/python/text/bank/money.txt', 'r') as f: # 잔고 먼저 읽기
m = f.read()
with open('/Users/sunju/PycharmProjects/python/text/bank/money.txt', 'w') as f: # 잔고 - 출금 쓰기
m = f.write(str(int(m) - money))
memo = input('출금 내역 입력: ') # 출금 내역에 대한 정보
with open('/Users/sunju/PycharmProjects/python/text/bank/pocketMoneyRegister.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: # 1,2,3 이외에 다른 것을 입력했을 때
print('잘못 입력했습니다. 1,2,3 에서 선택해주세요')
continue
EX 3. 사용자가 입력한 숫자의 약수를 텍스트 파일에 기록하고, 입력한 숫자까지의 소수를 텍스트 파일에 기록하자.
# 약수
inputNum = int(input('0보다 큰 정수를 입력: '))
divisor = []
for num in range(1,(inputNum + 1)):
if inputNum % num == 0:
divisor.append(num)
if len(divisor) > 0:
try:
with open('/Users/sunju/PycharmProjects/python/text/divisor.txt', 'a') as f:
f.write(f'{inputNum}의 약수: ')
f.write(f'{divisor}\n')
except Exception as e:
print(e)
else:
print('divisor written successfully!')
# 소수
inputNum = int(input('0보다 큰 정수 입력: '))
prime = []
cnt = 0
for num in range(2,(inputNum + 1)): # 1은 소수에 포함될 수 없다.
flag = True
for n in range(2,num):
if num % n == 0: # 소수가 아닐 경우
flag = False
break
if flag:
prime.append(num)
if len(prime) > 0:
try:
with open('/Users/sunju/PycharmProjects/python/text/prime .txt', 'a') as f:
f.write(f'{inputNum}까지의 소수: ')
f.write(f'{prime}\n')
except Exception as e:
print(e)
else:
print('prime written successfully!')
EX 4. 두 개의 수를 입력하면 공약수를 텍스트 파일에 작성하는 프로그램을 만들자.
# 두개의 수를 입력받는다.
n1 = int(input('1보다 큰 정수 입력: '))
n2 = int(input('1보다 큰 정수 입력: '))
# 두 값의 공약수를 계산
result = []
min_num = min(n1,n2)
for i in range(1,(min_num+1)):
if n1 % i == 0 and n2 % i == 0: # 두 값에서 모두 나눠떨어진다고 하면
result.append(i)
if len(result) > 0:
try:
with open('/Users/sunju/PycharmProjects/python/text/ex.txt', 'a') as f:
f.write(f'{n1}과 {n2}의 공약수: {result}\n')
except Exception as e:
print(e)
else:
print('common factor written completed!')
# 최대공약수 구해보기
n1 = int(input('1보다 큰 정수 입력: '))
n2 = int(input('1보다 큰 정수 입력: '))
maxComNum = 0
min_num = min(n1,n2)
for i in range(1,(min_num+1)):
if n1 % i == 0 and n2 % i == 0:
maxComNum = i # 계속 변경되면서 최대공약수를 구할 수 있게 된다.
try:
with open('/Users/sunju/PycharmProjects/python/text/ex1.txt', 'a') as f:
f.write(f'{n1}과 {n2}의 최대공약수: {maxComNum}\n')
except Exception as e:
print(e)
else:
print('common max factor written completed!')
# 3개 값의 최대 공약수 구해보기
EX 5. 섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 때, 모든 배가 입항하는 날짜를 텍스트 파일에 기록해보자.
(첫 입항일은 2021년 1월 1일 오전 10시라고 하자)
→ 최소공배수
를 이용한다.
ship1 = 3
ship2 = 4
ship3 = 5
max_day = 0
# 2개의 값에서 최대 공약수 구하기
for i in range(1, (ship1 + 1)):
if ship1 % i == 0 and ship2 % i == 0:
max_day = i
# 2개의 값에서 최소 공배수 구하기
min_day = (ship1 * ship2) // max_day
new_day = min_day
# 3개의 값에서 최대 공약수 구하기
for i in range(1,(new_day + 1)):
if new_day % i == 0 and ship3 % i == 0:
max_day = i
# 3개의 값에서 최소 공배수 구하기
min_day = (new_day * ship3) // max_day
print(f'세 배의 최대공약수: {max_day}')
print(f'세 배의 최소공배수: {min_day}')
from datetime import datetime, timedelta
n = 1
# 기준일 설정해주기
baseTime = datetime(2021,1,1,10,0,0)
with open('/Users/sunju/PycharmProjects/python/text/arrive.txt', 'a') as f:
f.write(f'{baseTime}\n')
# 기준일로부터 60일 지난 날짜
while True:
nextTime += timedelta(days=min_day) # 60이라는 값을 날짜 형식으로 더해줄 때, timedelta() 함수를 사용한다.
if nextTime.year > 2021:
break
with open('/Users/sunju/PycharmProjects/python/text/arrive.txt', 'a') as f:
f.write(f'{nextTime}\n')
다음 스터디 노트에서는 기초 수학
에 활용되는 대표적인 수학 개념들과 파이썬으로 구현해보는 연습을 진행하고 정리해보도록 한다.