관리 메뉴

프로그래밍 삽질 중

모두의 파이썬 - Day 14 계산 맞히기 게임 만들기 본문

과거 프로그래밍 자료들/python

모두의 파이썬 - Day 14 계산 맞히기 게임 만들기

평부 2022. 9. 13. 16:03

https://thebook.io/007026/day14/

 

모두의 파이썬: 20일 만에 배우는 프로그래밍 기초(개정판): DAY 14 계산 맞히기 게임 만들기

 

thebook.io

 

[조건 1]

덧셈, 뺄셈, 곱셈 임의로 만듦

계산해서 값 넣으면 오답인지 정답인지 알려줌

다섯 번 반복해서 전체 정답 수 알려줌

1. 사용자에게 제시할 계산 문제를 만드는 경우
필요한 숫자 2개 생성, 덧셈(1), 뺄셈(2), 곱셈(3)
2. 메인 프로그램 : 정답인지 오답인지 결과를 알려줌
 
 

[조건 1 코드]

import random

def make_question():
    a = random.randint(1, 10)
    b = random.randint(1, 10)
    op = random.randint(1, 4)

    # 첫 번째 숫자를 q에 저장
    q = str(a)  # a값을 문자열로 저장

    if op == 1:
        q = q + "+"
    if op == 2:
        q = q + "-"
    if op == 3:
        q = q + "*"

    # 두 번째 숫자 q에 저장
    q = q + str(b)  # b값을 문자열로 저장

    return q


sc1 = 0  # 정답 횟수
sc2 = 0  # 오답 횟수

for x in range(5):
    q = make_question()
    print(q)
    ans = input("=")  # 사용자에게 정답을 입력받음
    r = int(ans)

    if eval(q) == r:
        print("정답!")
        sc1 = sc1 + 1
    else:
        print("오답!")
        sc2 = sc2 + 1

print("정답 : ", sc1, "오답 :", sc2)

if sc2 == 0:
    print("당신은 천재입니다!")

 

 

[조건 2]

- 조건 1에서 나눗셈을 추가하면?

▶ 정답 입력 시 int 값 대신 float값이 들어갈 것

<문제점> 5/2 = 2.5와 같이 정확히 떨어지는 값은 정답으로 인정되나 7/3=2.33333같은 값은 2.3이나 2.33이나 입력해도 오류가 나옴

▷ 컴퓨터가 계산한 값도 소수 둘째자리(예: 2.33)까지만 받고 사용자가 입력하는 값도 소수 둘째자리를 넘더라도 둘째 자리만 들어가게 만들기(예: 2.33333333을 입력해도 2.33만 들어가게 하기)

 

 

[나눗셈을 추가할 때 원하는 출력값]

[문제 = 컴퓨터가 제시한 문제] 9 / 7

[정답을 입력하세요 = 사용자가 입력한 값] 1.28571

[입력한 값 = 사용자가 입력한 값에서 자동으로 소수 둘째 자리만 값 나오게 함] 1.29

[답은 = 정답도 계산은 소수점이 많이 나와도 값은 소수 둘째 자리만 나오게 하기] 1.29

 

 

[출력되는 값 : 5번 모두 정답을 맞춘 경우]

 

[출력되는 값 : 5번 기회 중 정답과 오답이 섞여 있는 경우]

 

 

[조건 2 코드]

import random

# 덧셈, 뺄셈, 곱셈, 나눗셈 임의로 만듦
# 계산해서 값 넣으면 오답인지 정답인지 알려줌
# 다섯 번 반복해서 전체 정답 수 알려줌

# 1. 사용자에게 제시할 계산 문제를 만드는 경우
# 필요한 숫자 2개 생성, 덧셈(1), 뺄셈(2), 곱셈(3), 나눗셈(4)

# 2. 메인 프로그램 : 정답인지 오답인지

def make_question():
    a = random.randint(1, 10)
    b = random.randint(1, 10)
    op = random.randint(1, 4)

    # 첫 번째 숫자를 q에 저장
    q = str(a)  # a값을 문자열로 저장

    if op == 1:
        q = q + "+"
    if op == 2:
        q = q + "-"
    if op == 3:
        q = q + "*"
    if op == 4:
        q = q + "/"

    # 두 번째 숫자 q에 저장
    q = q + str(b)  # b값을 문자열로 저장

    return q

sc1 = 0  # 정답 횟수
sc2 = 0  # 오답 횟수

for x in range(5):
    q = make_question()
    print(q)
    ans = input("정답을 입력하세요 : ")  # 사용자에게 정답을 입력받음
    r = float(ans)
    print("입력한 값", round(r, 2))

	# 컴퓨터가 검사한 값도 사용자가 입력한 값도 모두 소수 둘째 자리만 넘어가게 함
    if round(eval(q), 2) == round(r, 2):
        print("답은 ", round(eval(q), 2))
        print("정답!")
        sc1 = sc1 + 1
    else:
        print("답은 ", round(eval(q), 2))
        print("오답!")
        sc2 = sc2 + 1

print("정답 : ", sc1, "오답 :", sc2)

if sc2 == 0:
    print("당신은 천재입니다!")