본문 바로가기

Manual

파이썬 pandas, 암기 프로그램(무작위 출제/채점)

목표_____

  • 암기해야 할 것을 반복해서 풀어볼 수 있도록 하자.
  • 암기할 내용은 텍스트 파일에 문제와 답으로 구분해 저장해 두고 읽어와서 사용
  • 불러올 텍스트 파일만 바꾸면 쉽게 다른 주제 암기에 사용할 수 있게 하자.
  • 틀렸을 때는 정답을 알려주어 암기할 수 있게 한다.
  • 암기 확인 문제가 같은 순서로 반복되면 문제와 답의 연관성 보다 답의 순서를 암기하기 쉬우므로 실행할 때마다 출제되는 문제의 순서가 달라지게 하자. 

 

결과_____

 

< 원소 기호 암기 프로그램 실행 화면 >

 

방법_____

1. 문제와 답이 들어 있는 텍스트 파일 읽어오기

= 문제와 답을 텍스트 파일로 만들기 =

  • 문제와 답이 들어 있는 텍스트 파일은 필요한 만큼 만들어 바꿔 사용하면 편리하다.
  • 텍스트 파일은 쉼표(,)로 구분해서 만들고, 빈칸 없이 이어서 써야 정답 확인 시 오류가 없다.
  • 예를 들어, 원소 기호를 암기하기 위해 원소 기호와 이름이 쉼표(,)로 구분되어 있는 텍스트 파일(element_name.txt)을 만든다.

< 문제와 답이 들어 있는 텍스트 파일 >

= pandas를 불러오고, 문제와 답이 있는 텍스트 파일을 읽어 데이터 프레임에 저장 = 

  • 텍스트 파일에서 문제는 'ask', 답은 'ans'로 칼럼 이름을 붙이고 읽어 
  • 데이터 프레임에 저장하고, 제대로 만들어졌는지 확인한다.
import pandas as pd
df = pd.read_csv('element_name.txt', header = None, names=['ask', 'ans'])
df

< 문제와 답이 'ask', 'ans' 칼럼에 잘 들어왔다 >

 

2. 오답 여부를 체크할 'check' 칼럼 추가

  • 오답 여부를 체크 할 'check' 칼럼을 추가하고, 기본값으로 '0'을 입력
df['check'] = 0
  • 문제 수를 알기 위해, 'len'을 사용 row 수를 파악해 'n_rows'에 저장한다.
n_rows = len(df.index)

 

3. 문제 순서 섞기

  • 문제가 같은 순서로 반복되면, 내용보다는 정답 순서만 암기될 수 있으므로 출제되는 문제의 순서를  무작위로 섞어준다.
  • 무작위로 섞어주기 위해 random()을 사용.

= random() 사용 방법 =

   1) 0~1 사이의 수 선택

a = random.random()
print(a)

Out: 0.38430721156044234

 

   2) 0~10 사이의 정수 선택

a = random.randint(0, 10)
print(a)

Out: 2

 

   3) 50~60 사이의 정수 선택

b = int(random.uniform(50, 60))
print(b)

Out: 56

 

   4) 리스트의 원소 중 하나 선택

menu = ['된장찌개', '김치찌개', '라면', '만두', '볶음밥', '잡채덮밥']
c = random.choice(menu)
print(c)

Out: 만두

 

 

  • 문제의 index를 src에 리스트로 저장한다.
src = list(df.index)
src

Out:

[0, 1, 2, 3, 4, 5, 6]

 

  • random을 불러 오고, src에 들어 있는 값의 순서를 섞는다.
import random
random.shuffle(src)
src

Out:

[1, 5, 0, 6, 3, 2, 4]

 

 

4. 문제 출제와 채점

  • 문제 수 만큼 반복해서 출제하고 채점하도록 for i in range(문제 수) :  구문 사용
for i in range(n_rows):
  • 선택한 문제의 index를 choice 변수에 저장
choice = src[i]
  • input()문으로 답을 입력받아 변수 your_ans에 저장
your_ans = input('문제: '+df.ask[choice]+'?')
  • 다음 문제를 출제하도록 변수 i를 1 증가시킨다.
i +=1
  • 입력받은 값(your_ans)과 정답(df.ans[choice])이 같으면 '정답!'이라고 알려주고, 다르면 정답을 알려주도록 if ~ else문 사용
if(your_ans == df.ans[choice]):
print('정답!')
else:
print(df.ask[choice]+'(은)는 ' + df.ans[choice]+' 입니다.')

 

5. 전체 code

import pandas as pd
df = pd.read_csv('element_name.txt', header = None, names=['ask', 'ans'])
df['check'] = 0

# 전체 row 개수 파악
n_rows
= len(df.index)


# 문제 순서를 무작위로 섞는다
import random
src
= list(df.index)
random
.shuffle(src)


# 차례대로 문제를 내고 답을 입력 받아 채점
for i in range(n_rows):
     choice
= src[i]
     your_ans
= input('문제: '+df.ask[choice]+'?')
     i
+=1

     if(your_ans == df.ans[choice]):
          # 맞춘 문제의 check column 값을
1로 변경.
          df
.loc[df.index[choice], 'check'] = 1
          print('정답!')
     else:
          print('오답!')
          print(df.ask[choice]+'(은)는 ' + df.ans[choice]+' 입니다.')

Out:

문제: N?

질소

정답!

문제: C?

타노

C(은)는 탄소 입니다.

 

 


728x90