- 회원 계정별 텍스트 파일을 생성한 후 회원 본인 파일에
'한 줄 일기'를 쓰고 읽는 프로그램을 만들어보자.
[모듈파일]
import time
def writeDaiary(u, f , d): # 다이어리 쓰기 기능 u:경로, d:내용
lt = time.localtime() # 다이어리가 언제 쓰였는지
timeStr = time.strftime('%Y-%m-%d %I:%M:%S %p', lt) # 시간의 출력 형식 설정
filePath = u + f
with open(filePath, 'a') as f: # with ~ as
f.write(f'[{timeStr}] {d}\n')
def readDiary(u, f): # 다이어리 읽기 기능
filePath = u + f
datas = []
with open(filePath, 'r') as f: # with ~ as
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 # mId가 키값 mPw가 벨류값
printMembers()
elif selectNum == 2:
mId = input('imput ID : ')
mPw = input('input PW : ')
if mId in members and members[mId] == mPw:
print('login success!!')
fileName = 'myDiary_' + mId + '.txt'
data = input('오늘 하루 인상 깊은 일을 기록하세요. ')
diary.writeDaiary(uri, fileName, data)
else:
print('login fail!!')
printMembers()
elif selectNum == 3:
mId = input('imput 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('종료 합니다.')
break
- 텍스트 파일에 수입과 지출을 기록하는 가계부를 만들어보자.
잔고만 기록하는 파일, money.txt
입출금 기록하는 파일 두가지가 필요!
import time
def getTime(): # 현재 시간을 가지고 오는 함수
time.localtime()
st = time.strftime('%Y-%m-%d %H:%M:%S')
return st
while True:
selectNumber = int(input('1.입금, \t 2.출금, \t 3.종료 '))
if selectNumber == 1:
money = int(input('입금액 입력 : '))
with open('C:/pythonTxt/bank/money.txt', 'r') as f: # 잔금만 있는 money.txt 읽기
m = f.read()
with open('C:/pythonTxt/bank/money.txt', 'w') as f: # 금액을 갱신해야함으로 'w' 모드
f.write(str(int(m) + money)) # 계산된 값을 읽기위해 str로 스트링 해준다
memo = input('입금 내역 입력 : ')
with open('C:/pythonTxt/bank/poketMoneyRegister.txt', 'a') as f: # 입금 내역을 기록하는 파일 'a' 모드를 사용한다 ! 그 이유 잘 기억하기
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 selectNumber == 2:
money = int(input('출금액 입력 : '))
with open('C:/pythonTxt/bank/money.txt', 'r') as f: # 잔금만 있는 money.txt 읽기
m = f.read()
with open('C:/pythonTxt/bank/money.txt', 'w') as f: # 금액을 갱신해야함으로 'w' 모드
f.write(str(int(m) - money)) # 계산된 값을 읽기위해 str로 스트링 해준다
memo = input('출금 내역 입력 : ')
with open('C:/pythonTxt/bank/poketMoneyRegister.txt', 'a') as f: # 출금 내역을 기록하는 파일 'a' 모드를 사용한다 ! 그 이유 잘 기억하기
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 selectNumber == 3:
print('종료 합니다.')
break
else:
print('다시 입력하세요!!')
- 사용자가 입력한 숫자의 약수를 텍스트 파일에 기록해 보자.
# 약수
inputNumber = int(input('0보다 큰 정수 입력: ' ))
divisor = []
for number in range(1, (inputNumber + 1)):
if inputNumber % number == 0: # 약수
divisor.append(number)
if len(divisor) > 0: # 0보다 크면 약수가 존재 하는 것
try: # 예외처리
with open('C:/pythonTxt/divisor.txt', 'a') as f: # 덮어씌우는 'a'
f.write(f'{inputNumber}의 약수: ') # 사용자가 입력한 숫자의 약수
f.write(f'{divisor}\n')
except Exception as e:
print(e)
else:
print('divisor write complete!!')
# 소수
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: # 0보다 크면 소수가 존재 하는 것
try: # 예외처리
with open('C:/pythonTxt/prime.txt', 'a') as f: # 덮어씌우는 'a'
f.write(f'{inputNumber}까지의 소수: ') # 사용자가 입력한 숫자의 약수
f.write(f'{prime}\n')
f.write(f'{len(prime)}개') # 개수 출력
except Exception as e:
print(e)
else:
print('prime write complete!!')
- 두 개의 수를 입력하면 공약수를 텍스트 파일에 작성해보자.
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: # 0보다 크면 공약수가 하나라도 있다는 것
try:
with open('C:/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!!')
# 수 두개의 최대공약수
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:/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!!')
3개를 입력받는 것도 해볼 것!
- 섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 떄,
모든 배가 입항하는 날짜를 텍스트 파일에 기록해보자.
(첫 입항일은 2021년 1월 1일 오전 10시로 한다.)
과일 선박 : 3일주기
생선 선박 : 4일주기
야채 선박 : 5일주기
# 최소공배수, 최대공약수 구해서 해결
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 # 1,2번 선박의 최대공약수가 구해진다
mindDay = (ship1 * ship2) // maxDay # 1,2번 선박의 최소공배수
newDay = mindDay
for i in range(1, (newDay + 1)):
if newDay % i == 0 and ship3 % i == 0:
maxDay = i # 3번 선박까지 포함한 최대공약수
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) # 기준일 2021년 1월 1일 10시 0분 0초 설정
with open('C:/pythonTxt/arrive.txt', 'a') as f:
f.write(f'2021년 모든 선박 입항일{baseTime}\n')
f.write(f'{baseTime}\n')
nextTime = baseTime + timedelta(days = minDay) # 1월1일에서 최소공배수 60일이 지난 날짜 구하는 변수, timedelta()가 알아서 계산해준다
while True:
with open('C:/pythonTxt/arrive.txt', 'a') as f:
f.write(f'{nextTime}\n')
nextTime = nextTime + timedelta(days = minDay)
if nextTime.year > 2021:
break # 2021년이 지나면 멈춘다
이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.