
7. 글을 써 보아요
【파일구조】
c:\workshop\diary.py 1개
1일기장 프로그램
가. 일기장 프로그램
일기장 프로그램은 하루 동안 있었던 일들을 일기장에 쓸 수 있는 프로그램이다. 일기장 프로그램의 구성은 일기를 쓸 수 있는 함수와 수정하는 함수, 그리고 일기를 삭제하는 함수로 이루어져 있다. 따라서 사용자는 원하는 것을 선택하여 일기를 작성할 수 있다. 먼저 하루 일기장 프로그램의 전체적인 코딩을 살펴보고 자세한 설명으로 하루 일기장 프로그램을 알아보도록 하자.

# 일기 작성하는 함수 선언
def add():
day=input("날짜 입력(ex 2018. 1. 1.) : ") # 날짜 입력
weather=input("날씨 입력 : ") # 날씨 입력
day=day+" " # 빈 문자열 추가
weather=weather+"\n" # 한 줄 내림 문자열 추가
text=day+weather # 날씨와 요일을 text 변수에 저장
diary_text=input("일기 쓰기 : ") # 일기장 작성
text=text+diary_text # 모든 글을 저장
return text # text 값 반환
# 일기를 수정하는 함수 선언
def modify(text): # 일기장 수정 함수
print("저장된 일기") # 출력
print(text) # text 값 출력
print("일기를 다시 입력하세요 \n") # 출력
modify_diary=add() # add()함수 호출
return modify_diary # modify_diary 값 반환
# 일기 삭제하는 함수 선언
def delete(text):
print("작성된 일기") # 작성된 일기 출력
print(text) # text 값 출력
print("")
# 1번과 2번 선택에 관한 내용 출력
print("작성된 일기를 삭제 하려면 1번, 다시 돌아가려면 2번을 선택하시오.:")
# 삭제를 할 경우 1번, 다시 돌아가기 위해서는 2번을 입력 받음
select=int(input(""))
if(select==1): # 선택이 1일 경우 빈 문자를 저장한 후 리턴
text=""
return text
else: # 2일 경우 다시 원 상태로 리턴
return text
# 일기장 프로그램의 실행
diary="" # 일기를 저장할 수 있는 변수
while True: # 반복문을 이용하여 일기를 입력, 수정, 삭제, 출력할 수 있음
print("일기장 프로그램") # 출력
print("(일기장 프로그램 주의 사항: 입력 시 숫자 이외의 문자를 입력할 경우 오류가 발생하며, 5 이상의 숫자를 입력할 경우 종료)") # 출력
print("1. 일기장 입력 2. 일기장 수정 3. 일기 삭제 4. 일기 출력 5. 종료") # 출력
select=int(input()) # 일기장 프로그램 선택
if(select==1): # 값이 1인 경우
diary=add() # 일기 작성
elif(select==2): # 값이 2인 경우
diary=modify(diary) # 일기 수정
elif(select==3): # 값이 3인 경우
diary=delete(diary) # 일기 삭제
elif(select==4): # 값이 4인 경우
print(diary) #일기 출력
else:
break
나. 일기장 프로그램 코딩 해설
1) 일기 작성하는 함수 선언
하루 일기장 프로그램의 전체적인 프로그램 코딩을 끝마쳤다면, 가장 먼저 일기장을 작성하는 함수부터 알아보도록 하자.
# 일기 작성하는 함수
def add():
day=input("날짜 입력(ex 2018. 1. 1.) : ") # 날짜 입력
weather=input("날씨 입력 : ") # 날씨 입력
day=day+" " # 빈 문자열 추가
weather=weather+"\n" # 한 줄 내림 문자열 추가
text=day+weather # 날씨와 요일을 text 변수에 저장
diary_text=input("일기 쓰기 : ") # 일기장 작성
text=text+diary_text # 모든 글을 저장
return text # text 값 반환
일기장을 작성하는 함수의 이름 add()이다. add() 함수가 선택돼, 호출되면, 일기를 쓸 수 있게 된다. 일기를 쓰기 위해서는 처음 부분에 일기를 쓴 날짜와 날씨를 입력받게 되는데, day의 변수에 날짜를 입력받고, weather의 변수에는 날씨를 문자열로 입력받아 저장하게 된다. 그리고 값을 입력받아 저장을 하기 위해서 input() 함수가 사용됐다. 날짜와 날씨의 변수에 값을 입력받아 저장을 받고 난 후에는 day 변수에는 “ ” 빈칸 하나를 추가적으로 합하여 다시 day 변수에 문자열이 추가되어 입력하게 되며, weather 변수에는 “\n”의 문자가 합하여 저장되게 되는데 “\n”의 값은 줄 바꿈이다.
day 변수와 weather의 변수가 값을 저장 받고 난 후에는 “text=day+weather” 프로그램 코딩이 이어지는데, 이것은 text의 변수에 day 변수의 문자열과 weather 변수의 문자열을 합하여 text 변수에 차례로 입력되어 저장하겠다는 프로그램 코딩이다.
요일과 날씨의 입력이 끝났다면, 일기를 작성해야 한다. 일기를 작성하기 위해서는 “diary_text=input("일기 쓰기 :")”의 프로그램 코딩으로 가능하게 되는데, 이것은 diary_text의 변수에 일기를 입력받아 문자열로 일기를 저장하게 된다.
일기의 작성까지 끝났다면, 요일과 날씨 그리고 일기의 내용을 저장하게 되는데, 일기의 내용까지 모든 것을 합하여 저장한다는 프로그램 코딩은 “text=text+diary_text” 과 같다. 이것은 text의 변수에 요일과 날씨가 합해진 문자열에 작성된 일기까지의 문자열을 합하여 저장하라는 코딩이다. 그리고 이 함수는 최종적으로 text 변수의 모든 값을 반환(return) 하며 끝나게 된다.
2) 일기 수정하는 함수 선언
일기장을 작성하는 함수 다음으로는 일기장 수정에 관한 함수이다. 사용자가 만약 일기의 수정을 원한다면 아래의 함수를 호출하게 되는데, 아래의 프로그램 코딩을 살펴보며, 일기장을 수정하는 함수를 알아보도록 하자.
# 일기를 수정하는 함수 선언
def modify(text): # 일기장 수정 함수
print("저장된 일기") # 출력
print(text) # text 값 출력
print("일기를 다시 입력하세요 \n") # 출력
modify_diary=add() # add()함수 호출
return modify_diary # modify_diary 값 반환
일기장을 수정하는 함수의 이름은 modify()이다. 이 함수가 호출이 되면 일기를 재 작성하게 되는데, 이 함수에 받은 인자는 저장되어 있던 일기의 문자열 값이다. 그리고 그다음에는 print()를 통해 저장되었던 일기의 내용을 먼저 출력하여 보여주게 된다. 일기장의 내용이 출력되고 난 후에는 다시 입력할 수 있도록 print() 함수를 통해 “일기를 다시 입력하세요”라는 메시지를 보내준다.
일기장의 모든 내용을 다시 수정할 준비가 모두 끝났다면, modify() 함수에서는 add() 함수를 다시 호출하게 되는데, modify() 함수에서 중요하게 생각해야 할 점은 함수에서 정의된 다른 함수를 호출하여 사용할 수 있다는 것이다. 따라서 add() 함수가 정의가 되어 있다면, modify() 함수에서는 add() 함수를 호출하여 사용할 수 있다는 것이다. 그리고 modify()함수에서 add() 함수를 다시 호출하였기 때문에 add() 함수의 프로그램 코딩이 실행되게 된다. “modify_diary=add()”의 프로그램 코딩을 살펴보면, modify_diary 변수에는 add() 함수를 호출하고 add() 함수가 호출되어진 후 반환하는 값을 modify_diary 변수에 저장하도록 되어 있다. 따라서 modify_diary 변수에는 수정된 일기장의 텍스트가 저장되게 된다. 그리고 마지막으로 modify() 함수는 modify_diary 변수의 값을 반환하며 끝나게 된다.
3) 일기 삭제하는 함수 선언
일기장을 작성하는 함수 다음으로는 일기장 수정에 관한 함수이다. 사용자가 만약 일기의 수정을 원한다면 아래의 함수를 호출하게 되는데, 아래의 프로그램 코딩을 살펴보며, 일기장을 수정하는 함수를 알아보도록 하자.
# 일기 삭제하는 함수 선언
def delete(text):
print("작성된 일기") # 작성된 일기 출력
print(text) # text 값 출력
print("")
# 1번과 2번 선택에 관한 내용 출력
print("작성된 일기를 삭제 하려면 1번, 다시 돌아가려면 2번을 선택하시오.:")
# 삭제를 할 경우 1번, 다시 돌아가기 위해서는 2번을 입력 받음
select=int(input(""))
if(select==1): # 선택이 1일 경우 빈 문자를 저장한 후 리턴
text=""
return text
else: # 2일 경우 다시 원 상태로 리턴
return text
일기장을 삭제하는 함수가 호출이 되면, 함수의 인자의 값으로 저장되어 있던 일기의 문자열 값을 받아서 사용할 수 있도록 한다. 그다음으로는 print() 함수로 작성된 일기가 출력되게 된다. 출력이 끝나고 나면, 1번 2번을 선택할 수 있도록 하는데, 1번을 선택하면 삭제되고 2번을 선택하면 다시 돌아가도록 하였다. 따라서 1과 2를 선택받을 수 있도록 “select=input("")” 프로그램을 코딩하였다. select의 변수에 1 또는 2가 저장되었다면, 다음으로 조건문을 실행하게 된다.
조건문은 if와 else가 사용되었는데 “if(select==1)”에서 select가 1일 경우에는 text 변수에 비어있는 문자열을 입력한 후, text 변숫값을 반환하고 함수를 끝내게 된다. 그리고 만약 select가 1이 아닌 경우에는 “else:”가 실행되어 text 변수에 가지고 있었던 값을 그대로 반환하며 함수가 끝나게 된다.
4) 일기장 프로그램의 실행
지금까지 하루 일기장 프로그램에 구현된 함수들을 모두 살펴보았다. 지금부터는 프로그램을 실행시켜주는 프로그램 코딩 부분을 알아보며, 함수가 어떻게 호출이 되는지 살펴보도록 하자.
# 일기장 프로그램
diary="" # 일기를 저장할 수 있는 변수
while True: # 반복문을 이용하여 일기를 입력, 수정, 삭제, 출력할 수 있음
print("일기장 프로그램") # 출력
print("(일기장 프로그램 주의 사항: 입력 시 숫자 이외의 문자를 입력할 경우 오류가 발생하며, 5 이상의 숫자를 입력할 경우 종료)") # 출력
print("1. 일기장 입력 2. 일기장 수정 3. 일기 삭제 4. 일기 출력 5. 종료") # 출력
select=int(input()) # 일기장 프로그램 선택
if(select==1): # 값이 1인 경우
diary=add() # 일기 작성
elif(select==2): # 값이 2인 경우
diary=modify(diary) # 일기 수정
elif(select==3): # 값이 3인 경우
diary=delete(diary) # 일기 삭제
elif(select==4): # 값이 4인 경우
print(diary) #일기 출력
else:
break
실제적인 실행 부분에서는 가장 먼저 일기를 저장할 수 있는 변수가 나오는데, diary 변수에 비어있는 문자열을 저장하게 된다. 그다음에는 while이라는 반복문을 통해서 일기장 프로그램을 종료가 될 때까지 반복적으로 실행하게 된다. while True은 while의 값을 참으로 설정하여 break가 나올 때까지 반복적으로 while 반복문 안에 있는 프로그램 코딩을 반복적으로 실행하게 된다. while 반복문 안에는 조건문인 if 문이 들어가 있다.
반복문 안에 조건문을 넣는 이유는 반복적으로 이루어져 하는 프로그램 안에는 선택적으로 조건에 맞을 때만 조건문 안에 있는 내용을 실행하도록 프로그램 코딩을 한 것이다.
조건문의 내용을 알아본다면, 첫 번째로 select 변수에 1에서 5까지의 수를 입력받을 수 있도록 하는데, 선택된 수에 따라 “1. 일기장 입력, 2. 일기장 수정 3. 일기 삭제 4. 일기 출력 5. 종료”의 내용으로 프로그램이 실행될 수 있도록 한다.
따라서 select 변수에 입력된 값이 1이라면 “if(select==1):”에서 if를 만족하기 때문에 add()라는 앞에서의 함수가 호출이 되며, 일기가 쓰이게 된다. 일기가 쓰이고 난 후 값이 반환되었다면, 반환된 값은 처음에 비어있는 문자열로 선언되었던 diary 변수에 값을 저장하게 되고, 다시 반복문을 통해 select 변수에 값을 받을 수 있도록 한다. select의 값이 2인 경우에는 조건문에서 elif(select==2): 부분이 실행되며, modify(diary) 함수가 호출하게 되며 diary 변수에 저장된 값을 인자 값으로 넘겨주게 된다. modify 함수가 끝나게 되면, 수정된 일기의 내용이 다시 diary 변수에 문자열 값을 저장하게 된다.
그리고 select 변수의 값이 3일 경우에는 “delete(diary):” 함수가 실행되며, modify 함수와 같이 인자 값으로 diary 변수의 값을 인자로 넘겨주게 된다. delete() 함수는 앞에서 언급한 것처럼 비어있는 문자열을 반환하거나 취소를 원할 경우에는 가지고 있었던 문자열 그대로를 다시 반환하여 diary 변수에 저장하게 된다.
마지막으로 일기를 출력하는 것과 프로그램을 종료하는 방법이 남았는데, select의 값이 4일 경우에는 diary 변수에 저장된 문자열의 값을 print(diary)을 통해서 모두 출력하게 된다. 그리고 select의 값이 5일 경우에는 else가 실행되어 break를 통해 반복문에서 빠져나오면서 일기장 프로그램은 종료하게 된다.