02 WIL(?)

김성연·2021년 12월 26일
0

@ I Learned

목록 보기
13/18

벌써 교육 시작한지 2주가 지났다.

진짜 1주차에는 하루가 정신없이 갔다면, 2주차에는 하루가 정신없이없다갔다.
내가 생각한 목표와 계획대로 되지 않았고, 많은 에러와, 내 문제점들을 알 수 있는 한 주였다.

파이썬게임 1~3

파이썬으로 규칙을 만들어 게임을 만들어 보는 실습으로,
매일 아침 9시, 문제가 주어지고 당일 오후 4시까지 과제를 제출하면 과제 완료.
파이썬으로 만든 게임은 총 6개(하루2개씩, 종류는 같으나, normal, cheat 버전이랄까?)이다.

첫번째 게임_Up or Down? game

숫자를 1~100까지의 숫자 중 고른 숫자를 맞추는 게임이다.
normal 버전의 경우, 컴퓨터가 내는 숫자를 5번안에 맞추는 것이고, cheat 버전의 경우, 컴퓨터가 무조건 내가 낸 숫자를 맞추게 만들면된다.

Up or Down? game은 random을 활용하여 쉽게 만들 수 있었다.

random을 import하여, randint 혹은 randrange를 사용하여 컴퓨터의 숫자를 랜덤으로 입력받고, 구현할 수 있었다.

cheat버전의 경우에는 , 한가지 조건이 더 있었는데,

가장 빠르게 찾을 수 있는 방법을 구현할 것.

숫자맞추기를 해본 사람이라면, 어떻게 하면 가장 빠르게 맞출 수 있는지 알 것이다. 그리고 그것이 효울적인 방법이라는 것도.

방법은 범위내의 숫자 중 가운데 숫자를 부르고, 그 기준별로 다시 범위를 지정해서, 정답을 찾아나가는 방법, 이진탐색을 활용하여 cheat버전을 만들 수 있었다. 만들면서, 애를 먹었던 부분으로는, 계속해서 바뀌는 범위의 기준값에대한 갱신을 하는 것이였는데, 심호흡하고, 차분히 생각하니 해결 할 수 있었다.

두번째 게임_31game

우리가 술자리에서 하는 31게임을 컴퓨터와 하는 게임으로, 한번에 부를 수 있는 숫자는 3개, 31을 말하는 사람이 지는게임이다.

이번 게임을 만들 때에는, 함수를 만들어서 활용해보라는 튜터님의 말씀에 따라, 함수를 직접 만들어 코드를 구성하였고, 시작순서를 정하는 함수, 컴퓨터가 뽑는 함수, 플레이어가 뽑는 함수를 만들어 게임을 구현했다.

31game 문제를 풀면서 내가 느낀 문제점은,

첫번째, 나는 함수를 잘 못만든다.

프로그래머스로 문제를 풀면서, 나는 함수를 잘 쓰고 있는것이라고 생각했다. 하지만, 이번 문제를 풀면서 느꼈다. 나는 만들기만했지, 활용을 못한다는 것이다.

나는 return을 통해 값을 내보내주면, 그걸 받을 변수를 지정하지 하지않았고, 혼자서 "왜 이거 값이 갱신이 안되지?" 하며 시간을 허비했다. 값을 갱신하려고, 결국엔 global을 사용했는데( 이는 나중에 큰 프로젝트처럼 광범위해지면, 위험한 방법이라고한다.) 쓰면서도 "진짜 왜 안되는걸까?"의심만하면서 코드를 작성했다.

두번째, 반복되는 구조를 줄이지 못한다.

이번 31게임을 만들면서, 나는 while문을 사용하면서, while문 안에 컴퓨터가 먼저할 때, 플레이어가 먼저할 때, 조건문을 통해 크게 두 부분으로 만들었다. 주어진 조건이 그러했으니깐. 하지만, 이는 너무 불필요했다. 나는 항상 쓰여진 그대로만 받아들였다. 더 좋은 방법은 뒷전이었던 것 같다. 문제를 풀고, 다른 팀원들을 도와주면서, 팀원이 갑자기 "코드를 절반으로 줄일 수 있을 것같아요."라는 말을 듣고도 나는 전혀 이해를 못했었는데, 이야기를 듣고, 내가 얼마나 비효율적으로 코드르 작성했는지, 알 수 있었다.

