본문 바로가기

[내일배움캠프]스파르타코딩클럽 AI 웹개발/Today I Learned

[내일배움캠프 07일차 TIL]무한루프 반복문

파이썬 첫 번째 개인과제는 업다운 게임을 만드는 것

만들어야 할 프로그램에는 다음과 같은 기능을 포함해야 했다

  • 컴퓨터는 1부터 100 사이의 랜덤한 숫자를 생성
  • 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 '업' 또는 '다운' 힌트를 제공
  • 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려줌
  • 플레이어가 숫자를 맞힐 때까지 위의 과정을 반복

위 조건을 만족하는 프로그램을 짜는 것은 크게 어렵지 않았다

import random

computer = random.randint(1, 100)
while True:
    player = int(input("숫자를 입력하세요 : "))

    if player == computer:
        print("맞았습니다.")
        break
    elif player > computer:
        print("다운")
    else:
        print("업")

 

 

 

이렇게 실행하게 되면

 

위의 사진처럼 터미널에서 업다운 게임을 할 수 있다.

이렇게 기본적인 과제를 완성한 후에 추가 도전 과제를 시도했다

추가 도전 과제의 내용은 다음과 같다

  1. 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도할 것
  2. 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가할 것
  3. 게임이 종료될 때 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이름 표시하는 기능을 구현할 것

위에 짠 코드를 함수로 만든 후에,

추가 도전 과제를 시작했다

 

1번 도전과제 또한 크게 어렵지 않게 해결할 수 있었다.

import random

computer = random.randint(1, 100)
player = int(input("숫자를 입력하세요 : "))

while True:
    if player in range(1,101):
            if player == computer:
                print("맞았습니다.")
                break
            elif player > computer:
                print("다운")
            else:
                print("업")
    else:
        print("1부터 100사이의 수를 입력하세요")

    player = int(input("숫자를 입력하세요 : "))

 

이런 식으로 코드를 작성하였다

그리고 터미널에서 실행하면

 

이런 결과를 얻을 수 있다

 

문제는 두 번째 도전과제에서 있었다.

처음에는 위에 짠 코드를 game() 이라는 함수로 만들어 준 후에

while True:
    game()

    retry = input("다시 하시겠습니까? (y/n) : ")
    if retry != 'y':
        print("게임을 종료합니다")
        break
    else:
        game()

 

위와 같은 코드를 만들어 실행했는데

사실 정상적으로 작동하는 줄 알았으나

실제로 실행해본 결과

 

 

위의 그림처럼 한 번만 묻는 오류가 있었다.

그래서 이리저리 구글링을 해 보니 continue를 사용하면 반복문의 처음으로 가서 실행한다는 답을 얻을 수 있었다

 

마지막 줄의 game()을 지우고 continue로 작성한 후에 정상적으로 작동하는 것을 확인했다.

 

 

그리고 마지막 3번 과제는 game() 함수에서 cnt라는 시도 횟수를 저장 할 변수를 만들고

game 안에 있는 반복문을 돌 때마다 cnt를 업데이트 해 주었다

그리고 game의 반환 값으로 cnt를 주었다

def game():
    computer = random.randint(1, 100) 
    player = int(input("숫자를 입력하세요 : "))

    cnt = 0

    while True:
        if player in range(1, 101):
            cnt += 1

            if player > computer:
                print("다운")
            elif player < computer:
                print("업")
            else: 
                print("맞았습니다")
                print(f"시도한 횟수 : {cnt}")
                break
        else:
            print("1부터 100 사이의 수를 입력하세요")

        player = int(input("숫자를 입력하세요 : "))
    return cnt

 

위와 같이 함수를 수정해 준 후에

각각의 시도를 저장할 count 라는 리스트를 만들어주고

한 번의 게임이 끝나면 count에 cnt를 추가했다

그리고 게임을 다시 시도하지 않을 때 count 리스트에 있는 가장 작은 값을 보여주도록 했다

 

count = []

while True:
    g = game()
    count.append(g)

    retry = input("다시 하시겠습니까? (y/n) : ")
    if retry != 'y':
        print("게임을 종료합니다")
        break
    else:
        print(f"이전 게임 플레이어 최고 시도 횟수 : {min(count)}")
        continue

 

이렇게 코드를 완성했다!

완성된 코드를 실행하면

 

모두 정상작동을 한다!

 


두 번째 도전과제를 작성하면서 저 간단한 continue 하나를 놓쳐서 이것저것 하다가 구글링을 했는데

왜 진작 구글링을 안 했을까....

 

이 코드에서 부족한 부분이 있다면 아마 retry 값에 y 이외의 답이 들어오면 모두 게임을 종료하는 것이다

안내 메세지로 잘못된 입력이라 게임을 종료한다를 추가하거나

try except를 사용해 예외처리를 했으면 더 좋은 프로그램이 되었을 지도 모르겠다!

 

https://github.com/duswo3o/sparta_task/blob/main/UpDownGame.py