20.08.28 Python mission

deokyeong1020·2020년 8월 28일
0

간만의 글...

최근 일주일 너무 버거웠다. 뭔가 의욕이 앞서서 이해가 가지 않은 부분이 있어도 다음 단계로 넘어가는 일을 반복했다. 초조함이 앞서서 그랬을까? 지난 한주가 정말 그랬다... 자바스크립트, 처음 배우는 프로그래밍 언어인 만큼 차근차근 쌓아올렸어야 하는데 마음이 급했는지 툭 치면 쓰러질 모래성 같은 지식을 쌓았다. 그래서일까? 제대로 이해하지 않은 내용을 포스팅하는데 부끄러움이 느껴져 도저히 글을 쓰지 못하였다.

그래도 사전 스터디에 임하길 잘했다는 게 이번에 느껴졌다. 이런 나태한 마음이 들 때 좀 느긋해질 수 있었는데 매주 모여서 하는 스터디 모임에 뭐라도 들고 가야 하니 좀 힘들어도 다시 컴퓨터 앞에 앉게 되었다.

그러나 이번 주 잠시 자바스크립트는 내려놓았다. 다시 자바스크립트를 차분히 공부하기에 아직 시간이 좀 남았고, 아직 한 번도 공부해보지 못한 파이썬을 하는 것이 마음이 편할 것 같아서였다. 아무래도 프론트앤드를 지망하는 나에게 자바스크립트는 완벽하게 공부해야 하는 부담감을 주었지만, 파이썬은 당장은 '완벽하게 해야 한다'라는 생각이 들지 않아서 정말 마음 편안하게 즐기면서 공부했다. '완벽'에 대한 부담감을 내려놓고 게임하듯 프로그래밍을 해보니 정말 신기하게도 오히려 자바스크립트보다 빠르게 기초 부분을 훑어볼 수 있었다.

그러나 이번에 파이썬을 접근할 때는 자바스크립트와는 좀 다르게 접근했다. 문법을 완벽하게 쓰는데 집중하는 것이 아닌 문법이 흘러가는 스토리에 집중했다. 문법이야 틀리면 고치고 틀리면 또다시 고치면 되는 거니까, 배운 것이 어떻게 흘러가는지만 집중했다.

그런 식으로 기초 문법을 대충 한 번 다 보고 바로 텍스트 게임을 하나 만들어보았다. 물론 어떤 것을 쳤을 때 이것이 int 인지, str 인지 헷갈리기도 한다. 아까 게임을 만들 때도 for in을 작성하는데 randrange(130,150)을 주는데 iterable 오류가 발생했다. 그래도 상관없었다. 일단 만들고자 하는 것의 로직은 다 만들어져있었고, 그냥 그걸 쓰는 법을 몰랐던 거니까 찾아서 입력하면되었다.

총알을 탄창에 넣고 총에 장착해서 장전하고 쏘면 총알이 나간다는 것을 아는데, 총알을 탄창에 넣는 법을 모른다고 총을 못쏘겠는가? 탄창의 종류에 맞게 총알을 탄창에 넣는 법을 보고 따라하면 나머지는 금방 할 수 있지 않은가?
문제는 총을 쏘는 순서에 대한 이해가 없이 방아쇠만 당겨대는 것이 문제지...

좌우간 이번에 만든 게임을 방금 말한 순서에 따라 설계를 해 보았다.

1 대 1 야구게임
시나리오 : 동네에서 알아주는 투수 나까무라, 어느날 운동장에서 혼자 벽에 공을 던지며 놀고있었는데 혼자 야구를 하는 것이 재미가 없게 느껴졌다. 심심했던 나까무라는 핸드폰으로 '나'를 불러 1대1 야구 대결을 제안했다. 포인트 1: 당신은 나까무라의 제안을 받아들일 것인가? 나까무라와 야구대결을 펼치기로한 player
게임의 규칙은 이러하다.

  1. 안타,볼넷을 합쳐 총 2득점이 나올 시 player의 승리가 된다.
  2. 삼진 1개를 당할 시 나까무라의 승리가 된다.

전제 조건

  1. 나까무라는 직구만 던질 수 있고 구속은 135~150km까지 나온다.
    나까무라는 135~140사이의 공은 무조건 스트라이크를 넣을 수 있다.
    140~150사이의 공은 무조건 볼이 나온다.
  2. player는 타석에서 "휘두른다, 기다린다" 2가지 중 양자택일만 가능하며
    구속 135km~140km의 공만 칠 수 있고, 치기만 하면 안타가 나온다. 나머지는 치지 못한다.
  3. 안타 1점, 볼넷 1점