31game의 cheat버전은 항상 컴퓨터가 이기는 게임을 만드는 것 이었다.
나는 31게임을 잘 몰라서 "31게임 필승법"을 검색 후 해당 숫자 리스트를 넣어, 컴퓨터의 숫자 뽑는 함수를 업데이트 했다. 근데 알고보니 이런것이 아니라, 직접 알고리즘으로 구현하는 것이 의도라는 말을 듣고 한번더 내 자신이 부끄러웠다. 너무 편한 것만 하려하는게 아닌가 하는 생각이 들었달까...

마지막 세번째 게임_class를 활용한 몬스터와 싸우는 게임

class를 활용하여, 공통된부분을 클래스로 만들고 monster클래스와 player클래스를 공통된 부분을 상속받고, method를 통해 각각의 다른 특성을 부여하여 게임을 만드는 과제였다.

나는 이번 과제 전까지는 클래스를 사용해본 경험이 거의 없었다. 이번 알고리즘 강의를 통해 "linked list"를 구현할 때, 처음 사용해봤다. 잘은 몰랐지만, 찾아가면서 공부를 해보니 쉽게 만들어 볼 수 있었다.

함수로 바꾸는 것 빼고...

나는 코드를 작성할 때, 먼저 구현이 되게 코드를 작성하고,
"이 부분은 함수로 해도 되겠는데?" 하는 부분이 있다면, 함수로 만들어 사용하였다.(항상 함수로 만들거나, 억지로 만들지 않았다..) 하지만, 이번 과제에서는 함수로 구성하라고 하여, 코드를 완성하고, 함수를 만들어보려 하였다.

"이걸 함수로 구현하면, 다음 값들이 갱신을 어떻게 시켜야하지..?"

독립적인(?)부분은 손쉽게 함수로 대체하였다.(현재 상태를 나타내주는 함수등) 하지만, 공격을 하거나(혹은 받거나) 몬스터의 특성, 플레이어 특성이 다른데, 그것들을 갱신하는게 함수로 만들어서 그값들을 어떤 변수에 넣어 갱신을 해야할지가 내 발목을 강하게 잡았다. 결국에는 풀이 전까지, 해결하지 못하였고 풀이 이 후에 다시 내코드를 보고, 팀원들과 서로의 코드를 리뷰를 해도 나는 결국 내 코드를 수정하지 못했다.(다시 코드를 구성해야할 것 같았다.)
이는 내가 해결해야 할 큰 과제로 느껴지고, 연습하고 연습해서 결국에는 해 낼 수 있도록 더 노력해야겠다.

그리고 꽤나 큰 충격을 준 같은 캠퍼의 발표.

와 진짜 이 사람은 게임을 만들었더라.. 지금 내가 느끼기에 괴물처럼 느껴졌는데, 캠퍼의 발표를 듣고, 많은 자극을 받았다. 캠프 시작 전, 내가 했던 마음가짐에 대하여, 그리고 지금의 내 마음가짐에 대해 반성을 많이했다.

파이썬 게임 이후, UI 클론코딩과제가 주어졌다.

카카오톡 프로필 화면 만들기

구버젼 카카오톡 프로필을 만드는 과제

과제는 어렵지 않았다. 배치와, 배치만 하면 쉽게 만들 수 있었다. 하나 어려웠던것은 absolute를 한번만 사용해야 한다는 점? 사실 이것도 그저 처음보는 단어라서 그런거였지, 어렵지는 않았다.

두번째, 인스타그램 모바일 페이지 만들기

간단한듯 복잡하고 복잡한듯 복잡한 쉬운듯 겁나어려웠던 과제.

진짜 html, css에 대한 내 생각을 다시하게 만든 과제였다.

정말 무심함 그 자체인 css

실수 하나 찾는게 다른 코드들 보다도 더 어렵다.. 제대로된 이해가 없다면, 절대 내 의도와 생각대로 구현을 할 수 없다고 느꼈다.
구조는 체계적이고, 잘짜여진 틀이 정말 중요하단걸 깨닮은 과제였다.

그래서 2주차의 나의 느낀점은,

프로젝트, 과제는 너무나도 어렵고 힘들면서, 재밌다는 것. 그리고 나는 배워야 할 것, 부족한 것이 측정할 수 없을만큼 많지만, 이 과정이 재밌다는 것.
앞으로 다음주가 기대된다. 힘들면서, 또 얼마나 더 배울 수 있을지, 내 시간이 사르르 녹일 내용이 무엇일지!!
그리고 내 자신에게 이 말을 해주고싶다.

"계획은 세우지만, 지금의 할일은 미루지말자."

(미래의 나는 책임지지 못한다고... 미래의 나도 할일이 가득해...)

0개의 댓글