출처 : 반크_세계유산 창덕궁
문제]
1~100000 사이의 수를 무작위로 발생하여 더하기 문제를 해결하는 게임을 만드시오.
조건)
▶ 단계를 입력하도록 하시오.
▶ 단계는 1~11단계로 하시오.
▶ 단계를 잘못 입력하면 에러 메세지를 출력하고 다시 입력하도록 하시오.
▶ 11단계는 1~100000 사이의 무작위 자연수로 하시오.
▶ 1단계는 1~9까지의 수 조합으로,
2~3단계는 1~100까지 수 조합으로,
4~6단계는 1~1000까지의 수 조합으로,
7~9단계는 1~10000까지의 수 조합으로,
10단계는 1~50000까지의 수 조합으로
그리고 11단계는 1~100000까지의 수 조합으로 문제를 출력하시오.
▶ 각 단계별 5문제를 맞추면 다음 단계로 진행하도록 하시오.
▶ 출제된 문제를 맞추면 "짝짝짝! 정답입니다."를
맞추기 못하면 "아까비! 집중 화이팅!!"을 출력하도록 하시오.
▶ 각 단계를 진행할 때 계속 작업여부를 묻도록 하시오.
▶ 게임을 종료하면 그 때까지 출제된 총 문제와 맞춘 개수를 출력하시오.
▶ 그외 출력 예를 참조하시오.
출력 예)
문제의 단계는 1~11단계로 풀어갈 수 있습니다.
자유롭게 문제를 해결하고 싶으면 11단계를 입력하세요.
몇 단계를 시작할까요? 1
1단계 게임을 진행합니다.
8 + 1 = 9
짝짝짝! 정답입니다.
4 + 7 = 11
짝짝짝! 정답입니다.
3 + 2 = 5
짝짝짝! 정답입니다.
2 + 2 = 4
짝짝짝! 정답입니다.
8 + 3 = 11
짝짝짝! 정답입니다.
계속하시겠습니까?(Y/N) y\
2단계 게임을 진행합니다.
61 + 98 = 159
짝짝짝! 정답입니다.
34 + 88 = 122
짝짝짝! 정답입니다.
87 + 9 = 96
짝짝짝! 정답입니다.
9 + 17 = 26
짝짝짝! 정답입니다.
10 + 93 = 103
짝짝짝! 정답입니다.
계속하시겠습니까?(Y/N) n
종 10문제 중 10개를 맞추었습니다.
수고하셨습니다.
참고풀이]
#5문제씩 출력하면 난위도를 1단계씩 높여가가 총 10단계.
import random
#문제를 만든는 함수
def Questions(n):
global tot, cnt
if n==11:
m=100000
elif n>=10:
m=50000
elif n>=7:
m=10000
elif n>=4:
m=1000
elif n>=2:
m=100
else:
m=9
x=random.randint(1,m)
y=random.randint(1,m)
tot+=1
#발생된 수로 더하기 문제를 내어
#결과값을 입력하도록 한다.
xy=int(input(str(x)+" + "+str(y)+" = "))
#게임어가 입력한 값이 맞는 체크한다.
if xy==x+y:
cnt+=1
print("짝짝짝! 정답입니다.")
else:
print("아까비! 집중 화이팅!!")
#계속여부 체크함수
def GoEnd():
global cnt
#맞춘 개수가 5의 배수이면
#게임계속여부를 체크한다.
#print("\nGoEnd!")
ch='y'
if cnt>0 and cnt%5==0:
while True:
ch=input("계속하시겠습니까?(Y/N) ")
if ch.upper()=='Y' or ch.upper()=='N':
break;
print("Y/y/N/n만 입력하세요.")
print("다시 입력하세요...\n")
if ch.upper()=='N':
return True
else:
return False
#단계를 선택하도록 한다.
print("문제의 단계는 1~11단계로 풀어갈 수 있습니다.")
print("자유롭게 문제를 해결하고 싶으면 11을 입력하세요.")
while True:
N=int(input("몇 단계부터 시작할까요? "))
if 1<=N<=11:
break
print("^^")
print("잘못 입력하였습니다.")
print("단계는 1~11단계까지만 있습니다.")
print("다시 입력하여 주세요.")
print()
tot=0 #총 발생된 문제의 수 세는 변수. 초기는 0으로 셋팅한다.
cnt=0 #맞춘 개수를 세는 변수. 초기는 0으로 셋팅한다.
if N==11:
#free로 문제를 구상한다. 10단계 문제를 출력한다.
for step in range(10):
print(f"{step+1}단계 게임을 진행합니다.")
#각단계별 5문제를 출력한다.
for i in range(5):
Questions(N)
#계속여부 체크한다
yn=GoEnd()
if yn:
break
print()
yn=False
else:
chk=0
step=N-1
while True:
chk+=1 #진행된 단계를 체크한다.
if chk>10: break #10단계까지만 작업하게 한다.
print(f"{chk+step}단계 게임을 진행합니다.")
if chk<10-N:
for i in range(5):
Questions(chk+step)
else:
for i in range(5):
Questions(step+1)
yn=GoEnd()
if yn:
break
print()
yn=False
print(f"\n총 {tot}문제 중 {cnt}개를 맞추었습니다.")
print("수고하셨습니다.")
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 겨울
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 89제] 어파처! p170 응용문제 1. (1) | 2022.09.19 |
---|---|
Python 88제] 어파처! p170 도전문제 (2) | 2022.09.19 |
Python 86제] 초등학교 더하기 문제, 게임으로 공부하기 ver 1. (0) | 2022.09.07 |
Python 85제] 어파처 p169 응용문제 (0) | 2022.08.26 |
Python 84제] 어파처 p169 도전문제 (0) | 2022.08.26 |
댓글