본문 바로가기
프로그래밍/파이썬

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

by Tilog 2021. 11. 25.
728x90
반응형

 

모두의 파이썬 14번 째 시간!

오늘부터 'DAY 18' 까지는 프로젝트를 만든다.

그 첫 번째 시간 '계산 맞히기 게임'

만들어보는 시간을 가져보겠다!

 

계산 문제를 맞히는 게임

계산 문제를 맞히는 게임

먼저 사용자에게 연산 문제들을 랜덤으로 제시하기 위해 'random'을 import해주도록 하자.

그 다음 'make_question'함수를 사용하고, 'a+b'와 같은 방식으로 계산을 해줄 것 이기 때문에

a와 b변수를 선언해준 뒤 a는 1부터 40, b는 1부터 20까지 랜덤한 수를 저장하게 명령어를 적는다.

그리고 변수 op는 '덧셈,뺄셈,곱셈'중 어떤 연산을 해야할지를 결정하는 변수이다.

여기서 나눗셈은 제외했는데 소수점을 입력받고 체크해야 하므로 제외했다고 책에 적혀있다.

계산 문제를 맞히는 게임

a에서 랜덤으로 나온 수를 변수 'q'에 문자열로 바꾸어 저장한다.

그리고 이제 문제를 낼것인데, op가 1이면 덧셈, 2이면 뺄셈, 3이면 곱셈 

문제를 내도록 명령어를 적는다.

 

그리고 연산자를 추가해준다.

 

op가 1일 때 ▶ q는 q와 "+"라는 문자열을 함께 변수값으로 가진다.

op가 2일 때 ▶ q는 q와 "-"라는 문자열을 함께 변수값으로 가진다.

op가 3일 때 ▶ q는 q와 "*"라는 문자열을 함꼐 변수값으로 가진다.

 

계산 문제를 맞히는 게임

이번에는 b도 마찬가지로 문자열의 형태로 바꾸어 q에 추가해준다.

그리고 return을 사용하여 문제를 결괏값으로 돌려준다.

 

 

계산 문제를 맞히는 게임

총 5개의 문제를 출제할것 이고, 5문제를 풀면서 정답과 오답 갯수를 체크하여

마지막에 문제를 다 풀었을 때 화면에 출력할 예정이므로 정답과 오답 갯수를 체크해줄 

변수 'sc1'과 'sc2'을 '0'으로 선언해준다.

그리고 반복문 'for'을 사용하여 '5번' 반복해준다.

위에서 만들어둔 함수 'make_question()'을 변수 q의 값으로 지정하면 

문제가 만들어진다. 그리고 print로 문제를 출력해주고 

'ans'라는 답을 입력받을 변수를 만들어준다.

그리고 ans의 값을 정수로 변환시켜줄 변수 'r'도 선언한다.

 

여기까지 문제 출제는 완료되었고

마지막엔 유저가 계산한 답이 정답과 맞거나 틀릴경우 

정답, 오답 문구를 출력하고 화면에 보여줄 총 정답,오답 수를 구해보자.

 

eval

 그전에 'eval이라는 함수를 알아볼건데

대화형 셸(IDLE)에 3+5라고 입력을 하면 8이 뜨고

"3+5"라고 입력을 하면 3+5가 그대로 출력이 된다.

이때 문자열로 출력이 된 두 번째 3+5를 첫 번째와 같이

8로 출력해줄 때 사용하는 함수가 바로 'eval'이다.

 

 

계산 문제를 맞히는 게임

if문을 써줄건데 q(문제)가 r(유저가 입력한 답)과 일치하는지 틀린지에 따라

정답과 오답을 출력하고 오답과 정답의 갯수를 세줄 것 이다.

먼저 문자열 "a+b"를 a+b로 덧셈연산을 시켜줘야 하므로

'eval' 함수를 사용하여 q의 값이 r과 같은지 확인해주고

만약 같다면 '정답!'을 출력함과 동시에 정답 갯수 체크 변수인

'sc1'의 값을 'sc1 + 1'로 해주어 누적될 수 있게 해준다.

오답의 경우도 마찬가지로 해준다.

 

eval을 뺐을 경우

'eval'함수를 빼버리면 정답을 입력해도 오답이라고 뜬다.

내 생각엔 '2*8'을 연산이 아닌 '문자열'로 인식해서 그런 것 같다.

그런데 내 생각이 맞다면 아예 오류가 떠야하는게 아닌가... 싶다.

 

결과

정상 작동 했을 때의 결과이다.

 

마치며...

사실 오늘편은 좀 이해가 안 가는 편이였다.

내용 이해가 말이다. 특히 변수 q의 값이 너무 이리저리 바뀌어서

내 머리속이 너무나도 혼란스럽다 ㅠㅠ... 

 

아 누가 옆에 붙어서 처음부터 끝까지 차근차근 설명해줬으면 좋겠다.

뭐가 이해가 안 되냐고 나에게 물어본다면 대답을 못 하겠다...

이 상황이 너무나 화가 난다 ㅠㅠ...

 

1. q = str(a) + str(b) 로 이미 문제는 완성됐는데 왜 그걸 q로 다시 return 시키는지...

 

 

(좌) 오류 / (우) 정상

  2.  'q = q + str(b)'가 왼쪽 사진과 같이 위치하면 오류가 나는지

 

 

 

 

 

.

.

.

 

이해가 안 되는 점은 많지만

책에서도 그냥 대략적인 구조만 알려줄 뿐

위에 서술한 궁금증들 처럼 상세히 알려주진 않는다.

뭐 다회독 하다보면 이해가 가려나...?

일단 오늘은 여기서 끝.

 

728x90
반응형

댓글


#네이버 애널리틱스 ▼