본문 바로가기
프로그램/Python 1000제

Python 87제] 난이도 있는 더하기 문제, 게임으로 공부하기 ver2.

by 건티 2022. 9. 10.
728x90

출처 : 반크_세계유산 창덕궁

 

문제]

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("수고하셨습니다.")

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도의 겨울

 

 

 

 

반응형

댓글