Search

연습 문제 풀이

ex ) 회원 계정별 텍스트 파일을 생성한 후 회원 본인 파일에 ‘한 줄 일기’를 쓰고 읽는 프로그램을 만들자.
# 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
Python
복사
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
Python
복사
ex ) 텍스트 파일에 수입과 지출을 기록하는 가계부를 만들자.
# 잔고와 입금 내역을 관리하는 두가지 텍스트 파일을 만들어줘야 한다. 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
Python
복사
ex) 사용자가 입력한 숫자의 약수를 텍스트 파일에 기록하자.
ex) 사용자가 입력한 숫자까지의 소수를 텍스트 파일에 기록하자.
# 약수 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!')
Python
복사
ex) 두 개의 수를 입력하면 공약수를 텍스트 파일에 작성하는 프로그램을 만들자.
# 두개의 수를 입력받는다. 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!')
Python
복사
# 최대공약수 구해보기 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!')
Python
복사
# 3개 값의 최대 공약수 구해보기
Python
복사
ex) 섬마을에 과일, 생선, 야채를 판매하는 배가 다음 주기로 입항한다고 할 때, 모든 배가 입항하는 날짜를 텍스트 파일에 기록해보자.
(첫 입항일은 2021년 1월 1일 오전 10시라고 하자)
과일 선박 : 3일 주기 / 생선 선박: 4일 주기 / 야채 선박 : 5일 주기
최소공배수를 이용한다.
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')
Python
복사