ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬, class로 sns platform 코드2 input으로 객체 생성
    Python 2024. 7. 6. 00:20

     

    이전 파이썬, class를 사용하여 만들었던 간단한 sns platform 코드에 회원 정보를 인풋으로 입력받아서 가져오는 코드를 추가했다.

     

    class Member, class Post 생성 부분은 거의 동일하다.

    import hashlib
    
    class Member:
        def __init__(self, name, username, password):
            self.name = name
            self.username = username
            self.password = self._hash_password(password) # 좀 더 간결한 코드로 수정했다
    
        def _hash_password(self, password):
            return hashlib.sha256(password.encode('utf-8')).hexdigest()  # 인코딩 값 추가
    
    class Post:
        def __init__(self, title, content, username):
            self.title = title
            self.content = content
            self.username = username

     

    멤버 인스턴스 포스트 인스턴스 모두 사용자가 input한 값으로 생성되는 함수.

    (유효한 값이 아닙니다, 사용가능한 ID입니다(중복 ID  확인), 비밀번호는 6자리 이상 12자리 이하의 문자와 숫자, 특수기호를 포함한 str값이어야 한다 등의 조건은 주지 않았다.)

    # 멤버 인스턴스 input
    def member_from_input():
        name = str(input("Name: ")).strip()
        username = str(input("ID: ")).lower()
        password = str(input("Password: ")).strip()
        return Member(name, username, password)
    
    # 포스트 인스턴스 input
    def post_from_input(username):
        title = str(input("Enter post title: ")).strip()
        content = str(input("Enter post content: ")).strip()
        return Post(title, content, username)

     

     

    멤버 정보(이름, 아이디)를 출력하는 함수

    포스트(타이틀, 내용 등의) 정보를 출력하는 함수 - > 여기서 멤버 한 명 당 자동으로 포스트 3개를 작성하게 하도록 만들었다. 

    members = []
    posts = []
    
    # 멤버 한 명 당 포스트 3개 입력
    def add_members_and_posts(members, posts):
        print("\nPlease enter your information below")
        member = member_from_input()
        members.append(member)
    
        print("\nWrite on your post")
        for _ in range(3):
            post = post_from_input(member.username)
            posts.append(post)

     

    그리고 입력받은 정보를 출력해주는 함수 member_info(), post_info()를 만들었다.

    # 새로운 멤버 정보 출력 함수
    def member_info(members):
        print("\n Mew Member")
        for member in members: #for문을 돌면서 새로 입력된 멤버의 정보를 출력 
            print(f"Name: {member.name}, ID: {member.username}")
    
    # 새로운 멤버의 포스트 정보 툴력 함수
    def post_info(posts):
        print("\n New Memnber's Post")
        for post in posts:
            print(f"Title: {post.title}/ Content: {post.content}/ Author: {post.username}" )

     

     

    키워드로 게시글을 찾는 걸 구현해야 해서,

    입력한 키워드가 포함된 게시글의 타이틀을 리스트업해 출력하는 함수를 만들었는데 , 여기에 추가로 게시글 작성자로  검색해서 해당 게시글의 제목 리스트를 출력해주는 함수도 만들어서 넣었다.

    
    # 특정유저가 작성한 게시글의 제목을 출력하는 함수
    def search_post_by_username(username_to_check):
        titles = [] # 게시글의 제목 리스트를 출력할 것이므로 titles라는 빈 리스트 하나 만들어주고
        for post in posts: # for문을 돌면서
            if username_to_check in post.username : # 검색한 작성자가 게시글 작성자 목록에 있으면
                titles.append(post.title) # 그 게시글의 제목을 아까 만든 titles리스트에 추가
        if titles: # titles리스트에 값이 있으면 (즉, 검색 결과가 있으면)
            print(f"해당 유저가 작성한 게시글 제목 리스트: {titles}") 
        else: # titles리스트에 값이 없으면 (검색 결과가 없으면)
            print("해당 유저가 작성한 게시글이 없습니다.")
    
    
    # 검색어를 포함한 게시글 제목을 출력하는 함수 
    def search_post_by_keyword(keyword_to_check):
        titles = [] 
        for post in posts:
            if keyword_to_check in post.content: 
                titles.append(post.title) 
        if titles: 
            print(f"해당 키워드가 포함된 게시글 제목 리스트: {titles}")
        else: 
            print("해당 키워드로 검색된 게시글이 없습니다.")
    
    
    # 메인 워크플로우
    add_members_and_posts(members, posts)
    member_info(members)
    post_info(posts)
    
    # 게시글 작성자 키워드로 검색
    username_to_check = input("\n게시글 작성자로 게시글 검색: ")
    search_post_by_username(username_to_check)
    
    # 게시글 키워드로 검색
    keyword_to_check = input("\n키워드로 게시글 검색: ")
    search_post_by_keyword(keyword_to_check)

     

    게시글 키워드작성자 키워드input으로 입력받도록 했고, 함수 네임도 조금 더 직관적으로 이해하기 쉽게 바꿔줬다.

     

     

    출력해보면 이렇게 잘 구현된다.

     

Designed by Tistory.