728x90
이 게임은 랜덤 함수를 사용하여 4번의 기회 안에 1부터 20 사이의 정수를 맞히는 게임인데요.
import random
ans = random.randint(1,20)
for i in range(4,0,-1):
user = int(input(f"기회가 {i}번 남았습니다. 1-20 사이의 숫자를 맞혀 보세요: "))
if(user == ans):
print(f"축하합니다. {4-i+1}번 만에 숫자를 맞히셨습니다.")
break
elif (user > ans):
if (i == 1):
print(f"아쉽습니다. 정답은 {ans}였습니다.")
break
print("Down")
else :
if (i == 1):
print(f"아쉽습니다. 정답은 {ans}였습니다.")
break
print("Up")
기능 추가 1
저는 처음 정수와 마지막 정수도 정하고 싶고,
기회도 시작과 끝 사이의 개수에 따라 균등하게 주고 싶었습니다.
그래서 처음 정수와 마지막 정수를 파라미터로 받는 num_game 함수를 만들었습니다.
import random
def num_game(first_num, last_num):
ans = random.randint(first_num, last_num)
chance = (last_num - first_num + 1) // 5
if chance == 0:
chance = 1
for i in range(chance, 0, -1):
user = int(input(f"기회가 {i}번 남았습니다. {first_num}-{last_num} 사이의 숫자를 맞혀 보세요: "))
if(user == ans):
print(f"축하합니다. {chance - i + 1}번 만에 숫자를 맞히셨습니다.")
break
elif (user > ans):
if (i == 1):
print(f"아쉽습니다. 정답은 {ans}였습니다.")
break
print("Down")
else :
if (i == 1):
print(f"아쉽습니다. 정답은 {ans}였습니다.")
break
print("Up")
기회는 (마지막 정수 - 처음 정수 + 1)을 5로 나눈 몫만큼 주는 것으로 하였습니다.
만약 기회가 (마지막 정수 - 처음 정수 + 1)이 5보다 작으면 1번의 기회를 주는 것으로 하겠습니다.
예시>
num_game(2, 18)
출력>
기회가 3번 남았습니다. 2-18 사이의 숫자를 맞혀 보세요: 7
Up
예시>
num_game(1,4)
출력>
기회가 1번 남았습니다. 1-4 사이의 숫자를 맞혀 보세요: 3
기능 추가 2
만약 처음 정수와 마지막 정수 사이의 값이 아닌 정수를 넣으면 다시 입력하라고 출력을 하겠습니다.
그리고 사용자가 입력 시에 정수가 아닌 소수나 문자열을 넣게 되면 오류가 날 것 같습니다.
try catch 문을 사용하여 정수만 받겠습니다.
파이썬 예외 처리
Try catch문 사용
Try부분: 할 일을 적기
except 부분: try부분에서 예외가 발생할 상황에 실행할 일
else 부분: except 발생이 아닐 때 실행할 일
finally: 예외가 발생하든 안하든 꼭 실행하고 넘어감
파이썬 예외(에러) 종류 9가지
1. SyntaxError : 잘못된 문법 사용
2. NameError : 참조변수 없음(변수 선언x)
3. ZeroDivisionError : 0으로 나눌 수 없음
4. IndexError : 인덱스 범위 넘어감
5. ValueError : 해당 참조 값이 없음, 값의 형식이 잘못됨
6. KeyError : 키 없음(딕셔너리에서 없는 key 값 호출)
7. AttributeError : 모듈, 클래스의 잘못된 속성 사용(엉뚱한 함수 사용)
8. FileNotFoundError : 파일 못찾음(해당 경로 파일 없음)
9. TypeError : 타입 안맞음(연산하는데 데이터의 타입이 잘못됨)
https://hleecaster.com/python-exception/
https://blockdmask.tistory.com/550
저는 그렇다면 ValueError 를 사용해야겠네요.
import random
def num_game(first_num, last_num):
ans = random.randint(first_num, last_num)
chance = (last_num - first_num + 1) // 5
if chance == 0:
chance = 1
i = chance
while i > 0:
try:
user = int(input(f"기회가 {i}번 남았습니다. {first_num}-{last_num} 사이의 숫자를 맞혀 보세요: "))
except ValueError:
print("정수가 아닙니다. 다시 시도하세요")
else:
if(user == ans):
print(f"축하합니다. {chance - i + 1}번 만에 숫자를 맞히셨습니다.")
break
elif (user > ans):
if (i == 1):
print(f"아쉽습니다. 정답은 {ans}였습니다.")
break
print("Down")
else :
if (i == 1):
print(f"아쉽습니다. 정답은 {ans}였습니다.")
break
print("Up")
i -= 1
예시>
num_game(1,10)
출력>
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: da
정수가 아닙니다. 다시 시도하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: 4.4
정수가 아닙니다. 다시 시도하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: 11
1-10 사이의 숫자를 입력하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: -9
1-10 사이의 숫자를 입력하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: 4
축하합니다. 1번 만에 숫자를 맞히셨습니다.
'Python' 카테고리의 다른 글
Python에서 엑셀, csv 다루기 (1) | 2024.01.13 |
---|---|
웹 스크래핑 (1) | 2024.01.13 |
알고리즘 패러다임 (0) | 2023.11.18 |
[Python] 재귀함수를 이용한 리스트 최대, 최소 값 찾기 (0) | 2023.09.16 |
[Python] 1부터 n까지 원하는 값의 개수 찾기 (0) | 2023.05.25 |