파이썬 첫 번째 개인과제는 업다운 게임을 만드는 것
만들어야 할 프로그램에는 다음과 같은 기능을 포함해야 했다
- 컴퓨터는 1부터 100 사이의 랜덤한 숫자를 생성
- 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 '업' 또는 '다운' 힌트를 제공
- 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려줌
- 플레이어가 숫자를 맞힐 때까지 위의 과정을 반복
위 조건을 만족하는 프로그램을 짜는 것은 크게 어렵지 않았다
import random
computer = random.randint(1, 100)
while True:
player = int(input("숫자를 입력하세요 : "))
if player == computer:
print("맞았습니다.")
break
elif player > computer:
print("다운")
else:
print("업")
이렇게 실행하게 되면
위의 사진처럼 터미널에서 업다운 게임을 할 수 있다.
이렇게 기본적인 과제를 완성한 후에 추가 도전 과제를 시도했다
추가 도전 과제의 내용은 다음과 같다
- 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도할 것
- 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가할 것
- 게임이 종료될 때 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이름 표시하는 기능을 구현할 것
위에 짠 코드를 함수로 만든 후에,
추가 도전 과제를 시작했다
1번 도전과제 또한 크게 어렵지 않게 해결할 수 있었다.
import random
computer = random.randint(1, 100)
player = int(input("숫자를 입력하세요 : "))
while True:
if player in range(1,101):
if player == computer:
print("맞았습니다.")
break
elif player > computer:
print("다운")
else:
print("업")
else:
print("1부터 100사이의 수를 입력하세요")
player = int(input("숫자를 입력하세요 : "))
이런 식으로 코드를 작성하였다
그리고 터미널에서 실행하면
이런 결과를 얻을 수 있다
문제는 두 번째 도전과제에서 있었다.
처음에는 위에 짠 코드를 game() 이라는 함수로 만들어 준 후에
while True:
game()
retry = input("다시 하시겠습니까? (y/n) : ")
if retry != 'y':
print("게임을 종료합니다")
break
else:
game()
위와 같은 코드를 만들어 실행했는데
사실 정상적으로 작동하는 줄 알았으나
실제로 실행해본 결과
위의 그림처럼 한 번만 묻는 오류가 있었다.
그래서 이리저리 구글링을 해 보니 continue를 사용하면 반복문의 처음으로 가서 실행한다는 답을 얻을 수 있었다
마지막 줄의 game()을 지우고 continue로 작성한 후에 정상적으로 작동하는 것을 확인했다.
그리고 마지막 3번 과제는 game() 함수에서 cnt라는 시도 횟수를 저장 할 변수를 만들고
game 안에 있는 반복문을 돌 때마다 cnt를 업데이트 해 주었다
그리고 game의 반환 값으로 cnt를 주었다
def game():
computer = random.randint(1, 100)
player = int(input("숫자를 입력하세요 : "))
cnt = 0
while True:
if player in range(1, 101):
cnt += 1
if player > computer:
print("다운")
elif player < computer:
print("업")
else:
print("맞았습니다")
print(f"시도한 횟수 : {cnt}")
break
else:
print("1부터 100 사이의 수를 입력하세요")
player = int(input("숫자를 입력하세요 : "))
return cnt
위와 같이 함수를 수정해 준 후에
각각의 시도를 저장할 count 라는 리스트를 만들어주고
한 번의 게임이 끝나면 count에 cnt를 추가했다
그리고 게임을 다시 시도하지 않을 때 count 리스트에 있는 가장 작은 값을 보여주도록 했다
count = []
while True:
g = game()
count.append(g)
retry = input("다시 하시겠습니까? (y/n) : ")
if retry != 'y':
print("게임을 종료합니다")
break
else:
print(f"이전 게임 플레이어 최고 시도 횟수 : {min(count)}")
continue
이렇게 코드를 완성했다!
완성된 코드를 실행하면
모두 정상작동을 한다!
두 번째 도전과제를 작성하면서 저 간단한 continue 하나를 놓쳐서 이것저것 하다가 구글링을 했는데
왜 진작 구글링을 안 했을까....
이 코드에서 부족한 부분이 있다면 아마 retry 값에 y 이외의 답이 들어오면 모두 게임을 종료하는 것이다
안내 메세지로 잘못된 입력이라 게임을 종료한다를 추가하거나
try except를 사용해 예외처리를 했으면 더 좋은 프로그램이 되었을 지도 모르겠다!
https://github.com/duswo3o/sparta_task/blob/main/UpDownGame.py
'[내일배움캠프]스파르타코딩클럽 AI 웹개발 > Today I Learned' 카테고리의 다른 글
[내일배움캠프 09일차 TIL] 파이썬에서 클래스 이해하기 (0) | 2024.07.04 |
---|---|
[내일배움캠프 08일차 TIL] ASCII(아스키코드) with python (0) | 2024.07.03 |
[내일배움캠프 06일차 TIL] 비밀번호 해싱 with hashlib in python (0) | 2024.07.01 |
[내일배움캠프 05일차] 패킹과 언패킹 (0) | 2024.06.28 |
[내일배움캠프 04일차 TIL] requests & beautifulsoup (0) | 2024.06.27 |