숫자야구 프로그램

조회수 808회

숫자야구프로그램 문제인데 저 정의된 함수를 써야하는데 저기 있는 def를 어떻게 하나요..

import random    

c=["0","0","0"]
c[0] = str(random.randrange(1,9,1))
c[1] = c[0]
c[2] = c[0]
while (c[0] == c[1]):
    c[1] = str(random.randrange(1, 9, 1))
while (c[0] == c[2] or c[1] == c[2]):
    c[2] = str(random.randrange(1, 9, 1))

시도 = 1 
strike = 0 
ball = 0 

print("I've chosen three numbers.")
print("Guess them!")

while ( strike < 3 ):

   num = str(input("Enter three numbers: "))

   strike = 0
   ball = 0

   for i in range(0, 3):
       for j in range(0, 3):
            if(num[i] == str(c[j]) and i == j):
                    strike += 1
            elif(num[i] == str(c[j]) and i != j):
                    ball += 1
   print(시도,"-th try: ", strike, " Strike ", ball, " Ball\n")
   시도 += 1

print("Congratulations! You hit!")

저거 안쓰고는 이렇게 하는건 알겠는데..

  • def가 어디에 있다는 건가요? 초보자 2021.5.2 09:26
  • 변수명을 "시도"대신 "try"로 하는게 어떨까요? noah0508 2021.5.3 10:00
  • https://hashcode.co.kr/questions/13378/ 왜이러시는거에요.. 엽토군 2021.5.3 14:01
  • 뭐가 왜이러는거에요 간절하니까 그런거지 알 수 없는 사용자 2021.5.3 20:48
  • "간절함"이 이런 컨텍스트에도 쓰이는구나. 그러니까 사과가 간절히 먹고 싶어서 사과나무 아래에서 입벌리고 사과 떨어지기 기다렸다는 거잖아요. 간절하게... 사과를 따러 기어 올라가세요. "간절함"을 이야기할 때에는 자기 땀도 흘리면서... 이야기 하자구요. nowp 2021.5.4 09:06

1 답변

  • 질문자님의 코드는 '파이썬 야구 게임'이라고 구글에 쳐서 나오는 첫번째 문서의 코드와 좀 너무 심하게 비슷해서 걱정스럽긴 한데 일단 그건 지나가겠습니다. 남의 코드에서 시작점을 찾는 거 자체는 충분히 그럴 수 있으니까요.

    함수란 입력을 규칙에 맞게 가공하여 출력하는 것입니다.
    입력, 규칙, 출력만 정하면 함수를 만들 수 있습니다.

    이렇게 해도 되긴 된다는 거지요.

    import random
    
    # 0개의 입력을 정의함
    def getInitialRandomNumbers() :
    
        # 0줄의 규칙을 정의하여 1가지를 반환함
        return ["0", "0", "0"]
    
    c = getInitialRandomNumbers()
    c[0] = str(random.randrange(1,9,1))
    c[1] = c[0]
    c[2] = c[0]
    while (c[0] == c[1]):
        c[1] = str(random.randrange(1, 9, 1))
    while (c[0] == c[2] or c[1] == c[2]):
        c[2] = str(random.randrange(1, 9, 1))
    
    # 이하 생략
    

    근데 이거만 추가해서 숙제를 내면 혼날 거 같군요.
    좀더 잘라내기 해서 붙여넣기 해봅시다.

    import random
    
    # 0개의 입력을 정의함
    def getInitialRandomNumbers() :
    
        # 여러 줄로 된 규칙을 정의함
        rn = ["0", "0", "0"]
        rn[0] = str(random.randrange(1, 9, 1))
        rn[1] = rn[0]
        rn[2] = rn[0]
        while (rn[0] == rn[1]):
            rn[1] = str(random.randrange(1, 9, 1))
        while (rn[0] == rn[2] or rn[1] == rn[2]):
            rn[2] = str(random.randrange(1, 9, 1))
    
        # 1가지를 반환함
        return rn
    
    c = getInitialRandomNumbers()
    
    # 이하 생략
    

    이런 식으로, 이 부분은 따로 잘라내서 쓰면 될 거 같은데? 싶으신 부분들을 조금씩 잘라서 따로 빼 보세요.

    입력을 정의하는 것도 그냥 이렇게 하면 될 거 같은데? 하는 걸 한번 해보세요. 예컨대 이 야구 게임이 너무 어려워서 1부터 5까지의 숫자를 가지고 플레이하기로 한다고 하면:

    # 1개의 입력을 정의함
    def getInitialRandomNumbers(max) :
    
        # 앞전의 코드와 비교해 봅시다.
        # 참고로, 이 코드는 버그가 있습니다. max가 몇보다 작을 때 이 함수는 영원히 실행되게 될까요? 한번 연구해 보세요.
        rn = ["0", "0", "0"]
        rn[0] = str(random.randrange(1, max, 1))
        rn[1] = rn[0]
        rn[2] = rn[0]
        while (rn[0] == rn[1]):
            rn[1] = str(random.randrange(1, max, 1))
        while (rn[0] == rn[2] or rn[1] == rn[2]):
            rn[2] = str(random.randrange(1, max, 1))
        return rn
    
    # 이제 이 함수에 입력을 주면 그 입력을 규칙대로 가공해서 정확한 출력을 함
    c = getInitialRandomNumbers(5)
    

    어렵지 않지요? 시도해 보세요.

    PS. 여기 오시는 분들 중 일부는 자기가 급한 프로그래밍 숙제가 떨어졌으니 빨리 답 내놓으라는 식으로 노력의 흔적이 전혀 보이지 않는 질문글을 두 번 세 번 도배하고 답 달리기만 기다리는 경우가 있습니다. 어떤 사람들은 그런 (내용도 고만고만한) 질문글에 답을 하다가 질리는 경우가 있구요. "왜이러시는거에요" 한거는 그런 차원에서 나온 소리였습니다. 질문 올리라는 사이트에 와서 질문 올렸더니 왜 이래? 싶으셨지요? 그런 사연이 있습니다. 제가 이 사이트 주인도 아닌데 주제를 넘었습니다. 미안합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)