2021. 12. 20. 22:24ㆍ개발일지/내일배움캠프 TIL
짜잔... 내가 돌아왔다.
여러분 안녕하세요. 간무징어 입니다.
오늘은 대망의 개발 2주차가 되겠습니다.
2주차 부터는 파이썬으로 간단한 프로젝트를 진행합니다.
오늘은 파이썬으로 간단한 게임을 만드는 작업을 해봤는데요.
코딩을 잘하시는 개발자 분들에겐 제가 진행하는 프로젝트는
아주 귀여운 듯 보실 지도 모르겠습니다.
파이썬으로 만든 게임이라고 해서
pygame 을 사용하진 않았습니다.
콘솔 창에서 실행하여 게임을 진행할 수 있는 그런 수준입니다.
실력은 아직 부족하지만 약 5시간에 걸쳐서
스스로 생각해보고 이러저리 검색을 해보기도 하며
집에 있는 파이썬 책을 살펴보기도 했습니다.
개인적으로 공부하고 있는 파이썬 교재는
예전 파이썬으로 데이터를 분석할 수 있다는 말을 듣고
구매했던 '혼자 공부하는 파이썬' 입니다.
왜 이 책을 선택했냐면 우연히 유튜브를 보다가
'윤인성' 개발자 님의 강의를 보게 되었기 때문입니다.
책만으로도 독학 가능하지만.
비전공자도 쉽게 이해할 수 있을 설명이
유튜브에도 있어서
혹시 저와 같이 비전공자이거나 코딩을 잘 모르시면
교재와 강의를 참고해보시면서
이 책으로 공부를 해보시는 건 어떤가 조심스럽게
말씀올려봅니다.
그러면 오늘은 어떤 코드를 작성했는지
리뷰를 한 번 해보겠습니다.
import random
print("지금부터 updown 게임을 시작할게요~!")
print("지시에 따르지 않으면 바로 실패입니다.")
print("-------------------------------")
computer_num = random.randrange(1, 101)
try_count = 0
try:
for num in range(5):
player_num = int(input("1~100 사이의 수를 입력해주세요 >"))
if player_num > 100 or player_num < 0:
raise Exception
elif player_num < computer_num:
print("up")
try_count += 1
elif player_num > computer_num:
print("down")
try_count += 1
elif player_num == computer_num:
print("성공~! 정답입니다.")
print("{0}번 만에 맞췄습니다.".format(str(try_count)))
try_count += 1
except Exception as player_num:
print("{player_num}은 숫자가 아니거나 1~100 사이의 수가 아닙니다.")
print("실패! 주어진 {0}번의 기회를 모두 소진했습니다.".format(str(try_count)))
코드를 작성할 때는 몰랐는데 다 작성하고 다른 개발자 분들이 이미 진행한 코드가
인터넷에 널려 있다는 것을 확인할 수 있었습니다.
보다시피 첫번째 프로젝트는 바로 예전 술게임에서 자주했던
updown 게임입니다.
컴퓨터가 1~100 사이의 숫자를 랜덤으로 정하게 되면
사용자는 이를 정해진 기회 안에서
맞추면 되는 게임입니다.
그래서 코드를 작성하기 전에 어떤 식으로 구성할지를 먼저 생각해보았습니다.
여기에 마지막으로 오류값 입력 시 처리 방법을 try-except 구문을 사용했습니다.
이렇게 만들고 나니 좀 더 나은 방법으로 만들 수 있지 않았을까 하는 생각도 들었습니다.
같이 공부하는 개발 꿈나무들 중 한 분은
for 구문과 while 구문을 동시에 사용하시기도 했답니다.
근데 그렇게 되면 시간복잡도가 커질 것 같았습니다.
제가 생각했을 때는 for 구문으로도 충분할 것 같았고
또 워낙 복잡한 것을 싫어하는 성격이라
다른 분들에 비해선 간단히 만들었다고 생각합니다.
그리고 만들고 나니 try-except 구문도 사용하고 싶지 않았습니다.
좀 더 간단하게 만들고 싶은 욕망이 강해서 그런 것 같습니다.
여기에 사용자가 좀 더 재미를 느낄 수 있는 방법은 무엇이 있는지 고민했습니다.
이런 고민을 점심을 먹으며 2시간 정도 했답니다.
(하지만 아직 마땅히 떠오르는 것은 없었답니다.)
두번째 프로젝트는 바로 예전 술게임에서 자주했던
updown ai 만들기 입니다.
ai 하니까 뭔가 대단해보이지만 사실 여러분들이 생각하는 그런 ai가 아니랍니다.
바로 컴퓨터가 사용자의 숫자를 맞추는 방식을
구현하는 것입니다.
첫번째 프로젝트를 뒤집었다고 생각하시면 되겠네요.
num = int(input("1~100 사이의 수를 입력하세요"))
first = 25
last = 100
print(first)
val = input("up, down, answer 중 알맞은 값 하나를 입력하시오.")
while True:
for j in range(5):
median = int((first+last)/2)
print(median)
val = input("up, down, answer 중 알맞은 값 하나를 입력하시오.")
if(val == "up"):
first = median
elif(val == "down"):
last = median
elif(val == "answer"):
print("정답입니다")
print("게임이 끝났습니다")
quit()
else:
print("다시 입력해주세요.")
break
첫번째 프로젝트를 이해하고 나니 두번째 프로젝트를 구성하기 위해
사전 구성 방안을 종이에 적어보진 않았습니다.
아깐 for 문을 사용했으니 이번엔 while을 사용해보았습니다.
만드는 김에 무한반복문을 활용하면 어떨까 하는 생각이 들더라구요.
(물론 while을 for처럼 사용할 수도 있다고 들었지만요.)
다만, 궁금한 것이 생기더라구요.
어떻게 하면 컴퓨터가 빠르게 사용자의 숫자를 맞출 수 있을까?
난이도 조절을 할 수 있을까?
첫 수를 25를 부른 이유는 사실 제 나이가 25이기 때문입니다.
난이도를 낮추기 위함이었습니다.
원래는 중간값을 부르는 것이 컴퓨터 입장에서 성공확률이 가장 높다고 합니다.
어쨌든 난이도 조절을 하기 위해 중간값에서 벗어난 수를
적으면 되겠다는 생각으로 코딩을 하게 되었습니다.
그랬더니 8번 정도가 되면 대부분 맞추더라구요.
이후 사용자가 난이도를 직접 선택할 수 있다면
더 재밌는 게임을 만들 수 있을 것 같다는 생각이 들었답니다.
생각을 했지만 저번주부터 대학교 기말고사 준비를 하다보니
목 디스크가 다시 말썽을 부리더라구요.
(물론 공부를 하니 성적은 나름 볼만한 수준으로 나오게 됩니다.)
그래서 저번주에 이어 오늘 병원에 가서 주사를 맞고
이번주 목요일 날 다시 주사를 맞게 되었습니다.
예전에는 하나에 빠지면 그거에 집중하는 스타일이었어서
계속 그렇게 하니 몸이 안 좋아졌습니다.
사람의 병은 다 안고 가는 것이라지만
건강관리는 중요하니깐요.
이제부터라도 여러가지를 동시에 처리하는 것에
익숙해져야 한다고 생각합니다.
오늘은 꼭 12시 이전에 자기로 마음먹었으니(최근 거의 3-4시에 자서 7시에 일어난 것 같아요.)
그럼 여러분 내일 만나요 뿅~
'개발일지 > 내일배움캠프 TIL' 카테고리의 다른 글
8일차 내일배움캠프 개발일지 (0) | 2021.12.22 |
---|---|
7일차 내일배움캠프 개발일지 (0) | 2021.12.21 |
5일차 내일배움캠프 개발일지 (0) | 2021.12.18 |
4일차 내일배움캠프 개발일지 (0) | 2021.12.17 |
3일차 내일배움캠프 개발일지 (0) | 2021.12.15 |