파이썬 숫자맞추기 종료조건 질문

조회수 1060회

숫자를 맞췄을때만 종료시키는 코드에서 입력하려는 값의 조건에 맞지 않게 입력했을때도 종료시키기 위해 if문을 추가해봤는데 이전 조건만 적용되는것같아서 질문드려요.

그리고 upperbound, lowerbound라는 변수는 어떻게 사용하나요?

import random
tries=0
num=random.randint(1,100)
print("1부터 100 사이의 숫자를 맞추시오")
g=int(input("숫자를 입력하시오: "))


while True :
    tries=tries+1
    if g>num:
        g=int(input("%d보다 작은 숫자로 맞춰보세요: "%g))
        if g==num and g>num:
           print("실패하였습니다")
           break
        else :
            g=int(input("%d보다 작은 숫자로 맞춰보세요: "%g))
    elif g<num:
        g=int(input("%d보다 큰 숫자로 맞춰보세요: "%g))
        if g==num and g<num:
            print("실패하였습니다")
            break
        else :
            g=int(input("%d보다 큰 숫자로 맞춰보세요: "%g))
    else :
        print("축하합니다! 시도횟수=",tries)
        break

1 답변

  • 작성하신 코드를 보고 제가 대략적으로 이해한 것을 정리해보면

    1. 숫자를 입력받는다.
    2. 입력받은 숫자가 정답보다 클 경우 더 작은 값을 입력하도록 하고, 정답보다 작을 경우 더 큰 값을 입력하도록 한다.
    3. 이전에 입력한 숫자보다 더 작은 값을 입력하도록 했을 때 더 큰 값을 입력하거나 더 큰 값을 입력하도록 했을 때 더 작은 값을 입력할 경우 실패한다.
    4. 정답을 맞출 경우 시도 횟수를 반환한다

    인데 이게 맞나요?

    작성하신 코드와는 다소 다르지만 이런 의도가 아니셨을까 해서요.

    원하시는 방향이 무엇이건간에 일단 작성하신 코드의 문제점을 살펴보겠습니다.

    if g==num and g>num 부분을 보면, 입력받은 g라는 숫자가 임의로 뽑은 num이라는 숫자와 같으면서 그 숫자보다 클 경우에만 참이 됩니다.

    그런 경우는 존재하지 않죠..

    따라서 입력을 한번 받고 나면 무조건 입력을 한번 더 받게 됩니다.

    그리고 분명히 입력을 두 번 받았음에도 불구하고 정답과 제대로 된 비교는 한 번만 했을 뿐이고, tries 역시 마찬가지로 1만 증가하게 됩니다.

    또, upperbound, lowerbound 라는 변수는 어떻게 사용하냐고 물어보셨는데, 변수는 어떻게 사용한다고 정해져 있는 것이 아니예요.

    어떤 변할 수 있는 값에 이름을 붙여서 사용할 수 있도록 한 것이 변수입니다.

    아마 upperbound, lowerbound를 이용하여 조건을 주는 것을 생각하신 것이 아닐까 싶은데, 만약 그러신거라면 각 용어에 대해 다시 공부해 보시는것을 추천드립니다.

    우선 어떤 조건일 때 어떤 식으로 실행되어야 하는지를 명확하게 정리하신 후에 그걸 그대로 코드로 옮겨보세요.

    • 답이 나올때까지 시행을 하는데 시행을 멈추는 조건을 1)답을 맞춘다 2) 이상, 이하의 조건에 맞지 않게 입력했다. 로 코드를 만든것이였는데, 한번값을 입력받은값이 num과 달라 다시 입력값을 받을때 이전에 입력한값과 같은 수를 입력하거나 이상 이하 조건에 맞지 않게 입력했을때의 조건을 추가하기위해 if절을 추가한것이였는데 잘못한것같아서 ,, 알 수 없는 사용자 2020.5.8 23:18
    • 이상 이하의 조건에 맞게 입력했는지 확인하려면 값을 덮어쓰는 방식으로 입력을 받으시면 안됩니다. 이전 입력값이 없어진 상태에서 조건을 확인할 수 없으니까요. 또한 조건에 맞는 값을 입력했을 때에는 그 상태에서 새로운 값을 입력받는 것이 아니라 while문의 한 loop를 끝내고 다음 loop를 시작하는 방식으로 해보세요. HIAOAIH 2020.5.9 00:53

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

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

(ಠ_ಠ)
(ಠ‿ಠ)