반응형
목표_____
- 암기해야 할 것을 반복해서 풀어볼 수 있도록 하자.
- 암기할 내용은 텍스트 파일에 문제와 답으로 구분해 저장해 두고 읽어와서 사용
- 불러올 텍스트 파일만 바꾸면 쉽게 다른 주제 암기에 사용할 수 있게 하자.
- 틀렸을 때는 정답을 알려주어 암기할 수 있게 한다.
- 암기 확인 문제가 같은 순서로 반복되면 문제와 답의 연관성 보다 답의 순서를 암기하기 쉬우므로 실행할 때마다 출제되는 문제의 순서가 달라지게 하자.
결과_____
방법_____
1. 문제와 답이 들어 있는 텍스트 파일 읽어오기
= 문제와 답을 텍스트 파일로 만들기 =
- 문제와 답이 들어 있는 텍스트 파일은 필요한 만큼 만들어 바꿔 사용하면 편리하다.
- 텍스트 파일은 쉼표(,)로 구분해서 만들고, 빈칸 없이 이어서 써야 정답 확인 시 오류가 없다.
- 예를 들어, 원소 기호를 암기하기 위해 원소 기호와 이름이 쉼표(,)로 구분되어 있는 텍스트 파일(element_name.txt)을 만든다.
= pandas를 불러오고, 문제와 답이 있는 텍스트 파일을 읽어 데이터 프레임에 저장 =
- 텍스트 파일에서 문제는 'ask', 답은 'ans'로 칼럼 이름을 붙이고 읽어
- 데이터 프레임에 저장하고, 제대로 만들어졌는지 확인한다.
import pandas as pd
df = pd.read_csv('element_name.txt', header = None, names=['ask', 'ans'])
df
|
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
'Manuals > 파이썬' 카테고리의 다른 글
파이썬 turtle, 함수 사용 꽃 그리기 (1) | 2023.03.22 |
---|---|
파이썬 tkinter, 냉동식품 관리(1) (0) | 2023.03.11 |
파이썬 pandas, 텍스트 파일 사용 (0) | 2023.03.04 |
파이썬 turtle, 도형을 이용한 꽃 그리기 (0) | 2023.02.23 |
파이썬, matplotlib을 이용한 선 그래프 그리기 (0) | 2023.02.04 |