각각의 포인트가 되는 지점에 경우의 수를 짜고 진행하니 그냥 규칙을 수행할 수 있는 구문을 짜면 되어서 재밌게 진행해볼 수 있었다.

위코드 미션인 for문 써보기, if와 else문, break,continue 등 자연스럽게 미션 수행도 해볼 수 있어서 재밌었다.

from random import *

answer = input("동네에서 알아주는 투수 나까무라, 어느날 운동장에서 혼자 벽에 공을 던지며 놀고있었는데 혼자 야구를 하는 것이 재미가 없게 느껴졌다. 심심했던 나까무라는 핸드폰으로 '나'를 불러 1대1 야구 대결을 제안했다. 받아들일 것 인가? yes or no ? ")

if answer == "yes":
    pass
    print("경기규칙 : 안타와 볼넷 합계 2번 승리, 삼진 : 1번 패배 ")
else:
    print("아.. 우리의 왕따 나까무라.. 화이팅!\nGame Over")
    import sys
    sys.exit()


score = 0
strike = 0
ball = 0
hit = 0


player = {1: "이대호", 2: "추신수", 3: "이승엽"}
num = input("캐릭터를 골라주세요!\n1 : 이대호, 2 : 추신수, 3 : 이승엽\n당신의 선택은?")
print("탁월한 선택입니다.")
selector = player[int(num)]

for i in range(1, 100):  # randrange를 여기다 써서 iterable오류 발생(타입오류)
    print("투수! 공을 던졌습니다!")
    act = input("휘두른다? 기다린다?")
    km = randrange(135, 151)
    print("구속 : {0}km".format(km))
    # continue한 번 써보기 위해 작성// 경우의 수가 나와도 건너뛰고 반복문을 다시 진행한다.
    if 135 <= km < 140:
        # continue
        if act == "휘두른다":
            print("{0} 안타! 안타! 쳤습니다~ 저 선수 방망이 참 잘쳐요~".format(selector))
            strike = 0
            score += 1
            hit += 1
            if score >= 2:
                print("이겼습니다~~~{0}~~~ 오늘의 승자는 {0}입니다!!!".format(selector))
                break
            else:
                print("아~ 아직 안타가 더 필요합니다...")
        else:
            print("스투~~~라익!")
            strike += 1
            if strike == 3:
                print("{0} 삼진 아웃! 경기 끝났습니다...\n 오늘 경기의 승자는 나까무라!".format(selector))
                break
            else:
                pass
    elif 140 <= km < 151:
        if act == "휘두른다":
            print("스투~~~라익!, 방망이가 헛도네요...")
            strike += 1
            if strike == 3:
                print("삼진 아웃! 경기 끝났습니다...\n 오늘 경기의 승자는 나까무라!")
                break
            else:
                pass
        else:
            print("볼")
            ball += 1
            if ball == 4:
                print(
                    "포볼! 타자 공을 잘 골라내면서 경기 끝났습니다...\n 오늘 경기의 승자는 {0}".format(selector))
                score += 1
                strike = 0
                ball = 0
                if score >= 2:
                    print("이겼습니다~~~{0}~~~ 오늘의 승자는 {0}입니다!!!".format(selector))
                    break
                else:
                    print("아~ 아직 점수가 더 필요합니다...")
            else:
                pass

위 코드는 그 결과물이다. 멘트나 이런 것은 정확하게 시나리오데로 간 것은 아니라 내용이 좀 다를 수 있지만 내가 생각했던 것을 구현하기에는 충분했다.
그러나 좀 문제가 있다면 좀 단순하게 구성하였고, 문법의 속성이나 작성방법에 익숙하지 않아 코드가 비효율적일 수 있을 것 같다. 그래도 이번주 뭔가 느꼈다면 이런것이다. 이론적으로 하나하나 문법을 작성하는 법을 암기하기보다 만들고 싶은 것을 먼저 만들어보고 이것을 줄일 수 있는 방법을 찾는 쪽으로 공부해야겠다.

목적지에는 어떻게든 갈 수 있게 만들고 그 다음 좀 더 빨리 갈 수 있는 방법에 집중!

profile
일일 개발 기록 블로그

0개의 댓글