ํ๊ต ์ํ ์๋ ์ฑ์ ๋ฐ ์์ ๊ด๋ฆฌ ์์คํ ์ ๋๋ค.
answerChecker๋ ํ์ฑ๊ณ ๋ฑํ๊ต๋ฅผ ์ํด ๊ฐ๋ฐ๋ ์ํ ์๋ ์ฑ์ ํ๋ก๊ทธ๋จ์ ๋๋ค. MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ต์๊ณผ ํ์์ ๋ต์ ๋น๊ตํ์ฌ ์๋์ผ๋ก ์ฑ์ ํ๊ณ , ์ ์ฒด ์์ ๋ฐ ๋ฑ๊ธ์ ๊ณ์ฐํฉ๋๋ค.
- ์๋ ์ฑ์ : ๋ต์ ์ ๋ ฅ ์ ์๋์ผ๋ก ์ ์ ๊ณ์ฐ
- ๋ต์ ๊ด๋ฆฌ: ๊ณผ๋ชฉ๋ณ ์ํ ๋ต์ ์ ์ฅ
- ์์ ํ์ธ: ์ํ ๊ฒฐ๊ณผ ๊ธฐ๋ฐ ์์ ์กฐํ
- ๋ฑ๊ธ ๊ณ์ฐ: rating_calculator ๋ชจ๋๋ก ๋ฑ๊ธ ์ฐ์ถ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ: MySQL์ ์ํ ๊ฒฐ๊ณผ ์๊ตฌ ์ ์ฅ
- Python 3.x
- PyMySQL - MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
- MySQL - ๋ฐ์ดํฐ ์ ์ฅ
answerChecker/
โโโ checker.py # ๋ฉ์ธ ์ฑ์ ํ๋ก๊ทธ๋จ
โโโ answerinput.py # ๋ต์ ์
๋ ฅ ๋ชจ๋
โโโ rating_calculator.py # ๋ฑ๊ธ ๊ณ์ฐ ๋ชจ๋
โโโ .hwp # ๋ฌธ์ ํ์ผ
| ์ปฌ๋ผ๋ช | ํ์ | ์ค๋ช |
|---|---|---|
| ID | INT | ํ๋ฒ |
| SUBCODE | INT | ๊ณผ๋ชฉ์ฝ๋ |
| SCORE | INT | ์ ์ |
| ์ปฌ๋ผ๋ช | ํ์ | ์ค๋ช |
|---|---|---|
| testname | VARCHAR | ์ํ๋ช |
| testcode | INT | ๊ณผ๋ชฉ์ฝ๋ |
| answer | TEXT | ๋ต์ |
- Python 3.x
- MySQL ์๋ฒ
- ํ์ฑ๊ณ ๋คํธ์ํฌ ์ ๊ทผ ๊ถํ
pip install pymysqlCREATE DATABASE HASEONG;
USE HASEONG;
CREATE TABLE SCORE (
ID INT,
SUBCODE INT,
SCORE INT,
PRIMARY KEY (ID, SUBCODE)
);
CREATE TABLE ans (
testname VARCHAR(100),
testcode INT,
answer TEXT,
PRIMARY KEY (testname, testcode)
);python checker.py๊ฐ์ฒด์ ๊ธฐ๋ฅผ ์ฌ์ฉํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค(ํ์ฑ๊ณ ์ ์ฉ)
ํ๋ฒ์ ์
๋ ฅํ์ธ์ >>> 12345
์ฌ์ฉํ ๊ธฐ๋ฅ์ ์ ํํ์ธ์
1.๊ฐ์ฒด์ 2.์์ํ์ธ 3.๋๋ด๊ธฐ >>> 1
์ํ์ด๋ฆ์ ์
๋ ฅํ์ธ์ ์์)2ํ๊ธฐ๊ธฐ๋ง๊ณ ์ฌ >>> 2ํ๊ธฐ์ค๊ฐ๊ณ ์ฌ
๊ณผ๋ชฉ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์ >>> 3
๊ณผ๋ชฉ ์ฝ๋:
1 - ๊ตญ์ด
2 - ์์ด
3 - ์ํ
4 - ์ฌํ
5 - ๊ณผํ
6 - ์์ด
7 - ํ๊ตญ์ฌ
๋ฌธ์ ์๋ฅผ ์
๋ ฅํ์ธ์ >>> 20
1๋ฒ์จฐ ๋ต์ ์
๋ ฅํ์ธ์ >>> 1
2๋ฒ์จฐ ๋ต์ ์
๋ ฅํ์ธ์ >>> 2
...
20๋ฒ์จฐ ๋ต์ ์
๋ ฅํ์ธ์ >>> 4
์
๋ ฅ ์๋ฃ
85์ ์
๋๋ค
์ฌ์ฉํ ๊ธฐ๋ฅ์ ์ ํํ์ธ์
1.๊ฐ์ฒด์ 2.์์ํ์ธ 3.๋๋ด๊ธฐ >>> 2
12345๋์ 5๋ฑ ์
๋๋ค
------๋ฑ๊ธํ------
[๋ฑ๊ธ ์ ๋ณด ์ถ๋ ฅ]
def start():
global conn
try:
conn = pymysql.connect(
user = 'student',
password = 'haseongh.goe.go.kr',
host = 'nel.o-r.kr',
port = 3306,
charset = 'utf8'
)
except pymysql.err.OperationalError as error:
print(str(error) + '! restarting')
start()
global cursor
cursor = conn.cursor()
cursor.execute('USE HASEONG')def value():
testname = str(input('์ํ์ด๋ฆ์ ์
๋ ฅํ์ธ์ >>>'))
testcode = int(input('๊ณผ๋ชฉ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์ >>>'))
# ๋ต์ ์กฐํ
sql = f"select answer from ans where testname = '{testname}' and testcode = '{testcode}'"
cursor.execute(sql)
# ์ ์ ์กฐํ
sql = f"select answer from ans where testname = '{testname}_ans' and testcode = '{testcode}_ans'"
cursor.execute(sql)def ansinput():
i = 1
global proans
proans = {}
try:
while i < problnum + 1:
proans[str(i)] = int(input(str(i) + '๋ฒ์จฐ ๋ต์ ์
๋ ฅํ์ธ์ >>>'))
i = i + 1
except ValueError:
print(str(ValueError) + '! please try again')
ansinput()
return proansdef check():
i = 1
global proscore
proscore = 0
while i < problnum + 1:
try:
score = answer[str(proans[str(i)])]
proscore = proscore + score
except KeyError:
print(str(i) + '๋ฒ ํ๋ ธ์ต๋๋ค')
i = i + 1
print(str(proscore) + '์ ์
๋๋ค')def save():
sql = f'''INSERT INTO SCORE
VALUES ({stunum}, {testcode}, {proscore})'''
try:
cursor.execute(sql)
except MySQLError as sqlerror:
print(str(sqlerror) + '! please try again')def ranking():
sql = f'''SELECT ID FROM SCORE WHERE SUBCODE = '{testcode}' ORDER BY SCORE DESC'''
try:
cursor.execute(sql)
except MySQLError as error:
print(str(error) + 'please try again')
a = 1
for i in cursor:
a = a + 1
if stunum == i:
print(f'{stunum}๋์ {a}๋ฑ ์
๋๋ค')
rating_calculator.calculate(42) # ๋ฑ๊ธ ๊ณ์ฐ1. ํ๋ฒ ์
๋ ฅ: 12345
2. ๊ธฐ๋ฅ ์ ํ: 1 (๊ฐ์ฒด์ )
3. ์ํ๋ช
: 2ํ๊ธฐ์ค๊ฐ๊ณ ์ฌ
4. ๊ณผ๋ชฉ์ฝ๋: 3 (์ํ)
5. ๋ฌธ์ ์: 20
6. ๋ต ์
๋ ฅ: 1, 2, 3, 4, 1, 2, 3, 4, ... (20๊ฐ)
7. ๊ฒฐ๊ณผ: 85์ ์
๋๋ค
# ์ทจ์ฝํ ์ฝ๋
sql = f"select answer from ans where testname = '{testname}'"
# ๊ฐ์ ์
sql = "select answer from ans where testname = %s"
cursor.execute(sql, (testname,))# ๊ฐ์ ์
import os
from dotenv import load_dotenv
load_dotenv()
conn = pymysql.connect(
user = os.getenv('DB_USER'),
password = os.getenv('DB_PASS'),
host = os.getenv('DB_HOST')
)- ํ๊ต ์ ์ฉ: ํ์ฑ๊ณ ๋ด๋ถ ๋คํธ์ํฌ์์๋ง ์๋
- ๋จ์ผ ์ฌ์ฉ์: ๋์ ๋ค์ค ์ฌ์ฉ์ ๋ฏธ์ง์
- ์ค๋ณต ์ฑ์ : ๊ฐ์ ์ํ์ ์ฌ๋ฌ ๋ฒ ์ฑ์ ๊ฐ๋ฅ
- ๋ต์ ์์ ๋ถ๊ฐ: ์ ๋ ฅ ํ ์์ ๊ธฐ๋ฅ ์์
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/grade', methods=['POST'])
def grade():
answers = request.form.getlist('answers')
score = calculate_score(answers)
return render_template('result.html', score=score)# ์ด๋ฏธ ์ฑ์ ํ ๊ฒฝ์ฐ ๊ฒฝ๊ณ
sql = f"SELECT * FROM SCORE WHERE ID = {stunum} AND SUBCODE = {testcode}"
cursor.execute(sql)
if cursor.fetchone():
print("์ด๋ฏธ ์ฑ์ ํ ์ํ์
๋๋ค. ๋ฎ์ด์ฐ์๊ฒ ์ต๋๊น? (y/n)")def modify_answer(question_num):
print(f"ํ์ฌ ๋ต: {proans[str(question_num)]}")
new_answer = int(input("์๋ก์ด ๋ต ์
๋ ฅ >>> "))
proans[str(question_num)] = new_answerOperationalError: (2003, "Can't connect to MySQL server")
ํด๊ฒฐ: MySQL ์๋ฒ ์คํ ํ์ธ ๋ฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ ํ์ธ
# UTF-8 ์ค์ ์ถ๊ฐ
conn = pymysql.connect(
charset = 'utf8mb4', # ์ด๋ชจ์ง ์ง์
use_unicode = True
)ํ์ฑ๊ณ ๋ฑํ๊ต ๋ด๋ถ์ฉ์ผ๋ก ์ ์๋ ํ๋ก์ ํธ์ ๋๋ค.