▶ 내용
- Member 클래스와 Post 클래스 정의
- Member 클래스의 속성 : 이름(name), 아이디(username), 비밀번호(password)
- Member 클래스의 메소드 : 회원 정보를 print 해주는 display(회원이름과 아이디만 보여주고 비밀번호는 보여주면 안됨)
- Post 클래스의 속성 : 제목(title), 내용(content), 작성자(author : 회원의 username 이 저장되어야 함)
- 회원 인스턴스를 세개 이상 만들고 members 라는 빈 리스트에 append를 써서 저장, members 리스트를 돌면서 회원들의 이름을 모두 프린트
- 각각의 회원이 게시글을 세개 이상 작성하고, 게시글은 posts 빈 리스트에 append를 써서 저장
- for문을 돌면서 특정 유저가 작성한 게시글의 제목을 모두 프린트, 특정 단어가 content 에 포함된 게시글의 제목을 모두 프린트
▶ 추가 도전 과제
- input을 이용하여 Member 인스턴스 만드는 것을 사용자가 터미널에서 할 수 있게 하기
- posts 도 터미널에서 생성할 수 있게 하기
- hashlib 라이브러리를 써서 회원 비밀번호를 해시화하여 저장하기
▶ 코드
import hashlib # 비밀번호 해시화를 위한 hashlib 모듈 import
class Member: # Member 클래스 만들기
def __init__(self, name, username, password): # 초기화 함수
self.name = name # 이름 초기화
self.username = username # 아이디 초기화
self.password = hashlib.sha256(password.encode()).hexdigest() # 비밀번호 해시화해서 저장
def display(self): # display 메서드 선언
print(f"Name : {self.name}, ID : {self.username}") # 이름, ID 출력(비밀번호는 출력 안함)
class Post: # Post 클래스 만들기
def __init__(self, title, content, author): # 초기화 함수
self.title = title # 제목 초기화
self.content = content # 내용 초기화
self.author = author # 작성자 초기화
클래스 Member, Post 만들기
members = [] # 변수선언, members 초기값 = 빈리스트
posts = [] # 변수선언, posts 초기값 = 빈리스트
# member 인스턴스 생성해서 members 리스트에 추가
members.append(Member("Spino", "cuty", "password1"))
members.append(Member("Tyranno", "king", "password2"))
members.append(Member("Stego", "babo", "password3"))
# post 인스턴스 생성해서 posts 리스트에 추가
posts.append(Post("배고파", "저녁뭐먹지", "cuty"))
posts.append(Post("연어", "연어먹고싶어", "cuty"))
posts.append(Post("왕", "내가왕이다", "king"))
posts.append(Post("심심해", "심심하다", "babo"))
posts.append(Post("뭐하지", "심심하네", "babo"))
각 클래스의 예시 인스턴스들을 만들고 members, posts 리스트에 추가하기
def create_member(): # 회원 생성 함수 선언
name = input("이름을 입력해주세요 : ") # 이름 입력받기
username = input("ID를 입력해주세요 : ") # ID 입력받기
password = input("비밀번호를 입력해주세요 : ") # 비밀번호 입력받기
new_member = Member(name, username, password) # 새로운회원 인스턴스 생성하고
members.append(new_member) # members 리스트에 추가하기
print(f'<{username}>님 회원가입을 환영합니다!!') # 환영 메시지 출력
print("\n<<< 회원 등록하기 >>>") # 회원등록하기
create_member() # 회원 생성 함수 호출
새로운 회원 등록하기 함수
실행결과
def create_post(): # 게시글 생성 함수 선언
author = input("ID를 입력해주세요 : ") # ID 입력받기
title = input("제목을 입력해주세요 : ") # 제목 입력받기
content = input("내용을 입력해주세요 : ") # 내용 입력받기
new_post = Post(title, content, author) # 새로운게시물 인스턴스 생성하고
posts.append(new_post) # posts 리스트에 추가하기
print(f'<{author}>님의 게시글이 등록되었습니다!!') # 등록 메시지 출력
print("\n<<< 게시글 등록하기 >>>") # 게시글등록하기
create_post() # 게시글 생성 함수 호출
이번에는 새로운 게시물 등록하기 함수
실행결과
while True: # 무한루프 반복
another_member = input("\n새로운 회원 추가하실래요? (y/n): ").lower()
# 회원 추가 여부 입력받기, 소문자로 변환해서 another_member에 저장
if another_member == 'n': # n 라고 입력한 경우
break # 무한루프 탈출하기
elif another_member =='y': # y 라고 입력한 경우
print("\n<<< 새로운 회원 등록하기 >>>") # 새로운 회원 등록
create_member() # 회원 생성 함수 호출
else: # n,y 말고 다른거 입력했을 경우
print("잘못된 입력값입니다. 다시 입력해주세요. (y/n)") # 유효한 입력 유도하기
새로운 회원을 추가할건지 물어보기
(이거 만든이유는 데이터 많이 쌓고싶은데 회원생성과 게시글 생성이 각각 1회씩 하고 끝나버리게 돼서, 추가 생성을 원한다면 선택할 수 있게 만들었음. 회원생성만 만들었는데 게시글도 동일하게 만들 수 있다.)
y, n 입력했을 때 실행결과
print("\n<<< 등록된 회원들 모두 보여주기 >>>") # 모든 회원 출력
for member in members: # members 리스트를 돌면서
member.display() # 하나씩 display 함수 호출
등록된 회원들 다 보여주기. 위의 회원추가에서 n 을 입력하면 바로 이어서 출력된다.
원래 있던 회원들 + 방금 내가 추가한 회원들까지 모두 출력됨.
while True: # 무한루프 반복
author_searching = input("\n작성자로 검색하시겠습니까? (y/n) : ")
# 작성자로 검색할건지 여부 입력받기
if author_searching.lower() == 'y' : # y 입력한 경우
author_search = input("검색할 작성자의 ID : ") # ID 입력받기
print(f"<{author_search}>님이 작성한 게시글은 다음과 같습니다 : ") # 문구출력
count_author = 0 # count_author 변수 선언, 초기값 = 0
for post in posts: # posts 리스트 돌면서
if post.author == author_search: # 작성자가 입력 ID랑 같을 경우
print(f"{post.title}") # 해당 게시물 제목 출력
count_author += 1 # count_author 변수에 1 더해줌
if count_author == 0: # 리스트 다 돌아도 if를 만족 못하면 count값은 그대로 0
print("해당 작성자의 게시물이 없습니다.") # 해당 작성자가 없다는 뜻
elif author_searching.lower() == 'n' : # n 입력받았을 경우
print("\n----------게시글 검색 종료----------") # 검색 종료 출력
break # 무한루프 빠져나오기
else: # n, y 말고 다른거 입력한 경우
print("y(yes) 또는 n(no) 을 입력해주세요.") # 유효한 입력 유도하기
작성자 ID 를 입력하면 해당 게시글 제목을 출력해준다.
그리고 무한루프로 더는 검색하고 싶지 않을때까지 물어봐준다.
cuty 작성자가 작성한 게시글 제목이 모두 출력된다.
원래 등록되어 있던 <배고파>, <연어> + 방금 추가로 등록한 <초밥>
while True: # 무한루프 반복
keyword_searching = input("\n키워드로 검색하시겠습니까? (y/n) : ")
# 해당 키워드로 검색 여부 입력받기
if keyword_searching.lower() == 'y' : # y 입력했을 경우
keyword_search = input("내용 키워드를 입력해주세요 : ") # 검색할 키워드 입력받기
print(f"<{keyword_search}>가 내용에 포함된 게시글은 다음과 같습니다 : ") # 문구출력
count_keyword = 0 # count_keyword 변수 선언, 초기값 = 0
for post in posts: # posts 리스트 돌면서
if keyword_search in post.content: # 키워드가 게시물 내용에 있을 경우
count_keyword += 1 # count_keyword 변수에 1 더해줌
print(f"{post.title}") # 해당 게시물 제목 출력
if count_keyword == 0: # 리스트 다 돌아도 if를 만족 못하면 count값은 그대로 0
print("키워드에 해당하는 검색결과가 없습니다.") # 해당 키워드가 없다는 뜻
elif keyword_searching.lower() == 'n' : # n을 입력한 경우
print("\n----------게시글 검색 종료----------") # 종료문구
break # 무한루프 탈출
else: # y, n 말고 다른거 입력한 경우
print("y(yes) 또는 n(no) 을 입력해주세요.") # 유효한 입력 유도하기
print("\n검색을 종료합니다.") # 끝!
키워드를 입력하면 해당 내용의 게시글 제목을 출력해준다.
마찬가지로 더는 검색하고 싶지 않을때까지 물어봐준다.
'심심' 이라는 키워드가 포함된 게시글이 모두 출력된다.
총 2개 있고 게시글 제목은 <심심해>, <뭐하지>
y, n 말고 딴거 입력하면 다시 입력하라고 한다.
n 누르면 자동으로 검색 종료 문구 출력되고
끝!