'''
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")
당신의 코드는 이미 잘 작성되어 있지만, 몇 가지 사소한 수정사항이 있습니다.
random.randint(1,user_num+1)에서 random.randint(1,user_num)로 변경하면 더욱 정확하게 작동합니다. randint 함수는 두 번째 인자를 포함한 숫자를 반환하기 때문에 user_num+1은 범위 초과를 뜻합니다.
사용자가 입력한 숫자 범위를 확인하는 부분과 숫자를 맞추는 부분을 별도의 함수로 분리하면 코드의 가독성을 향상시킬 수 있습니다.
아래는 수정한 코드입니다:
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()
이 코드는 당신의 원래 코드의 목적을 충실히 수행하면서 가독성과 유지 보수성을 향상시켰습니다. 함수를 사용함으로써 각각의 작업을 더욱 명확하게 구분할 수 있습니다.