문법에서 프로그램 개발로 그러나 처음 개념과 구조 잡기가 어려웠음.
Top - Down 방식으로
무엇을 출력할지
조건(종결) 그리고 그외는
순차적으로
코드를 입력하고 모르면 찾고,
에러나면 중간에 확인 코드(print "?") 입력하여 해결
그리고 도저히 모르면 ai
-게시글
-CLI : command line Interface (명령어로 컨트롤)
-GUI 없이 개발
3) DBMS (추후 진행)
print("-" 21)
print("== CLI 게시판 실행 ==")
print("-" 21)
num=0
while True: # 참인 동안 아래 실행
print("CLI 명령어를 입력하세요: ")
cmd = input()
if cmd == "exit":
print("== CLI 게시판 종료 ==")
break
elif cmd == "a w" : # article write":
num += 1
title = input("제목 : ")
content = input("내용 : ")
print(f"{num}번 글이 생성되었습니다.")
print("-" * 23)
print("")
<추가 코드 작업 내용>
print("-" 21)
print("== CLI 게시판 실행 ==")
print("-" 21)
num = 0
articles = [] # 작성된 글(딕셔너리)들을 누적해서 담아둘 가방(리스트)입니다.
while True: # 참인 동안 아래 실행 ('exit' 입력 시 종료)
cmd = input("명령어 )")
if cmd == "exit":
print("== CLI 게시판 종료 ==")
break
elif cmd == "a w": # article write: 게시글 작성
num += 1
title = input("제목 : ")
content = input("내용 : ")
article_data = {
"id": num,
"title": title,
"content": content
}
# 코드 실행 시 게시물이 추가 누적
articles.append(article_data)
# 글생성 확인
print(f"{num}번 글이 생성 되었습니다.\n")
elif cmd == "a l": # article list: 전체 목록 보기
print("=" * 40)
print("번호/ 제목 / 내용")
# [설명] 이제 가방(articles) 안에 정상적인 딕셔너리들이 들어있으므로, 아래 코드는 에러 없이 완벽히 작동합니다!
for art in articles[::-1]:
print(f"{art['id']} / {art['title']} / {art['content']}")
print("=" * 40)
elif cmd == "a d": # article detail: 게시글의 상세보기
dread_id = int(input("상세보기 할 글 id 번호를 입력하세요: "))
is_dreaded = False
for art in articles:
# 꺼내온 글상자의 'id' 번호가 사용자가 입력한 dread_id와 일치하는지 검사합니다.
if art["id"] == dread_id:
# print(f"{art['id']} / {art['title']} / {art['content']}")
print (f"게시글 No: {art['id']}")
print (f"제 목 : {art['title']}")
print (f"내 용 : {art['content']}")
# 글생성 확인
print(f"{revise_id}번 글이 성공적으로 수정 되었습니다.\n")
is_dreaded = True # 수정 후 찾았다고 스위치 참으로 변경
break
if is_dreaded == False:
print(f"{dread_id}번 글은 목록에 없습니다.\n")
elif cmd == "d id": # delete article list (선택 삭제)
delete_id = int(input("삭제할 글 id 번호를 입력하세요: "))
# [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
# [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
is_deleted = False
for art in articles:
# 꺼내온 글상자의 'id' 번호가 사용자가 입력한 delete_id와 일치하는지 검사합니다.
if art["id"] == delete_id:
articles.remove(art)
print(f"{delete_id}번 글이 삭제되었습니다.\n")
is_deleted = True # 글을 성공적으로 찾아서 지웠다고 스위치를 켭니다.
break # 원하는 글을 지웠으므로 탐색 루프를 탈출합니다.
# [설명] 가방을 다 뒤졌는데도 스위치가 거짓(False) 상태라면, 정말로 글이 없는 것입니다.
# [용도] 목록에 없는 엉뚱한 번호를 입력했을 때 안내 메시지를 정확한 타이밍에 띄워줍니다.
if is_deleted == False:
print(f"{delete_id}번 글은 목록에 없습니다.\n")
elif cmd == "r a": # revise article list (선택 수정)
revise_id = int(input("수정할 글 id 번호를 입력하세요: "))
# [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
# [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
is_revised = False
for art in articles:
# 꺼내온 글상자의 'id' 번호가 사용자가 입력한 revise_id와 일치하는지 검사합니다.
if art["id"] == revise_id:
title = input("제목 : ")
content = input("내용 : ")
art["title"] = title
art["content"] = content
# 글생성 확인
print(f"{revise_id}번 글이 성공적으로 수정 되었습니다.\n")
is_revised = True # 수정 후 찾았다고 스위치 참으로 변경
break
if is_revised == False:
print(f"{revise_id}번 글은 목록에 없습니다.\n")
else:
print("지원하지 않는 명령어 입니다.\n")
1차 완료 코드
print("-" 21)
print("== CLI 게시판 실행 ==")
print("-" 21)
from datetime import datetime
num = 0
articles = [] # 작성된 글(딕셔너리)들을 누적해서 담아둘 가방(리스트)입니다.
while True: # 참인 동안 아래 실행 ('exit' 입력 시 종료)
cmd = input("명령어 )")
if cmd == "exit":
print("== CLI 게시판 종료 ==")
break
elif cmd == "a w": # article write: 게시글 작성
num += 1
title = input("제목 : ")
content = input("내용 : ")
now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
article_data = {
"id": num,
"title": title,
"content": content,
"date": now_time
}
# 코드 실행 시 게시물이 추가 누적
articles.append(article_data)
# 글생성 확인
print(f"{num}번 글이 생성 되었습니다.\n")
elif cmd == "a l": # article list: 전체 목록 보기
print("=" * 40)
print("번호/ 제목 / 내용")
# [설명] 이제 가방(articles) 안에 정상적인 딕셔너리들이 들어있으므로, 아래 코드는 에러 없이 완벽히 작동합니다!
for art in articles[::-1]:
print(f"{art['id']} / {art['title']} / {art['content']}")
print("=" * 40)
elif cmd == "a v": # article detail view: 게시글의 상세보기
dread_id = int(input("상세보기 할 글 id 번호를 입력하세요: "))
is_dreaded = False
for art in articles:
# 꺼내온 글상자의 'id' 번호가 사용자가 입력한 dread_id와 일치하는지 검사합니다.
if art["id"] == dread_id:
print (f"게시글 No: {art['id']}")
print (f"제 목 : {art['title']}")
print (f"내 용 : {art['content']}")
print (f"작성일시 : {art['date']}")
is_dreaded = True # 해당 글 찾았다고 스위치 참으로 변경
break
if is_dreaded == False:
print(f"{dread_id}번 글은 목록에 없습니다.\n")
elif cmd == "a d": # delete article list (선택 삭제)
delete_id = int(input("삭제할 글 id 번호를 입력하세요: "))
# [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
# [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
is_deleted = False
for art in articles:
# 꺼내온 글상자의 'id' 번호가 사용자가 입력한 delete_id와 일치하는지 검사합니다.
if art["id"] == delete_id:
articles.remove(art)
print(f"{delete_id}번 글이 삭제되었습니다.\n")
is_deleted = True # 글을 성공적으로 찾아서 지웠다고 스위치를 켭니다.
break # 원하는 글을 지웠으므로 탐색 루프를 탈출합니다.
# [설명] 가방을 다 뒤졌는데도 스위치가 거짓(False) 상태라면, 정말로 글이 없는 것입니다.
# [용도] 목록에 없는 엉뚱한 번호를 입력했을 때 안내 메시지를 정확한 타이밍에 띄워줍니다.
if is_deleted == False:
print(f"{delete_id}번 글은 목록에 없습니다.\n")
elif cmd == "a r": # article revise (선택 수정)
revise_id = int(input("수정할 글 id 번호를 입력하세요: "))
# [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
# [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
is_revised = False
for art in articles:
# 꺼내온 글상자의 'id' 번호가 사용자가 입력한 revise_id와 일치하는지 검사합니다.
if art["id"] == revise_id:
title = input("제목 : ")
content = input("내용 : ")
art["title"] = title
art["content"] = content
# 글생성 확인
print(f"{revise_id}번 글이 성공적으로 수정 되었습니다.\n")
is_revised = True # 수정 후 찾았다고 스위치 참으로 변경
break
if is_revised == False:
print(f"{revise_id}번 글은 목록에 없습니다.\n")
else:
print("지원하지 않는 명령어 입니다.\n")