파이썬 프로그램

파이썬으로 윈도우용 나라별 수도 맞추는 퀴즈 프로그램

슈가가족 2023. 4. 5. 00:28
반응형

아래는 VC CODE 입니다. 파일명 QUIZ_WIN.PY

원리만 알수 있도록 코딩하였습니다.

1. 마우스로 예제 1~4번 클릭시 숫자키 입력과 동일하게 작동
2. 정답을 맞히면 정답 메시지와 합께 3초 후 다음문제로 이동
3. 틀린 경우는 정답은 몇번입니다. 3 초 후 다음문제로 이동

코드에 대한 궁금 사항은 댓글 남겨주시면 부족하지만 답변드리도록 하겠습니다.

DB는 이전 QUIZ.CSV 를 사용했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import tkinter as tk
import csv
from tkinter import messagebox
def load_questions():
questions = []
with open('quiz.csv', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter=',')
for row in reader:
questions.append(row)
return questions
def check_answer(answer):
global score, current_question
if answer == int(questions[current_question]['CorrectAnswer']):
result_label.config(text="정답!")
score += 1
root.after(1000, next_question)
else:
result_label.config(text=f"오답. 정답은 {questions[current_question]['CorrectAnswer']}번 입니다.")
root.after(3000, next_question)
def on_key(event):
if event.char.isdigit():
answer = int(event.char)
if 1 = answer = 4:
check_answer(answer)
elif event.char.lower() == 'q':
end_quiz()
def next_question():
global current_question
current_question += 1
if current_question len(questions):
update_question()
else:
end_quiz()
def update_question():
question_label.config(text=f"문제 {current_question+1}: {questions[current_question]['Question']}")
for i, answer_button in enumerate(answer_buttons):
answer_button.config(text=f"{i+1}. {questions[current_question][f'Answer{i+1}']}")
def end_quiz():
final_score = f"총 문제 {len(questions)} 중 {score} 문제를 맞추어 {score}점 획득했습니다."
messagebox.showinfo("퀴즈 종료", final_score)
root.quit()
root = tk.Tk()
root.title("퀴즈 프로그램")
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.geometry(f"{int(screen_width * 0.6)}x{int(screen_height * 0.6)}")
root.bind("KeyPress", on_key)
question_label = tk.Label(root, text="", font=("Gothic", 20))
question_label.pack()
answer_buttons = []
for i in range(4):
answer_button = tk.Button(root, text="", font=("Gothic", 20), command=lambda i=i: check_answer(i+1))
answer_button.pack()
answer_buttons.append(answer_button)
result_label = tk.Label(root, text="", font=("Gothic", 20))
result_label.pack()
questions = load_questions()
current_question = -1
score = 0
next_question()
root.mainloop()
cs
반응형