수학 게임 만들었는데 피드백 해주실 분?

24.02.15 18:15 작성 조회수 101

0

안녕하세요! 파이썬을 1달하고 15일 정도 공부한 사람인데요.

제가 블로그의 이벤트를 열기 위해서 파이썬으로 수학게임을 만들었는데,

실행할 때 잘못되는 버그는 없는지, 코드가 전부 정상적으로 잘 작동되는지,

한번 확인차 피드백을 받으려 합니다!

 

import time
import random
from threading import Timer

print("BFB PYTHON ENGINE ver.1.24.2")
time.sleep(2)
print("launching_[블루의 수학게임]...")
time.sleep(10)

n=30
o=0
x=0



def addgame(n1,n2):
    global o
    global x
    global n
    begin=time.time()
    an=int(input("{}+{}=".format(n1,n2)))
    end=time.time()
    if end-begin>10:
        print("시간 초과!")
        time.sleep(2)
        x=x+1
        n=n-1
    else:
        if an==int(n1)+int(n2):
            print("정답!")
            time.sleep(2)
            o=o+1
        else:
            print("오답!(정답은 {})".format(n1+n2))
            time,sleep(2)
            x=x+1
        n=n-1

def subgame(n1,n2):
    global o
    global x
    global n
    begin=time.time()
    an=int(input("{}-{}=".format(n1,n2)))
    end=time.time()
    if end-begin>10:
        print("시간 초과!")
        time.sleep(2)
        x=x+1
        n=n-1
    else:
        if an==int(n1)-int(n2):
            print("정답!")
            time.sleep(2)
            o=o+1
        else:
            print("오답!(정답은 {})".format(n1-n2))
            time,sleep(2)
            x=x+1
        n=n-1

def mulgame(n1,n2):
    global o
    global x
    global n
    begin=time.time()
    an=int(input("{}×{}=".format(n1,n2)))
    end=time.time()
    if end-begin>10:
        print("시간 초과!")
        time.sleep(2)
        x=x+1
        n=n-1
    else:
        if an==int(n1)*int(n2):
            print("정답!")
            time.sleep(2)
            o=o+1
        else:
            print("오답!(정답은 {})".format(n1*n2))
            time.sleep(2)
            x=x+1
        n=n-1




print("")
print("블루의 수학게임에 오신 걸 환영합니다!")
time.sleep(2)
print("이 게임은, 문제에 주어지는 연산을 풀어서, 답을 맞추는 수학 퀴즈 게임입니다!")
print("답은 10초 이내에 입력해야 하며, 10초를 넘기고 입력 시, 오답 처리됩니다!")
print("답을 입력하실 때는, 띄어쓰기 혹은 엔터를 누르지 마시고, 무조건 숫자로 입력해주세요!")
name=input("문제를 맞추실 분의 닉네임을 입력해주세요!")
mod=input("연산을 선택하세요! 덧셈/뺄셈/곱셈")
dif=input("난이도를 선택하세요! 쉬움/보통/어려움")
if dif=='쉬움':
    a=10
    b=10
elif dif=='보통':
    a=100
    b=10
elif dif=='어려움':
    a=100
    b=100
while n>0:
    if mod=='덧셈':
        li1=[]
        li2=[]
        for i in range(1,a):
            li1.append(i)
        k1=random.choice(li1)
        for j in range(1,b):
            li2.append(j)
        k2=random.choice(li2)
        game=addgame(k1,k2)
    elif mod=='뺄셈':
        li1=[]
        li2=[]
        for i in range(1,a):
            li1.append(i)
        k1=random.choice(li1)
        for j in range(1,b):
            li2.append(j)
        k2=random.choice(li2)
        if k1>=k2:
            game=subgame(k1,k2)
        else:
            game=subgame(k2,k1)
    elif mod=='곱셈':
        li1=[]
        li2=[]
        for i in range(1,a):
            li1.append(i)
        k1=random.choice(li1)
        for j in range(1,b):
            li2.append(j)
        k2=random.choice(li2)
        if dif=='어려움':
            game=mulgame(k1,random.randrange(11,20))
        else:
            game=mulgame(k1,k2)

print("축하합니다! 수학 게임의 {} 난이도 {} 문제를 전부 풀었습니다!".format(dif,mod))
time.sleep(3)
if o==30:
    print("문제를 전부 맞추셨군요! 상장을 드리겠습니다!")
    f=open("상장.txt",'w')
    data="[%s게임의 %s난이도를 전부 맞춘 것에 대한 %s님의 상장입니다!]\n" % (mod,dif,name)
    f.write(data)
    f.close()
else:
    print("맞은 문제의 개수는 {}개, 틀린 문제의 개수는 {}개 입니다!".format(o,x))
time.sleep(3)
print("수고하셨습니다! 안녕!")
time.sleep(10)

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.16

안녕하세요, 인프런 AI 인턴입니다.

kimexetrme0603님, 파이썬으로 수학 게임을 만드신 것 정말 멋진 도전이시네요! 현재 제공해주신 코드를 살펴보니 몇 가지 수정이 필요한 부분이 보입니다.

  1. time,sleep(2) 부분에서 컴마(,) 대신 마침표(.)로 수정해야 합니다. 올바른 구문은 time.sleep(2)입니다.

  2. subgame 함수 내에서 오답의 경우 정답을 출력하는 부분에서 print("오답!(정답은 {})".format(n1-n2))를 사용하셨는데, 변수 n1n2는 문자열로 캐스팅된 상태입니다. 올바르게 연산하기 위해선, 정수로 변환한 뒤에 연산을 수행해야 합니다. 따라서 format(int(n1)-int(n2))가 올바른 코드가 됩니다.

  3. 코드의 다른 부분에서도 수와 문자열의 연산이 진행되는 경우가 있습니다. format 함수 내에서 연산을 수행하실 때는 연산에 참여하는 변수들이 적절한 타입으로 변환되었는지 확인하셔야 합니다.

이 밖에도 사용자가 잘못된 형식으로 입력할 경우에 대한 예외 처리(예를 들어, 숫자가 아닌 문자열을 입력했을 때)를 추가하시면 더 견고한 프로그램이 될 것 같습니다. 예외 처리는 try...except 구문을 사용하여 입력받은 값이 정수로 변환 가능한지 확인하는 방법으로 구현하실 수 있습니다.

깔끔한 코드를 위해 변수명과 함수명을 좀 더 의미를 파악하기 쉽게 지으시는 것도 좋은 습관입니다. 예를 들어, ox보다는 correct_count, incorrect_count와 같이 의미가 명확한 이름을 사용합니다.

코드에 대한 피드백이 도움이 되었기를 바랍니다. 추가로 궁금하신 것이나 도움이 필요하신 부분이 있다면 언제든 문의해주세요. 프로그래밍 공부에 대한 열정이 멋진 결과물로 이어지기를 응원합니다! 화이팅입니다!

피드백 고맙습니다! 더욱 좋게 수정할 때 참고할게요!