8일차 연습문제1-1

송용진·2024년 2월 28일
'''
random
사용자가 입력한 숫자 범위(예: 1에서 100) 내에서 랜덤한 숫자를 생성하고, 
사용자가 이 숫자를 맞추는 간단한 숫자 맞추기 게임을 만들어보세요.
'''
import random

while True:    
    user_num = input("숫자 범위 입력(1부터 100까지 입력가능) : ")

    # 입력값이 정수인지 확인
    if not user_num.isdigit():
        print("문자가 아닌 숫자를 입력해주세요.")
        continue
    
    user_num = int(user_num)
    # 입력값이 1부터 100까지의 수인지 확인
    if user_num < 1 or user_num > 100:
        print("입력한 수는 1에서 100까지의 수가 아닙니다.")
        continue   

    ans = random.randint(1,user_num+1)
    break
    # print(ans)

while True:

    prediction = input("숫자를 맞춰보세요 : ")

    # 입력값이 정수인지 확인
    if not prediction.isdigit():
        print("문자가 아닌 숫자를 입력해주세요.")
        continue
    
    prediction = int(prediction)

    # 입력값이 1부터 user_num까지의 수인지 확인
    if prediction < 1 or prediction > user_num:
        print(f"입력한 수는 1에서 {user_num}까지의 수가 아닙니다.")
        continue
    # print(prediction)
    
    if prediction == ans:
        print("정답")
        break
    elif prediction > ans:
        print("down")
    else:
        print("up")

당신의 코드는 이미 잘 작성되어 있지만, 몇 가지 사소한 수정사항이 있습니다.

  1. random.randint(1,user_num+1)에서 random.randint(1,user_num)로 변경하면 더욱 정확하게 작동합니다. randint 함수는 두 번째 인자를 포함한 숫자를 반환하기 때문에 user_num+1은 범위 초과를 뜻합니다.

  2. 사용자가 입력한 숫자 범위를 확인하는 부분과 숫자를 맞추는 부분을 별도의 함수로 분리하면 코드의 가독성을 향상시킬 수 있습니다.

아래는 수정한 코드입니다:

import random

def get_user_num():
    while True:    
        user_num = input("숫자 범위 입력(1부터 100까지 입력가능) : ")

        # 입력값이 정수인지 확인
        if not user_num.isdigit():
            print("문자가 아닌 숫자를 입력해주세요.")
            continue

        user_num = int(user_num)
        # 입력값이 1부터 100까지의 수인지 확인
        if user_num < 1 or user_num > 100:
            print("입력한 수는 1에서 100까지의 수가 아닙니다.")
            continue   

        return user_num

def guess_number(user_num):
    ans = random.randint(1,user_num)

    while True:
        prediction = input("숫자를 맞춰보세요 : ")

        # 입력값이 정수인지 확인
        if not prediction.isdigit():
            print("문자가 아닌 숫자를 입력해주세요.")
            continue

        prediction = int(prediction)

        # 입력값이 1부터 user_num까지의 수인지 확인
        if prediction < 1 or prediction > user_num:
            print(f"입력한 수는 1에서 {user_num}까지의 수가 아닙니다.")
            continue

        if prediction == ans:
            print("정답")
            break
        elif prediction > ans:
            print("down")
        else:
            print("up")

def main():
    user_num = get_user_num()
    guess_number(user_num)

if __name__ == "__main__":
    main()

이 코드는 당신의 원래 코드의 목적을 충실히 수행하면서 가독성과 유지 보수성을 향상시켰습니다. 함수를 사용함으로써 각각의 작업을 더욱 명확하게 구분할 수 있습니다.

profile
개발자

0개의 댓글