2024.12.01 WIL 과제1 수정 또 수정

SMALL

숫자 맞추기 게임 코드는 짜는게 과제였다. 

제일 처음 코드를 짜고 게임을 계속하시겠습니까 루프에 갇혔었다.

[ 초기 고장난 코드 ]

import random
chosen_number = random.randint(1, 10)
print("=== 숫자 맞추기 게임 ===")
print(f"1과 10 사이의 숫자를 하나 정했습니다.\n이 숫자는 무엇일까요?")
user_number = int(input("예상 숫자 : "))
while True:
    if user_number < chosen_number:
        print("너무 작습니다. 다시 입력하세요.")
        user_number = int(input("예상 숫자 : "))
    elif user_number > chosen_number:
        print("너무 큽니다. 다시 입력하세요.")
        user_number = int(input("예상 숫자 : "))
    else:
        print("정답입니다!")
        break
while True:
    user_input = input("계속 하시겠습니까? (Y/N): ").upper()
    if user_input == 'Y':
        print("게임을 계속합니다!")
    elif user_input == 'N':
        print("게임을 종료합니다.")
        break
    else:
        print("잘못된 입력입니다. Y 또는 N을 입력하세요.")

 

 

그러다 튜터님께 질문해서 어째저째 고쳤는데 뭔가 while을 세번 쓰니까 지저분해보였다.

 

[ 고쳐서 완성한 첫번째 코드 ]

import random
while True:
    chosen_number = random.randint(1, 10)
    print("=== 숫자 맞추기 게임 ===")
    print(f"1과 10 사이의 숫자를 하나 정했습니다.\n이 숫자는 무엇일까요?")
    user_number = int(input("예상 숫자 : "))
    while True:
        if user_number < chosen_number:
            print("너무 작습니다. 다시 입력하세요.")
            user_number = int(input("예상 숫자 : "))
        elif user_number > chosen_number:
            print("너무 큽니다. 다시 입력하세요.")
            user_number = int(input("예상 숫자 : "))
        else:
            print("정답입니다!")
            break
    while True:
        user_input = input("계속 하시겠습니까? (Y/N): ").upper()
        if user_input == 'Y':
            print("게임을 계속합니다!")
            break 
        elif user_input == 'N':
            print("게임을 종료합니다.")
            exit()
        else:
            print("잘못된 입력입니다. Y 또는 N을 입력하세요.")

 

 

그래서 고민하다 def로 묶어서 무한루프를 하나 줄여보자고 생각했다.

[ 깔끔을 위한 2번째 도전 ]

import random
def start_game():
    chosen_number = random.randint(1, 10)
    print("=== 숫자 맞추기 게임 ===")
    print(f"1과 10 사이의 숫자를 하나 정했습니다.\n이 숫자는 무엇일까요?")

    user_number = int(input("예상 숫자 : "))
    while True:
        if user_number < chosen_number:
            print("너무 작습니다. 다시 입력하세요.")
            user_number = int(input("예상 숫자 : "))
        elif user_number > chosen_number:
            print("너무 큽니다. 다시 입력하세요.")
            user_number = int(input("예상 숫자 : "))
        else:
            print("정답입니다!")
            break

    while True:
        user_input = input("계속 하시겠습니까? (Y/N): ").upper()
        if user_input == 'Y':
            print("게임을 계속합니다!")
            start_game()
            break
        elif user_input == 'N':
            print("게임을 종료합니다.")
            break
        else:
            print("잘못된 입력입니다. Y 또는 N을 입력하세요.")
start_game()

 

 

깃허브에 올리고 설명 주석을 달다보니까 마지막에 스타트 게임이 두번 호출되는? 재귀 호출이 맘에 안들어서 다시 수정하게 되었다.

 

[ 3번째 코드 ]

import random
def start_game():
    while True:  
        chosen_number = random.randint(1, 10)
        print("=== 숫자 맞추기 게임 ===")
        print(f"1과 10 사이의 숫자를 하나 정했습니다.\n이 숫자는 무엇일까요?")

        user_number = int(input("예상 숫자 : "))
        while True:
            if user_number < chosen_number:
                print("너무 작습니다. 다시 입력하세요.")
                user_number = int(input("예상 숫자 : "))
            elif user_number > chosen_number:
                print("너무 큽니다. 다시 입력하세요.")
                user_number = int(input("예상 숫자 : "))
            else:
                print("정답입니다!")
                break

        user_input = input("계속 하시겠습니까? (Y/N): ").upper()
        if user_input == 'N':
            print("게임을 종료합니다.")
            break  
        elif user_input != 'Y':
            print("잘못된 입력입니다. Y 또는 N을 입력하세요.")

start_game()

 

생각해보니까 사용자가 숫자대신 다른걸 입력했을 때를 대비한 코드가 없다는 것을 발견했다.

하지만 월요일 수업을 위해 누워야하기 때문에... 일단 여기까지 하고 월요일에 과제 2와 3을 하고 다시 생각해봐야겠다.

 

아마따 튜터님이 plug, try, except에 대해 알려줬는데 월요일에 그것도 알아봐야한다! 

 

개인 사정으로 본가에 내려와서 일주일 있어야하는디 컴터가 없어서 장비대여를 했다.

근데 하필 맥북이라 주말 내내 맥북에 파이썬 관련 프로그램을 열심히 깔고, 익숙해지기 위해 이것저것 눌러봤다ㅠㅠ

맥북은 왜 딜리트키가 없고, 홈키도 안보이고, 한영키는 왜 캡스락 키고, 컨트롤 어쩌구에 익숙한 나는 알트로 복붙하는게 상당히 헷갈린다...

 

LIST