클래스를 이용한 프로젝트라 한 번 만들어 보아야겠군요.
과제 내용
- Member 클래스와 Post 클래스를 정의하세요.
- Member 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
- 회원 이름 (name)
- 회원 아이디 (username)
- 회원 비밀번호 (password)
- Member 클래스에는 다음과 같은 메소드를 가지고 있어야 합니다.
- 회원 정보를 print해주는 display (회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됩니다!)
- Post 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
- 게시물 제목 (title)
- 게시물 내용 (content)
- 작성자 (author) : 회원의 username 이 저장되어야 함!
- 회원 인스턴스를 세개 이상 만들고 members 라는 빈리스트에 append를 써서 저장해주세요
- members 리스트를 돌면서 회원들의 이름을 모두 프린트 해주세요
- 각각의 회원이 게시글을 세개 이상 작성하는 코드를 만들어주세요.(회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 합니다). 만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장해주세요
- for 문을 돌면서 특정유저가 작성한 게시글의 제목을 모두 프린트 해주세요
- for문을 돌면서 ‘특정 단어’가 content에 포함된 게시글의 제목을 모두 프린트 해주세요
자 다시 만들기를 시작하기 전에 어떻게 만들면 좋을 지 한번 생각을 해 봅시다!
1.
Member 클래스와 Post 클래스를 정의
각 클래스에 맞게 만들어 주면 될 것 같구
2.
**`Member`** 클래스에 속성
- 회원 이름 (**`name`**)
- 회원 아이디 (**`username`**)
- 회원 비밀번호 (**`password`**)
Member 클레스에 __init__함수를 만들어서 각 인스턴스에 값을 받아서 만들어준다.
이때 어떤 방식으로 넣으면 좋을지.. 생각을 해보았는데.
먼저 불변하는 걸 생각 해보면 name, username, password는 변하지 않는다는 것을 알수 있다.
그러면 딕셔너리를 이용해서 각 key의 값에 정보를 넣은 value값을 넣어주면 될 것 같고
그 다음에 user 1명씩 을 리스트 처럼 만들어서 저장할 수 있으면 변수를 많이 많들지 않아도 될 것 같다.
3.
Member 클래스에는 다음과 같은 메소드
회원 정보를 print해주는 display (회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됩니다!)
__init__밑에 display라는 매소드를 만들어주고 print()문을 써서 name이랑 uername만 표기를 할 수 있도록 하자.
4.
**`Post`** 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
- 게시물 제목 (**`title`**)
- 게시물 내용 (**`content`**)
- 작성자 (**`author`**) : 회원의 `username` 이 저장되어야 함!
여기는 상속클래스를 써야 할 것 같습니다.
기존 Member의 username이 필요하니까?
5.
회원 인스턴스를 세개 이상 만들고 `members` 라는 빈리스트에 append를 써서 저장해주세요
1. members 리스트를 돌면서 회원들의 이름을 모두 프린트 해주세요
변수 3개를 클래스 인스턴스를 시켜주고 append를 써주면 좋을 것 같습니다.
6.
각각의 회원이 게시글을 세개 이상 작성하는 코드를 만들어주세요.
(회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 합니다).
만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장해주세요
1. for 문을 돌면서 특정유저가 작성한 게시글의 제목을 모두 프린트 해주세요
2. for문을 돌면서 ‘특정 단어’가 content에 포함된 게시글의 제목을 모두 프린트 해주세요
post에도 각각 3개의 인스턴스를 작성을 할 수 있게 만들어주고
member와 동일하게 append로 넣어주면 될 것 같습니다.
for문을 돌면서 특정단어가?? 포함이 된 게시글의 제목을 모두 프린트 해달라는 건 검색기능을
넣어달라는 말인것 같다.
이것은 저번에 배웠던 반복문 매치를 쓰면 될 것 같은데 구글링은 통해서 좋은 방법을 알아보자.
※ 힘들었던점...※
2번에 해당하는 딕셔너리를 만들고 그걸 리스트로 감싸서 클래스에 인스턴스를 시킬때에는
풀어서 넣어야하기에 for반복문을 이용해서 만들어 주어야 하겠다고 생각을 했고
구글링으로 반복문에서 변수를 생성해주는 방법으로 동적 변수 생성이라는 방법이 있었습니다.
동적변수 생성을 위해서 for문안에 globals()문이 들어가고 그뒤에 [변수명]을 넣어주면된다.
변수명에 for문에 i값 즉 변하는 값을 넣어주면 변수가 항상다르게 들어간다는 원리이다
그렇게 반복문마다 새로운 변수를 만들고 그곳에 Member클래스를 인스턴스 시켜주면 계획은 좋았다.
그러나.....한가지 문제점이 발생을 하였다.
오류 내용과 같이 for문에서 생성된 bob이라는 변수명은 정의가 되어있지 않다는 말이 나온다.. 이게 무슨 말인가....
하지만 여기서 또 이상한 것이...ㅋㅋ
실행을 하면 내가 원하는 값이 나오는 것이 아닌가???
뭐지?? 싶었다.
튜터님에게 물어보니 변수가 선언이 되는 시점이랑 print()로 출력이될때 가져오는 변수의 시점이 달라서
그런것이라고 하셨다..
작동에는 문제가 없지만 좋지않은 실행법이라고 하셨기에 다른방법이 없는 지 찾아야 했습니다.
구글링은 더욱더 자세히 찾아본 결과 나의 추측으로는
globals()로 생성이 된 변수는 우리가 그냥 알고 있는 문자 그대로의 변수명이 아니라
딕셔너리의 형식으로 저장이 된다고 생각을 해야한다.
그러면 그 딕셔너리에 변수명이 무엇이냐?? 이건데.
그게 우리가 알수 없는 변수명인것이다 ㅋㅋㅋ
나는 globals라는 변수에 { "bob" : { "name": "bob", "username": "BobJohnson", "password": "1234"} }
이런 느낌으로 있다고 생각을 했다 그렇기에 우리는 print로 bob이라는 변수를 찾을 수는 없지만 꺼낼수는 있는것이다
ㅋㅋㅋㅋㅋㅋㅋ
참 아이러니한 상황이다
그래서 내가 찾아낸 방법으로는
바디에서 print를 하는 것이 아니라
globals()가 딕셔너리로 저장이 된다는 것을 반영해서
빈 딕셔너리를 만들고 그안에 넣어버리면 된다 ㅋㅋㅋㅋㅋ 그러면 오류가 뜨지 않게 된다.
만들면서 알게 된건데 우리가 인스턴스로 저장한 값은 아래와 같은 값을 가지게 된다.
print(user_instances["bob"]) = <__main__.Member object at 0x00000195CF125190>
# 유저 데이터 생성
members = []
user1 = {"name": "bob", "username": "BobJohnson", "password": "1234"}
user2 = {"name": "billy", "username": "BillieBean", "password": "1983"}
user3 = {"name": "lee", "username": "PresidenLee", "password": "1941"}
# 리스트에 추가하기
members.append(user1)
members.append(user2)
members.append(user3)
# 사용자 인스턴스를 딕셔너리에 추가
members_instances = {}
# for반복문으로 동적변수 생성!(이놈이 제일 문제...) 그리고 빈 딕셔너리에 추가
for user_data in members:
user_instance = Member(name=user_data["name"], username=user_data["username"], password=user_data["password"])
members_instances[user_data["name"]] = user_instance
# 사용자 이름을 키로 사용하여 딕셔너리에서 사용자 정보에 접근하여 출력
members_instances["bob"].display()
members_instances["billy"].display()
members_instances["lee"].display()
-최근 소식-
아.... 근데 더 쉬운방법을 찾고 말았다
저방법은 쓸모 없어졌다.. 그래도 동적 변수에 대해서 알게 되었으니....
추가 도전 과제
- input을 이용하여 Member 인스턴스 만드는것을 사용자가 터미널에서 할 수 있게 해주세요.
- post도 터미널에서 생성할 수 있게 해주세요.
- (심화)비밀번호 해싱이 무엇인지 공부한 후 hashlib 라이브러리를 써서 회원 비밀번호를 해시화하여 저장하게 해주세요.
1.
input을 이용하여 Member 인스턴스 만드는것을 사용자가 터미널에서 할 수 있게
post도 터미널에서 생성할 수 있게 해주세요.
만들다보니 자동적으로 완성 ㅎㅎㅎㅎㅎ
2.
(심화)비밀번호 해싱이 무엇인지 공부한 후 hashlib 라이브러리를 써서 회원 비밀번호를 해시화하여 저장하게 해주세요.
음.,.. 먼저 해싱이 무엇인지 봐야겠다.
https://m.blog.naver.com/wideeyed/222020496895
여기 블로그에서 아주 잘 설명이 되어 있습니다!!!
매번마다 다른 값이 나오게 되는데!?
잘 알아두자
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 1
당신의 이름을 적어주세요 : 박현준
당신의 아이디을 적어주세요 : billy
당신의 비밀번호를 적어주세요 : 1234
----회원님의 정보가 정상적으로 기록되었습니다.----
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 2
당신이 찾으시는 분의 아이디을 적어주세요 : billy
billy님의 패스워드를 입력해 주시기 바랍니다 : 0000
잘못입력하셨습니다. 처음부터 다시 입력해 주시기 바랍니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 2
당신이 찾으시는 분의 아이디을 적어주세요 : billy
billy님의 패스워드를 입력해 주시기 바랍니다 : 1234
고객님의 회원정보 알려드리겠습니다.
고객님의 이름은 박현준입니다.
고객님의 아이디는 billy입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 3
게시글의 제목을 적어주세요 : 스파르탄 너무 쉬워요 밥이에요
게시글 내용을 적어주세요 : 너무 쉬워서 잠이와요
작성자의 이름를 적어주세요 : 거짓말쟁이
잘못입력하셨거나 리스트에 없는 이름입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 3
게시글의 제목을 적어주세요 : 사실 너무 어려워서 힘들어요 ㅠㅠ
게시글 내용을 적어주세요 : 하지만 열심히 하겠습니다.
작성자의 이름를 적어주세요 : 박현준
----회원님의 게시글이 정상적으로 기록되었습니다.----
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 4
어떤 방식으로 찾고 싶으십니까?
1: 포함된 제목으로 찾기
2: 게시글 내용으로 찾기
3: 글쓴이 이름으로 찾기
입력해 주세요 : 1
당신이 찾으시는 게시글의 제목을 적어주세요 : 사실
박현준님의 게시글을 알려드리겠습니다.
박현준님의 게시글 제목은 사실 너무 어려워서 힘들어요 ㅠㅠ입니다.
박현준님의 게시글 내용은 하지만 열심히 하겠습니다.입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 4
어떤 방식으로 찾고 싶으십니까?
1: 포함된 제목으로 찾기
2: 게시글 내용으로 찾기
3: 글쓴이 이름으로 찾기
입력해 주세요 : 2
당신이 찾으시는 게시글의 내용을 적어주세요 : 힘
잘못입력하셨거나 리스트에 없는 내용입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 4
어떤 방식으로 찾고 싶으십니까?
1: 포함된 제목으로 찾기
2: 게시글 내용으로 찾기
3: 글쓴이 이름으로 찾기
입력해 주세요 : 2
당신이 찾으시는 게시글의 내용을 적어주세요 : 열심
박현준님의 게시글을 알려드리겠습니다.
박현준님의 게시글 제목은 사실 너무 어려워서 힘들어요 ㅠㅠ입니다.
박현준님의 게시글 내용은 하지만 열심히 하겠습니다.입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 4
어떤 방식으로 찾고 싶으십니까?
1: 포함된 제목으로 찾기
2: 게시글 내용으로 찾기
3: 글쓴이 이름으로 찾기
입력해 주세요 : 3
당신이 찾으시는 게시자의 이름을 적어주세요 : 박
박현준님의 게시글을 알려드리겠습니다.
박현준님의 게시글 제목은 사실 너무 어려워서 힘들어요 ㅠㅠ입니다.
박현준님의 게시글 내용은 하지만 열심히 하겠습니다.입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 2
당신이 찾으시는 분의 아이디을 적어주세요 : 1
잘못입력하셨습니다. 처음부터 다시 입력해 주시기 바랍니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 3
게시글의 제목을 적어주세요 : 1
게시글 내용을 적어주세요 : 1
작성자의 이름를 적어주세요 : 박현준
----회원님의 게시글이 정상적으로 기록되었습니다.----
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 3
게시글의 제목을 적어주세요 : 2
게시글 내용을 적어주세요 : 2
작성자의 이름를 적어주세요 : 박현준
----회원님의 게시글이 정상적으로 기록되었습니다.----
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 : 4
어떤 방식으로 찾고 싶으십니까?
1: 포함된 제목으로 찾기
2: 게시글 내용으로 찾기
3: 글쓴이 이름으로 찾기
입력해 주세요 : 3
당신이 찾으시는 게시자의 이름을 적어주세요 : 박현준
박현준님의 게시글을 알려드리겠습니다.
박현준님의 게시글 제목은 사실 너무 어려워서 힘들어요 ㅠㅠ입니다.
박현준님의 게시글 내용은 하지만 열심히 하겠습니다.입니다.
박현준님의 게시글을 알려드리겠습니다.
박현준님의 게시글 제목은 1입니다.
박현준님의 게시글 내용은 1입니다.
박현준님의 게시글을 알려드리겠습니다.
박현준님의 게시글 제목은 2입니다.
박현준님의 게시글 내용은 2입니다.
안녕하세요 반갑습니다.
어떤 작업을 원하시나요?
1 : 등록하기
2 : 등록확인하기
3 : 게시글 등록하기
4 : 게시글 확인하기
입력해 주세요 :
이렇게 만들었다 ^^
어렵지만 여러가지를 배울 수 있어서 아주 좋았습니다.
'프로젝트 과제' 카테고리의 다른 글
영화 리뷰 게시판 만들기 - 팀 프로젝트 2일차 (0) | 2024.04.02 |
---|---|
영화 리뷰 게시판 만들기 - 팀 프로젝트 1일차 (1) | 2024.04.01 |
(개인 과제) 가위 바위 보 게임 웹으로 만들기! (0) | 2024.02.26 |
(개인 과제) 가위 바위 보 게임 만들기! (0) | 2024.02.22 |
(개인 과제) Up Down 게임 만들기 (0) | 2024.02.22 |