SteadyDrills

[TIL] 과제1 UP_DOWN 게임 만들기 본문

PYTHON

[TIL] 과제1 UP_DOWN 게임 만들기

Drills 2024. 7. 2. 23:54

20240702

 

규칙)

  1. 컴퓨터가 정하는 랜덤숫자 (1-100)중 하나를 유저가 맞춘다.
  2. 숫자를 입력하면 '업' 또는 '다운' 힌트가 나온다
  3. 유저가 숫자를 맞추면 최고기록, 시도한 횟수와 재시작 여부를 묻는다.

최종 코드

import random

random_num = random.randint(1, 100)

print("up-down 게임을 시작합니다.")
print("수의 범위는 1-100 입니다.")

count = 0
score = []

# 최고 점수 반환


def high_score(scores):
    return min(scores)


while True:
    num = input("숫자를 입력하세요: ")

    # 문자열 데이터를 입력할 경우 에러 방지

    try:
        num_user = int(num)

    except ValueError:
        print("숫자가 아닙니다.")
        continue

# 범위 안의 숫자를 쓰게 유도

    if 0 > num_user or 100 < num_user:
        print("1-100 까지의 숫자 중 입력하세요")
        continue

    elif 0 < num_user < 101:

        if num_user < random_num:
            print("UP!")
            count += 1
            continue

        elif num_user > random_num:
            print("Down!")
            count += 1
            continue

        # 정답을 맞춘 뒤 다시 시작을 질문
        elif num_user == random_num:
            score.append(count+1)
            print(f"축합니다. 정답입니다! {count+1}번 만에 맞추셨습니다!! ")
            print(f" 최고 기록은 {high_score(score)} 입니다.")
            restart = input("다시 시작 하시겠습니까?(y/n): ").lower()
            count = 0

            if restart == "n":
                break
            elif restart == "y":
                random_num = random.randint(1, 100)
                continue
            else:
                print(f"다시 선택해 주세요")
                restart = input("다시 시작 하시겠습니까?(y/n): ").lower()

                if restart == "n":
                    break

                elif restart == "y":
                    random_num = random.randint(1, 100)
                    continue

                else:
                    print("게임을 종료하겠습니다")
                    break

 

 위 코드를 짜면서 어려웠던 부분은 두 가지 부분이었다.

첫 번째는 최고기록을 표시하는 것이었다. 리스트를 사용해서 기록을 모으기는 했는데, 단순히 list값을 꺼내는 게 아니라 생각보다 어려웠다. 그중에 최단기록을 표시하기 위해 함수 high_score를 사용했다. 처음에는 min 함수가 정수의 값만 사용할 수 있는 줄 알았지만, 확인해 보니 문자열, 리스트, 딕셔너리 등 거의 모든 데이터 형태를 사용할 수 있다는 걸 알았다.

 그래서 함수를 사용할 때에는 그  함수가 정확히 어떤 데이터 값을 요구하는지 혹은 처리할 수 있는지 확인하는 버릇을 길러야겠다는 생각이 들었다.  

 

  두 번째는 루프 처음에 숫자가 아닌 문자열 정보가 들어갔을 때 에러였다. 사실 이 부분은 과제 기준에는 없었지만 그래도 오류가 발생할 지점을 알기 때문에 고치는 게 맞다고 생각했다. 처음에는 이 부분을 어떻게 처리하면 좋을지 생각하다가 다행히 심화 강의에 나온 try / except 문법을 사용해 에러가 발생했을 때 처리하도록 했다,

 

과제지만 처음으로 조금 코딩을 해본 느낌이라 새로웠다. 같은 함수라도 위치 하나에 오류가 생기고 원하는 방향대로 진행되지 않는 모습을 보며 코딩은 섬세한 작업이라는 걸 배웠다. 나중에 조금 더 배운 후 부족한 기능을 보완해 보고 싶다.