Python project for beginners : Number Guessing

GYUBIN ·2021년 9월 10일
0

Python으로 도대체 무엇을 할 수 있는지 문법만으론 알 수 있는 것이 없기에 Python project도 같이 진행해보려한다
beginners부터 쭉 해보자!

Number Guessing

이번에 만들고 싶은 project는 숫자 맞추기로 스무고개 형식으로 진행이 된다
총 20번의 기회가 주어지고 사용자가 입력한 숫자에 따라 작다 / 크다 가 출력되도록 만들어보자

1. 숫자 정하기

게임에서 정답이 될 숫자를 정해준다
게임을 할 때마다 랜덤하게 숫자가 출력되어야하니 random 모듈을 사용하면 된다

import random
Number = random.randint(1, 99)
#실제로 실행 할 때마다 다른 숫자가 출력되는지 알고싶다면
#print(Number)를 입력하고 Run 해보자 ! 1~99사이의 숫자가 무작위로 계속 출력되는 것을 볼 수 있다

2. 게임 설명하기

1번과 순서가 바뀌어도 상관 없다
사용자가 어떤 게임을 진행하고 있는지 설명해주면 된다

print("Game Start !\n1부터 99사이의 숫자를 맞춰보세요")
print("--------------------------------")
print("숫자를 입력해주세요. 기회는 20번 입니다!")

3. 반복문 사용하기

3.1 for문 사용

반복문을 사용하여 숫자 맞추기 게임을 만들어보자
여기서는 for반복문을 이용해 range(19) 를 주어 20번의 기회를 설정하겠다

for i in range(19):
  guess_number = int(input())

guess_number라는 변수로 사용자가 입력한 숫자를 받아온다
그리고 사용자가 어떤 숫자를 입력했는지 친절하게 다시 알려줘보자

for i in range(19):
  guess_number = int(input())
  print(f"입력한 숫자 : {guess_number}")

3.2 if문 사용

for문 안에서 if문을 사용해 사용자가 입력한 숫자가 정답보다 큰지 작은지를 알려줘보자

  if guess_number > Number:
    print("더 작은 수를 입력해주세요.")
  elif guess_number < Number:
    print("더 큰 수를 입력해주세요.")
  else:
    break

입력한 숫자가 정답과 같다면 for반복문을 종료시켜야 하기때문에 else: break를 작성했다
하지만 여기서 코드작성이 끝난다면 정답을 맞춰도 맞춘건지 확실히 알 수도 없고 재미도 없다

정답을 맞추면 축하메시지를, 기회를 모두 소비했으면 정답을 알려주는 코드를 추가해보자

if guess_number == Number:
  print("정답입니다!")
else:
  print(f"기회를 모두 사용하셨네요.. 정답은 {Number}입니다.")

4. 완성

지금까지 작성한 코드를 모두 합쳐서 실제로 게임을 해보자

import random
Number = random.randint(1, 99)


print("Game Start !\n1부터 99사이의 숫자를 맞춰보세요")
print("--------------------------------")
print("숫자를 입력해주세요. 기회는 20번 입니다!")

for i in range(19):
  guess_number = int(input())
  print(f"입력한 숫자 : {guess_number}")

  if guess_number > Number:
    print("더 작은 수를 입력해주세요.")
  elif guess_number < Number:
    print("더 큰 수를 입력해주세요.")
  else:
    break

if guess_number == Number:
  print("정답입니다!")
else:
  print(f"기회를 모두 사용하셨네요.. 정답은 {Number}입니다.")

게임을 진행해보면 이렇게 된다

이렇게 숫자 맞추기 게임을 만들어보았다

하지만 세상에는 정말 다양한 사람들이 있고 친절하게 숫자를 입력해주세요라고 적었음에도 숫자가 아닌 문자를 입력하는 경우도 있을 것이다
내가 만든 게임에 문자를 입력해보자

에러가 발생하면서 코드가 바로 종료되어 버린다
숫자가 아닌 것을 입력했을 때 코드를 종료시키지도 않고 다시 한 번 친절하게 숫자를 입력해달라고 말할 수 있는 방법이 있을까?

그럴 땐 try,except를 사용하면 된다

5. try, except

try,except를 사용하면 에러가 발생했을 때 코드를 멈추지 않고 계속 실행시킬 수 있다

for i in range(19):
  try:
    guess_number = int(input())
    print(f"입력한 숫자 : {guess_number}")

    if guess_number > Number:
      print("더 작은 수를 입력해주세요.")
    elif guess_number < Number:
      print("더 큰 수를 입력해주세요.")
    else:
      break
  except:
    print("숫자를 입력해주세요 !")

문자를 입력해도 코드가 계속 실행되는 것을 볼 수 있다

하지만 여기서도 문제점이 하나 발생한다
for문으로 반복하는 횟수를 정해주고 그 안에서 try,except가 사용되기 때문에 문자를 입력한 경우도 횟수에서 차감이 된다
사진 상 게임을 계속 진행하면 숫자를 입력할 수 있는 기회는 20번이 아닌 18번이 되는 것이다
이를 해결하기 위해서는 for문이 아니라 while문을 사용하여 i=0 while i<20:조건에서 try가 실행될 때만 i+=1해주면 된다

6. 최종본

import random
Number = random.randint(1, 99)


print("Game Start !\n1부터 99사이의 숫자를 맞춰보세요")
print("--------------------------------")
print("숫자를 입력해주세요. 기회는 20번 입니다!")

i = 0
while i < 20:
  try:
    guess_number = int(input())
    i += 1
    print(f"입력한 숫자 : {guess_number}")

    if guess_number > Number:
      print("더 작은 수를 입력해주세요.")
    elif guess_number < Number:
      print("더 큰 수를 입력해주세요.")
    else:
      break
  except:
    print("숫자를 입력해주세요 !")

if guess_number == Number:
  print("정답입니다!")
else:
  print(f"기회를 모두 사용하셨네요.. 정답은 {Number}입니다.")

간단한 기초문법을 이용해서 만든 게임이지만 단순히 문법 정답맞추기가 아닌 프로그램(이라고 불러도 되나..)을 만드는 것이다보니 더 재밌었던 것 같다

0개의 댓글