본문 바로가기
프로그램

[파이썬] 문제 : 영단어 퀴즈 만들기

by 오디세이99 2023. 5. 28.
728x90
반응형

(문제)

사용자에게서 단어 30개 이상을 입력받아 랜덤 선지 4개짜리 문제 10개를 만들고, 3개 이상 틀렸을 경우 같은 문제로 재시험, 그렇지 않을경우 기존 문제와 중복되지 않는 다른 문제로 재시험 혹은 끝내기를 질문하고, 답변대로 실행하는 프로그램을 만드려고 하는데 이 이후로 어떻게 해야될지 모르겠어요. 그리고 빨간부분처럼하면 질문의 답이 중복 되는데 어떻게 해결해야할까요?

 

(방법)

import random

w=[]
m=[]
count=0
q=0
# while True:
#     count=count+1
#     eng=input('단어 입력:')
#     w.append(eng)
#     kor=input('뜻 입력:')
#     m.append(kor)
#     if count>=30:
#         m=input('더 입력?(y/n)')
#         if m=='y':
#             continue
#         else:
#             break

w = ['a','b','c','d','e','f','g']
m = ['가','나','다','라','마','바','사']
q_lst = []             # 임의로 선택한 문제 인덱스 리스트
wrong = []             # 틀린답 인덱스 리스트
w_len = len(w)         # 전체 문제 수
q_cnt = 5              # 퀴즈 문제 수 
while True:           # 계속 반복
    if len(wrong) == 0:                 # 틀린답이 없으면 신규 문제 만듬
        q_lst = random.sample([i for i in range(w_len)], q_cnt)  # 문제수 만큼 임의의 인덱스를 만듬
    else:                               # 틀린답이 있는 경우
        q_lst = wrong                    # 틀린답 리스트를 문제 리스트로 함
        wrong = []                       # 틀린답 리스트 클리어. 새로 시작하기 때문에
    # print(q_lst)
    for i in range (len(q_lst)):        # 퀴즈 문제수 만큼 반복
        q_idx = q_lst[i]                                   # 영단어 전체 중 임의의 인덱스 번호 하나를 선택
        a_idx = random.randint(0, 3)                        # 4개 답 예시 중 어떤 것으로 정답으로 할 것인지 임의 선택
        ex = random.sample([i for i in range(w_len)], 4)   # 예시로 사용할 단어(인덱스) 4개 임의 선택
        if q_idx in ex:                 # 임의로 만든 예시 중 문제 예시가 있으면 
            a_idx = ex.index(q_idx)      # 문제 예시의 인덱스를 찾아서 답 인덱스로 사용
        
        ex[a_idx] = q_idx                # 임의 선택된 4개 중 임의의 번호에 정답으로 대체
        print(w[q_idx],'의 뜻은?')
        a = int(input(f"(1) {m[ex[0]]}  (2) {m[ex[1]]}  (3) {m[ex[2]]}  (4) {m[ex[3]]} : "))
        # print(m[q_idx],m[ex[a-1]],ex[a-1])
        if m[q_idx] == m[ex[a-1]]:      # 답과 입력 받은 값 비교. 여기서는 m 값으로 비교하나 인덱스만 으로 비교해도 됨
            print('정답')
        else:
            print(f"틀렸습니다. 정답은 {m[q_idx]}")
            wrong.append(q_idx)          # 틀린 문제의 인덱스 저장
        print()                          # 빈 줄 추가. 다음 문제와 구분 용도
    if len(wrong) != 0:                  # 틀린답이 있다면 처음으로 돌아감. while
        continue
    else:                                # 틀린답이 없으면 끝내거나 처음부터 다시 함
        q = input('종료하시겠습니까?(q): ')   # 종료 여부
        if q.upper() == 'Q' or q == 'ㅂ':  
            break

728x90
반응형

댓글