파이썬 랜덤으로 시험문제 풀기
시험문제를 1-3.png 2-2.png 3-5.png . . .
로 저장하는데,
앞의 번호와 -뒤에 숫자는 문제의 정답번호를 말하는 것입니다.
예를들어 1-3.png 는 1번문제의 정답은 3 입니다.
문제번호를 여러개를 저장한 다음 코딩을 실행하면 랜덤으로 문제가 추출됩니다.
import os
import random
from PIL import Image, ImageTk
import tkinter as tk
import pygame
# 이미지 폴더 경로
image_folder = r'E:\python\py_code\공부\data\과학'
# 이미지 파일 목록 생성
image_files = [f for f in os.listdir(image_folder) if f.endswith('.png')]
# 하단 GUI 요소를 미리 생성
window = tk.Tk()
window.title("문제 맞추기 게임")
# 이미지 표시용 라벨
image_label = tk.Label(window)
image_label.pack(pady=10)
# 이미지와 확인 버튼을 포함하는 프레임 생성
frame = tk.Frame(window)
frame.pack()
question_label = tk.Label(frame, text="")
question_label.grid(row=0, column=0)
entry = tk.Entry(frame)
entry.grid(row=0, column=1, padx=10)
result_label = tk.Label(frame, text="")
result_label.grid(row=1, columnspan=2)
# Pygame 초기화 및 MP3 파일 경로 설정
pygame.init()
correct_sound = pygame.mixer.Sound(r'E:\python\py_code\공부\ok.mp3')
incorrect_sound = pygame.mixer.Sound(r'E:\python\py_code\공부\nono.mp3')
def play_correct_sound():
correct_sound.play()
def play_incorrect_sound():
incorrect_sound.play()
def show_random_question():
# 랜덤하게 이미지 선택
random_image = random.choice(image_files)
image_path = os.path.join(image_folder, random_image)
# 이미지 표시
img = Image.open(image_path)
img = img.resize((400, 400))
img = ImageTk.PhotoImage(img)
image_label.config(image=img)
image_label.image = img
# 정답 추출
answer = int(random_image.split('-')[1].split('.')[0])
# 사용자로부터 정답 입력 받기
def check_answer(event=None):
user_answer = int(entry.get())
if user_answer == answer:
result_label.config(text="정답을 맞췄어요.")
play_correct_sound() # 정답 소리 재생
show_random_question()
else:
result_label.config(text="다시 한번 풀어보세요.")
play_incorrect_sound() # 오답 소리 재생
# 엔터 키로 정답 확인
entry.bind("<Return>", check_answer)
# 하단 GUI 업데이트
entry.delete(0, tk.END)
result_label.config(text="")
# 하단 GUI 생성
question_label.config(text="이미지에 나타난 숫자는 무엇일까요?")
# 확인 버튼 생성 (오른쪽에 위치)
check_button = tk.Button(frame, text="확인", command=check_answer)
check_button.grid(row=0, column=2)
# 초기 문제 표시
show_random_question()
# Tkinter 이벤트 루프 시작
window.mainloop()
# pygame 종료
pygame.mixer.quit()