-
ํ๋ก์ ํธ: ๊ฐ๋จํ ์์ ๋ฏธ๋์ด ํ๋ซํผ๋ง๋ค๊ธฐ
- ์ค๋ช : ์ด ํ๋ก์ ํธ๋ ํ์๊ณผ ๊ฒ์๋ฌผ์ ๊ด๋ฆฌํ๋ ๊ฐ๋จํ ์์ค ๋ฏธ๋์ด ํ๋ก๊ทธ๋จ์ ๋ง๋๋๊ฒ ์ ๋๋ค. ํ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ณ , ๊ฒ์๋ฌผ์ ์์ฑํ ์ ์์ผ๋ฉฐ, ํน์ ํ์์ด ์์ฑํ ๊ฒ์๋ฌผ์ด๋ ํน์ ๋จ์ด๊ฐ ํฌํจ๋ ๊ฒ์๋ฌผ์ ๊ฒ์ ํ ์๋ ์์ต๋๋ค. ๋ํ ์ฌ์ฉ์๋ก๋ถํฐ ์๋ก์ด ํ์์ ์ด๋ฆ, ์์ด๋, ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ํ์์ ์์ฑํ๊ณ ๋ฆฌ์คํธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
-
ํ์ ๋ฐ ์ญํ
-
๋์ง์(ํ์ฅ, ๋ฐฑ์๋ ๋ด๋น):
- class Member ๋ฐ ์ธ์คํด์ค ๋ฉ์๋ ์์ฑ
- ํจ์ค์๋ ์ํธํ
-
๊น์ง์(๋ฐฑ์๋ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ, ํผ๋๋ฐฑ ๋ด๋น):
- class Post ์์ฑ
- ๊ณต๋ ์์ ๋ถ๋ถ ์งํ
-
์ด์ธ์ค(ํ๋ก ํธ์๋ ๋ด๋น):
- ๊ฒ์๊ธ ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ
-
์ด์ข ํ(ํ๋ก ํธ์๋ ๋ด๋น):
- ๋ฉค๋ฒ ์ธ์คํดํธ ์์ฑ
- ๊ฒ์๊ธ ์์ฑ
-
๊ณต๋ ์์ (ํ๋ฉด๊ณต์ ): ์ฌ์ฉ์ ์ ๋ ฅ์ ํตํ ํ์ ๋ฐ ๊ฒ์๊ธ ์์ฑ
-
-
์ฌ์ฉ๋ฒ
-
Python ์คํ์ ํ์ ์ด๋ฆ๊ณผ ์์ด๋๊ฐ ์ถ๋ ฅ๋จ.
-
'์ฐพ์ผ์ค ๊ธ์ด์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์'์์ ์์ด๋ ์ ๋ ฅ์ ํด๋น ํ์์ด ์์ฑํ ๊ธ ์ถ๋ ฅ๋จ ๋ง์ฝ ์๋ค๋ฉด ์๋ค๋ ๋งจํธ ์ถ๋ ฅ, ํด๋น ๊ธฐ๋ฅ์ ์ด์ฉํ์ง ์์ผ๋ฉด ์ํฐ๋ฅผ ๋๋ฌ ์คํต
-
'์ฐพ์ผ์ค ๊ฒ์์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์:'์์ ํด๋น ๊ฒ์์ด๊ฐ ๋ค์ด๊ฐ ๊ฒ์๊ธ ๊ฒ์ ๊ฐ๋ฅ, ๊ฒ์์ด์ ๋ด์ฉ์ด ๋ค์ด๊ฐ ๊ฒ์๊ธ์ด ์กด์ฌํ ๊ฒฝ์ฐ ๊ฒ์๊ธ์ ์ ๋ชฉ์ด ์ถ๋ ฅ๋จ
-
์์ฑ ์๋ฃํ๋ฉด ํ์ ๋ฆฌ์คํธ์ ์ถ๊ฐ๋จ
- ์ด๋ฆ์ ์ ๋ ฅํ์ธ์:
- ์์ด๋๋ฅผ ์ ๋ ฅํ์ธ์:
- ํจ์ค์๋๋ฅผ ์ ๋ ฅํ์ธ์:
-
์์ฑ ์๋ฃ์ ๊ฒ์๊ธ ๋ฆฌ์คํธ์ ์ถ๊ฐ๋จ
- ์ ๋ชฉ์ ์ ๋ ฅํ์ธ์:
- ๋ด์ฉ์ ์ ๋ ฅํ์ธ์:
-
์ ๋ ฅํ ํ์๊ณผ ๊ฒ์๊ธ์ด ์ ๋ฑ๋ก๋์๋์ง ํ์ธํ๊ณ ์ถ์ผ๋ฉด '์์ฑ์๋ฅผ ์ ๋ ฅํ์ธ์:'์ ๋ฑ๋กํ ํ์ ์์ด๋๋ฅผ ์ ๋ ฅํ๋ฉด ํ์ธ๊ฐ๋ฅ. ๋ง์ฝ ์๋ ๋งด๋ฒ๊ฑฐ๋ ์์ด๋๊ฐ ๋ค๋ฅด๋ค๋ฉด ์ฌ์ ๋ ฅ ๋ฉํธ ์ถ๋ ฅ๋จ
-
์ถ๊ฐ๋ ํ์ ์ด๋ฆ๊ณผ ์์ด๋๋ฅผ ํฌํจ๋ ๋ชฉ๋ก์ด ์ถ๋ ฅ๋จ
-
-
์ฝ๋ ์ค๋ช
-
๋ฐฑ์๋:
- ๋ฐ์ดํฐ์ ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํฉ๋๋ค.
- Member์ 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()).hexdigest() def display(self): print(f'์ด๋ฆ: {self.name}, ์์ด๋: {self.username}')- ์ฝ๋ ์ค๋ช
(class Member)
- ํ์์ ์ ๋ณด๋ฅผ ๋ด์ ์ค๋ธ์ ํธ ์์ฑ > Member ํด๋์ค์ init, display ์ธ์คํด์ค ๋ฉ์๋ ์์ฑ
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ง๋ค ์ด๊ธฐํํ๊ธฐ ์ํด ์ด๊ธฐํ ๋ฉ์๋ init ์ฌ์ฉ
- init()์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ self๋ฅผ ํตํด ์ดํ์ ๋์ด๋ ๋ฉ์๋์ ์์ฑ์ ์ ๊ทผํ ์ ์๋ค.
- init()์์ self.name = name ์ ์ ์ธํด์ฃผ์ง ์์ผ๋ฉด display()์์ name์ ์ ๊ทผํ ์ ์๋ค.
- ์ธ์คํด์ค ๋ฉ์๋ display()๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด์ค๋ค. ์ด ๋ print(f'string') ํ์์ ์ฌ์ฉํ์ฌ name๊ณผ username์ ์ถ๋ ฅ.
- hashlib ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด ๋งจ ์์ import hashlib ์์ฑ
- hash_password() ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ init์์ ํจ์ค์๋๋ฅผ ํด์ํํจ
- hexdigest() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํ
class Post: def __init__(self, title, content, author): self.title = title self.content = content self.author = author- ์ฝ๋ ์ค๋ช
(class Post)
- Post ํด๋์ค ์์ฑ.
- init()์ Post ๊ฐ์ฒด(์ธ์คํด์ค) ์์ฑ ์ ์ด๊ธฐ์ ๋ฐํ๋๋ ๋ฉ์๋.
- ํด๋์ค ๋ฉ์๋๋ ์ผ๋ฐ ๋ฉ์๋์๋ ๋ฌ๋ฆฌ ๋งค๊ฐ๋ณ์ 0๋ฒ์งธ ์๋ฆฌ์๋ ๊ผญ self๋ฅผ ๋ฃ์ด์ผํจ.
- title, content, author๋ ๋ฐ์์ ๊ฐ์ ธ์จ ๋ณ์์ธ์ง ์ธ์คํด์ค ์์ ์๋ ๋ณ์์ธ์ง ๊ตฌ๋ถ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค ์์์๋ ๋ณ์๋ฅผ ๋ค๋ฃฐ ๋ ๊ผญ self.~~~๋ก ์ปจํธ๋กค ํจ.
-
ํ๋ก ํธ์๋:
- ์ฌ์ฉ์์ ์ํธ์์ฉํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ์ถ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฝ์์์ ์ ๋ ฅ์ ๋ฐ์ ํ์๊ณผ ๊ฒ์๊ธ์ ์์ฑํฉ๋๋ค.
- ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ์ถ๋ ฅํฉ๋๋ค.
members = [] # ๋งด๋ฒ ์ธ์คํด์ค ์์ฑ members.append(Member('KARINA', 'aespa', 'password')) members.append(Member('HANNI', 'NewJeans', 'password')) members.append(Member('REI', 'IVE', 'password')) for member in members: member.display()- ์ฝ๋์ค๋ช
(์ธ์คํด์ค ์์ฑ ๋ฐ ๋ฆฌ์คํธ ๊ด๋ฆฌ)
- 'Member' ์ธ์คํฐ๋ ์์ฑ ๋ฐ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ธฐ
- 'm1', 'm2', 'm3' ์ด๋ฆ์ผ๋ก ์ธ ๊ฐ์ 'Member' ๊ฐ์ฒด๋ฅผ ์์ฑํจ.
- ์ด ๊ฐ์ฒด๋ค์ 'members' ๋ฆฌ์คํธ์ ์ถ๊ฐํจ.
- 'for' ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด 'display()' ๋ฉ์๋๋ฅผ ํธ์ถํจ.
posts = [] # ํฌ์คํฐ ์์ฑ posts.append(Post('supernova', '๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ๋ฅ์ฑ ๋ฌดํ ์์ ๋๋ฅผ ๋ง๋', 'aespa')) posts.append(Post('Armageddon', '์ ๋ชฝ์ ๋ ์ง๊ฒ ๋ฒ์ ธ๊ฐ', 'aespa')) posts.append(Post('Savage', '๋ค ํ๊ฐ๋ค์ด ์ ์ ๋๋ฅผ ๊ตฌ์ถํ ์ด์ ๊ฐ ๋ผ', 'aespa')) posts.append(Post('Super Shy', '๋ ์๋ ๋ง๋ ์ํ๊ณ ๊ทธ๋ฐ๋ฐ ์ ์ด๋ฐ์ง', 'NewJeans')) posts.append(Post('Bubble Gum', '๋ด ํฅ๊ธฐ๊ฐ ๋ ๋จผ์ ์ฐพ์๊ฐ', 'NewJeans')) posts.append(Post('Supernatural', '๋์ ๋ ๋ค์ ํ๋ฒ ๋ง๋๊ฒ', 'NewJeans')) posts.append(Post('Accendio', '์ฃผ๋ฌธ ๊ฑธ์ด ์์ผ๋์ค', 'IVE')) posts.append(Post('I AM', '์ด์ ๋ ๋ ๋ค๋ฅธ ์ง๋ฆฟํ ๋', 'IVE')) posts.append(Post('LOVE DIVE', '์ฐธ์ ์ ์๋ ์ด๋๋ฆผ๊ณผ ํธ๊ธฐ์ฌ', 'IVE'))- ์ฝ๋์ค๋ช
(๊ฒ์๊ธ ์์ฑ ๋ฐ ๋ฆฌ์คํธ ๊ด๋ฆฌ)
- 'Post' ์ธ์คํด์ค ์์ฑ ๋ฐ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ธฐ
- ์ฌ๋ฌ 'Post' ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ 'posts' ๋ฆฌ์คํธ์ ์ถ๊ฐํจ.
- ๊ฐ ๊ฒ์๊ธ ๊ฐ์ฒด๋ฅผ 'posts' ๋ฆฌ์คํธ์ ์ถ๊ฐํจ.
- ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ์ถ๋ ฅํ๊ฑฐ๋, ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํจ.
def search_name(author, posts): titles = [] for post in posts: if post.author == author: titles.append(post.title) if titles: return titles return search_author = input("์ฐพ์ผ์ค ๊ธ์ด์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์: ") search_titles = search_name(search_author, posts) if isinstance(search_titles, list): print(f"{search_author}(์ด)๊ฐ ์์ฑํ ๊ฒ์๊ธ: {','.join(search_titles)}") elif search_author == "": pass else: print(f"{search_author}(์ด)๊ฐ ๋ค์ด๊ฐ ์์ฑ์๊ฐ ์์ต๋๋ค.")- ์ฝ๋์ค๋ช
(ํน์ ํ์์ ๊ฒ์๊ธ ๊ฒ์)
- ๊ธ์ด์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ํด๋น ๊ธ์ด์ด๊ฐ ์์ฑํ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ๋ฐํํ๋ ํจ์ search_name ์์ฑ
- ์ฌ์ฉ์๋ก๋ถํฐ ๊ธ์ด์ด ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์
- ์ ๋ ฅ๋ฐ์ ๊ธ์ด์ด๊ฐ ์์ฑํ ๊ฒ์๊ธ์ด ์์ผ๋ฉด ์ ๋ชฉ์ ์ถ๋ ฅ, ์์ผ๋ฉด ํด๋น ๊ธ์ด์ด๊ฐ ์์ฑํ ๊ฒ์๊ธ์ด ์๋ค๊ณ ์ถ๋ ฅ
- ์ ๋ ฅํ ๋ด์ฉ์ด ์์๋ ์ํฐ ์ ๋ ฅ์ ๋ค์ ๋ด์ฉ์ผ๋ก ๋์ด๊ฐ๋๋ก ์์
def search_include(word, posts): titles = [] for post in posts: if word in post.content: titles.append(post.title) if titles: return titles return search_keyword = input("์ฐพ์ผ์ค ๊ฒ์์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์: ") search_titles = search_include(search_keyword, posts) if isinstance(search_titles, list): print(f"{search_keyword}๊ฐ ๋ค์ด๊ฐ ๊ฒ์๊ธ: {','.join(search_titles)}") else: print(f"{search_keyword}๊ฐ ๋ค์ด๊ฐ ๊ฒ์๊ธ์ด ์์ต๋๋ค.")- ์ฝ๋์ค๋ช
(ํน์ ๋จ์ด๊ฐ ํฌํจ๋ ๊ฒ์๊ธ ๊ฒ์)
- ๊ฒ์์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ํด๋น ๊ฒ์์ด๊ฐ ํฌํจ๋ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ๋ฐํํ๋ ํจ์ search_include ์์ฑ
- ์ฌ์ฉ์๋ก๋ถํฐ ๊ฒ์์ด๋ฅผ ์ ๋ ฅ๋ฐ์
- ์ ๋ ฅ๋ฐ์ ๊ฒ์์ด๊ฐ ํฌํจ๋ ๊ฒ์๊ธ์ด ์์ผ๋ฉด ์ ๋ชฉ์ ์ถ๋ ฅ, ์์ผ๋ฉด ํด๋น ๊ฒ์์ด๊ฐ ํฌํจ๋ ๊ฒ์๊ธ์ด ์๋ค๊ณ ์ถ๋ ฅ
def create_new_user(): while True: new_name = input("์ด๋ฆ์ ์ ๋ ฅํ์ธ์: ") new_username = input("์์ด๋๋ฅผ ์ ๋ ฅํ์ธ์: ") new_password = input("ํจ์ค์๋๋ฅผ ์ ๋ ฅํ์ธ์: ") if new_name == "" or new_username == "" or new_password == "": print("๋น ํธ๋ฆฐ ์ ๋ ฅ๊ฐ์ด ์์ต๋๋ค. ๋ค์ ์ ๋ ฅํด์ฃผ์ธ์!") new_name = "" new_username = "" new_password = "" else: break flag = False # while๋ฌธ ํ์ถ ๋๊ตฌ while True: new_author = input("์์ฑ์๋ฅผ ์ ๋ ฅํ์ธ์: ") for member in members: if new_author == member.username: post10 = Post(new_post, new_content, new_author) posts.append(post10) flag = True break if flag: break print("์ ๋ ฅํ์ ์์ฑ์์ ์์ด๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ค์ ์ ๋ ฅํ์ธ์!") time.sleep(2) for member in members: member.display() print("\n") time.sleep(3) #์๋ก์ด ๊ธ์ด ์ถ๊ฐ๋ ๊ธ ๋ชฉ๋ก print("์์ฑ๋ ๊ธ ๋ชฉ๋ก") time.sleep(2) for post in posts: print(f"์ ๋ชฉ: {post.title}, ์์ฑ์: {post.author}") time.sleep(2)- ์ฝ๋์ค๋ช
- ์๋ก์ด ์ฌ์ฉ์ ๋ง๋๋ ํจ์, ์ด๋ฆ, ๋น๋ฐ๋ฒํธ, ์์ด๋ ๋ชจ๋ ์ ๋ ฅํ์๋๋ง ๋ฑ๋ก, ์๋๊ฒฝ์ฐ ์ ๋ถ ์ ๋ ฅํ๋๋ก ์ ๋ ๋ฌธ๊ตฌ ์ถ๋ ฅ ํ ๋ค์ ์ ๋ ฅ ๋ฐ์
- ์ฌ์ฉ์๋ก๋ถํฐ ์๋ก์ด ๊ฒ์๊ธ์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์ ๋ ฅ๋ฐ์
- ์์ฑ์์ ์์ด๋๋ฅผ ์ ๋ ฅ๋ฐ์ members ๋ฆฌ์คํธ์์ ์ ํจํ ์์ฑ์์ธ์ง ํ์ธ
- ์ ํจํ ์์ฑ์์ผ ๊ฒฝ์ฐ Post ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ posts ๋ฆฌ์คํธ์ ์ถ๊ฐ
- ์ ํจํ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์ ์ ๋ ฅ๋ฐ์
- ๋ชจ๋ ํ์๊ณผ ์์ฑ๋ ๊ฒ์๊ธ์ ์ถ๋ ฅํจ
- ๊ฐ๋ ์ฑ์ ์ํด time.sleep()์ผ๋ก ์ง์ฐ ์ถ๊ฐ
-
-
์ต์ ํ ๋ฐ ํธ์์ฑ ๊ฐ์
- ์ต์ ํ๋ฅผ ์ํด ํ๋ฒ ์ฐ์ด๊ณ ์์ฐ์ด๋ ๋ณ์์ญ์ ํ ์ง์ ์
๋ ฅ(m1
4, p19) - ์๋ฌด๊ฒ๋ ์ ๋ ฅ์ํ๊ณ ์ํฐ ๋๋ ์๋ skipํ๊ฒ ๋ณ๊ฒฝ
- ์ด๋ฆ, ์์ด๋, ํจ์ค์๋ ์ ๋ถ ์ ๋ ฅํ์๋๋ง ํ์์ ๋ณด ๋ฑ๋ก, ์๋๊ฒฝ์ฐ ์ด๊ธฐํ ํ ๋ค์ ์ ๋ ฅ ๋ฐ์(๊ฒ์๊ธ๋ ๋ง์ฐฌ๊ฐ์ง)
- ํ๋ฒ์ ๋์ค๋ฉด ์ด์ง๋ฌ์ฐ๋๊น time.sleep()์ผ๋ก ์ง์ฐ ๋ฃ์
- ์ต์ ํ๋ฅผ ์ํด ํ๋ฒ ์ฐ์ด๊ณ ์์ฐ์ด๋ ๋ณ์์ญ์ ํ ์ง์ ์
๋ ฅ(m1
-
์ฐธ๊ณ ์๋ฃ hashlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ: https://docs.python.org/ko/3/library/hashlib.html