Skip to content

Latest commit

ย 

History

History
252 lines (198 loc) ยท 11.9 KB

File metadata and controls

252 lines (198 loc) ยท 11.9 KB
  • ํ”„๋กœ์ ํŠธ: ๊ฐ„๋‹จํ•œ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ๋งŒ๋“ค๊ธฐ

    • ์„ค๋ช…: ์ด ํ”„๋กœ์ ํŠธ๋Š” ํšŒ์›๊ณผ ๊ฒŒ์‹œ๋ฌผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์†Œ์„ค ๋ฏธ๋””์–ด ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š”๊ฒƒ ์ž…๋‹ˆ๋‹ค. ํšŒ์› ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠน์ • ํšŒ์›์ด ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ํŠน์ • ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฒ€์ƒ‰ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ํšŒ์›์˜ ์ด๋ฆ„, ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํšŒ์›์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒ€์› ๋ฐ ์—ญํ• 

    • ๋‚˜์ง€์ˆ˜(ํŒ€์žฅ, ๋ฐฑ์—”๋“œ ๋‹ด๋‹น):

      • class Member ๋ฐ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์ž‘์„ฑ
      • ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™”
    • ๊น€์ง„์˜(๋ฐฑ์—”๋“œ ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ํ”ผ๋“œ๋ฐฑ ๋‹ด๋‹น):

      • class Post ์ž‘์„ฑ
      • ๊ณต๋™ ์ž‘์—… ๋ถ€๋ถ„ ์ง„ํ–‰
    • ์ด์„ธ์ค€(ํ”„๋ก ํŠธ์—”๋“œ ๋‹ด๋‹น):

      • ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • ์ด์ข…ํ™”(ํ”„๋ก ํŠธ์—”๋“œ ๋‹ด๋‹น):

      • ๋ฉค๋ฒ„ ์ธ์Šคํ„ดํŠธ ์ƒ์„ฑ
      • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ
    • ๊ณต๋™ ์ž‘์—…(ํ™”๋ฉด๊ณต์œ ): ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ํ†ตํ•œ ํšŒ์› ๋ฐ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ

  • ์‚ฌ์šฉ๋ฒ•

    1. Python ์‹คํ–‰์‹œ ํšŒ์› ์ด๋ฆ„๊ณผ ์•„์ด๋””๊ฐ€ ์ถœ๋ ฅ๋จ.

    2. '์ฐพ์œผ์‹ค ๊ธ€์“ด์ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”'์—์„œ ์•„์ด๋”” ์ž…๋ ฅ์‹œ ํ•ด๋‹น ํšŒ์›์ด ์ž‘์„ฑํ•œ ๊ธ€ ์ถœ๋ ฅ๋จ ๋งŒ์•ฝ ์—†๋‹ค๋ฉด ์—†๋‹ค๋Š” ๋งจํŠธ ์ถœ๋ ฅ, ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋Ÿฌ ์Šคํ‚ต

    3. '์ฐพ์œผ์‹ค ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”:'์—์„œ ํ•ด๋‹น ๊ฒ€์ƒ‰์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ, ๊ฒ€์ƒ‰์–ด์˜ ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐ„ ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ์ด ์ถœ๋ ฅ๋จ

    4. ์ž‘์„ฑ ์™„๋ฃŒํ•˜๋ฉด ํšŒ์› ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋จ

      • ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”:
      • ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:
      • ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:
    5. ์ž‘์„ฑ ์™„๋ฃŒ์‹œ ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋จ

      • ์ œ๋ชฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”:
      • ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”:
    6. ์ž…๋ ฅํ•œ ํšŒ์›๊ณผ ๊ฒŒ์‹œ๊ธ€์ด ์ž˜ ๋“ฑ๋ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด '์ž‘์„ฑ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:'์— ๋“ฑ๋กํ•œ ํšŒ์› ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ™•์ธ๊ฐ€๋Šฅ. ๋งŒ์•ฝ ์—†๋Š” ๋งด๋ฒ„๊ฑฐ๋‚˜ ์•„์ด๋””๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ์žฌ์ž…๋ ฅ ๋ฉ˜ํŠธ ์ถœ๋ ฅ๋จ

    7. ์ถ”๊ฐ€๋œ ํšŒ์› ์ด๋ฆ„๊ณผ ์•„์ด๋””๋ฅผ ํฌํ•จ๋œ ๋ชฉ๋ก์ด ์ถœ๋ ฅ๋จ

  • ์ฝ”๋“œ ์„ค๋ช…

    • ๋ฐฑ์—”๋“œ:

      • ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
      • 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)
        1. ํšŒ์›์˜ ์ •๋ณด๋ฅผ ๋‹ด์„ ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ > Member ํด๋ž˜์Šค์™€ init, display ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์ž‘์„ฑ
        2. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ init ์‚ฌ์šฉ
        3. init()์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ self๋ฅผ ํ†ตํ•ด ์ดํ›„์— ๋‚˜์—ด๋œ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
        4. init()์—์„œ self.name = name ์„ ์„ ์–ธํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด display()์—์„œ name์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
        5. ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ display()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšŒ์› ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ์ด ๋•Œ print(f'string') ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ name๊ณผ username์„ ์ถœ๋ ฅ.
        6. hashlib ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งจ ์œ„์— import hashlib ์ž‘์„ฑ
        7. hash_password() ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ init์—์„œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ•ด์‹œํ™”ํ•จ
        8. hexdigest() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ 16์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
      class Post:
          def __init__(self, title, content, author):
              self.title = title
              self.content = content
              self.author = author
      
      • ์ฝ”๋“œ ์„ค๋ช…(class Post)
        1. Post ํด๋ž˜์Šค ์ƒ์„ฑ.
        2. init()์€ Post ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์ƒ์„ฑ ์‹œ ์ดˆ๊ธฐ์— ๋ฐœํ˜„๋˜๋Š” ๋ฉ”์†Œ๋“œ.
        3. ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ๋Š” ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์™€๋Š” ๋‹ฌ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ 0๋ฒˆ์งธ ์ž๋ฆฌ์—๋Š” ๊ผญ self๋ฅผ ๋„ฃ์–ด์•ผํ•จ.
        4. 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()
      
      • ์ฝ”๋“œ์„ค๋ช…(์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ)
        1. 'Member' ์ธ์Šคํ„ฐ๋“œ ์ƒ์„ฑ ๋ฐ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
        2. 'm1', 'm2', 'm3' ์ด๋ฆ„์œผ๋กœ ์„ธ ๊ฐœ์˜ 'Member' ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ.
        3. ์ด ๊ฐ์ฒด๋“ค์„ 'members' ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•จ.
        4. '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'))
      
      • ์ฝ”๋“œ์„ค๋ช…(๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๋ฐ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ)
        1. 'Post' ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
        2. ์—ฌ๋Ÿฌ 'Post' ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ 'posts' ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•จ.
        3. ๊ฐ ๊ฒŒ์‹œ๊ธ€ ๊ฐ์ฒด๋ฅผ 'posts' ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•จ.
        4. ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ์„ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•จ.
      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}(์ด)๊ฐ€ ๋“ค์–ด๊ฐ„ ์ž‘์„ฑ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
      
      • ์ฝ”๋“œ์„ค๋ช…(ํŠน์ • ํšŒ์›์˜ ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰)
        1. ๊ธ€์“ด์ด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ•ด๋‹น ๊ธ€์“ด์ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ search_name ์ž‘์„ฑ
        2. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ธ€์“ด์ด ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์Œ
        3. ์ž…๋ ฅ๋ฐ›์€ ๊ธ€์“ด์ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์ด ์žˆ์œผ๋ฉด ์ œ๋ชฉ์„ ์ถœ๋ ฅ, ์—†์œผ๋ฉด ํ•ด๋‹น ๊ธ€์“ด์ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์ด ์—†๋‹ค๊ณ  ์ถœ๋ ฅ
        4. ์ž…๋ ฅํ•  ๋‚ด์šฉ์ด ์—†์„๋• ์—”ํ„ฐ ์ž…๋ ฅ์‹œ ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ์ˆ˜์ •
      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}๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒŒ์‹œ๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.")
      
      
      • ์ฝ”๋“œ์„ค๋ช…(ํŠน์ • ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰)
        1. ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ•ด๋‹น ๊ฒ€์ƒ‰์–ด๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ search_include ์ž‘์„ฑ
        2. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›์Œ
        3. ์ž…๋ ฅ๋ฐ›์€ ๊ฒ€์ƒ‰์–ด๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๊ธ€์ด ์žˆ์œผ๋ฉด ์ œ๋ชฉ์„ ์ถœ๋ ฅ, ์—†์œผ๋ฉด ํ•ด๋‹น ๊ฒ€์ƒ‰์–ด๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๊ธ€์ด ์—†๋‹ค๊ณ  ์ถœ๋ ฅ
      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)
      
      • ์ฝ”๋“œ์„ค๋ช…
        1. ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜, ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์•„์ด๋”” ๋ชจ๋‘ ์ž…๋ ฅํ–ˆ์„๋•Œ๋งŒ ๋“ฑ๋ก, ์•„๋‹๊ฒฝ์šฐ ์ „๋ถ€ ์ž…๋ ฅํ•˜๋„๋ก ์œ ๋„ ๋ฌธ๊ตฌ ์ถœ๋ ฅ ํ›„ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›์Œ
        2. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ์ž…๋ ฅ๋ฐ›์Œ
        3. ์ž‘์„ฑ์ž์˜ ์•„์ด๋””๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ members ๋ฆฌ์ŠคํŠธ์—์„œ ์œ ํšจํ•œ ์ž‘์„ฑ์ž์ธ์ง€ ํ™•์ธ
        4. ์œ ํšจํ•œ ์ž‘์„ฑ์ž์ผ ๊ฒฝ์šฐ Post ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ posts ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
        5. ์œ ํšจํ•œ ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ๋‹ค์‹œ ์ž…๋ ฅ๋ฐ›์Œ
        6. ๋ชจ๋“  ํšŒ์›๊ณผ ์ž‘์„ฑ๋œ ๊ฒŒ์‹œ๊ธ€์„ ์ถœ๋ ฅํ•จ
        7. ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด time.sleep()์œผ๋กœ ์ง€์—ฐ ์ถ”๊ฐ€
  • ์ตœ์ ํ™” ๋ฐ ํŽธ์˜์„ฑ ๊ฐœ์„ 

    • ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํ•œ๋ฒˆ ์“ฐ์ด๊ณ  ์•ˆ์“ฐ์ด๋Š” ๋ณ€์ˆ˜์‚ญ์ œ ํ›„ ์ง์ ‘์ž…๋ ฅ(m14, p19)
    • ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅ์•ˆํ•˜๊ณ  ์—”ํ„ฐ ๋ˆŒ๋ €์„๋•Œ skipํ•˜๊ฒŒ ๋ณ€๊ฒฝ
    • ์ด๋ฆ„, ์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ ์ „๋ถ€ ์ž…๋ ฅํ–ˆ์„๋•Œ๋งŒ ํšŒ์›์ •๋ณด ๋“ฑ๋ก, ์•„๋‹๊ฒฝ์šฐ ์ดˆ๊ธฐํ™” ํ›„ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›์Œ(๊ฒŒ์‹œ๊ธ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)
    • ํ•œ๋ฒˆ์— ๋‚˜์˜ค๋ฉด ์–ด์ง€๋Ÿฌ์šฐ๋‹ˆ๊นŒ time.sleep()์œผ๋กœ ์ง€์—ฐ ๋„ฃ์Œ
  • ์ฐธ๊ณ ์ž๋ฃŒ hashlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: https://docs.python.org/ko/3/library/hashlib.html

โšก