Проект "Тестування". Питання з однією відповіддю

Для створення програми тестування потрібно підготувати вхідні дані: файл з питаннями, варіантами відповідей та номерами правильних відповідей на кожне із питань за зразком:

Вкажіть назву алгоритму з умовою
циклічний
розгалужений
лінійний
деревоподібний
програмний
2

Такий файл розраховано на те, що його може підготувати будь-який користувач комп'ютера. Розмістити файл слід у каталозі з Pyhon. 

Роботу над проектом варто розпочати із проектування його логічної структури та взаємодій. Користувач бачить на екрані питання та варіанти відповідей, а також кнопки переходу до наступного та попереднього запитання. Таким чином потрібно передбачити зберігання текстів питань та варіантів відповідей до них, а також фіксувати номер правильної відповіді та звіряти його із відповіддю користувача.

З точки зору інтерфейсу, програма може виглядати, наприклад так (виділена група елементів, котру варто розмістити як об'єднану рамку):


Після запуску тестування користувач може обирати відповідь (одну) та отримувати результат-оцінку:



Інтерфейс

Створення інтерфейсу полягає у розташуванні на формі об'єктів: написи (для тексту питання та результату), кнопки (Вперед та Назад) та список варіантів відповідей.

Варто зауважити, що на початку роботи програми кнопка Назад неактивна. 

Елемент Listbox - поле з вибором може містити рядки тексту, а до події ListboxSelect, котра виникає при клацанні на будь-якому із рядків, прив'язана (bind) функція check, призначення якої - перевірити правильність відповіді користувача. Властивість selectmode=MULTIPLE дозволяє обирати кілька варіантів відповідей, для поточного проекту це не обов'язково.


Дані

Необхідно спроектувати структури зберігання даних проекту. Скористаємось об'єктним підходом: питання - це об'єкт, котрий має властивість text для зберігання тексту питання; властивість ans для зберігання варіантів відповідей та властивість correct для зберігання номера правильної відповіді. Варто зауважити, що нумерація відповідей у файлі ведеться з 1, а у програмі - з 0.

Опис класу питання

Зчитування питань відбувається із файлу. Першим рядком зчитуємо текст запитання та створюємо об'єкт. Далі зчитуємо варіанти відповідей, котрі заносимо в об'єкт відповідною функцією add_ans. Додаємо до об'єкту номер правильної відповіді, після чого переходимо до наступного рядка - тексту наступного питання.

Для того, щоб можна було оперувати об'єктами-питаннями, заносимо їх у список quiz

Зчитування даних з файлу та створення об'єктів

У програмі використані глобальні змінні number_of_questions та number_of_answers. Їхні значення потрібно задати на початку програми. Крім того, слід вказати, що програма почне роботу з питання номер -1, а список результатів користувача слід ініціалізувати нулями

number_of_questions=6
number_of_answers=5
user=[]
for i in range(number_of_questions):
    user.append(0)    
number=-1

Залишається описати функції показу питань переходів між питаннями та визначення правильності відповідей.


Функції

Функція кнопки Вперед полягає в тому, що глобальна змінна number номер питання збільшується на 1 та відбувається показ нового питання (виклик функції show_question ). У тому разі, якщо досягнули останнього питання, кнопка стає неактивною. Перша команда функції result.grid_forget() приховує результат оцінювання попереднього питання (це стає неактуальним із появою наступного).

Функція Вперед

Робота кнопки Назад є аналогічною, тільки вона стає неактивною при досягненні першого питання (номер нуль).

Функція Назад

Для показу питання потрібно записати у напис 2 (текст об'єкту питання), видалити всі попередні варіанти відповідей (від нульового до останнього) та записати варіанти відповідей нового питання. Для доступу до об'єкту питання використовується список quiz , з якого беремо елемент номер n. Функції show_question() та show_answers() описані при створенні класу, вони повертають у вигляді відповіді тексти відповідно питання та варіантів відповідей. 

Функція показу питання

Перевірка відповіді відбувається при події вибирання елемента Listbox. У змінній options.curselection() записано всі вибрані елементи. Якщо правильна відповідь show_correct() для даного питання quiz номер n міститься серед вибраних елементів options.curselection(), то у напис результату виводиться сповіщення YES, а у список відповідей користувача під номером цього питання записується 1. У протилежному випадку - виводиться сповіщення NO та у список відповідей користувача - 0. Перша команда функції показує на формі напис для виведення результату (адже цей напис було приховано при обробці кнопок Вперед чи Назад).

Функція перевірки відповіді

Завдання. 

Створити тестування на 12 питань на будь-яку тематику.

Передбачити збереження результату користувача у файл з інформацією : Ім'я та прізвище користувача та отриманий бал

Остання зміна: середа 22 квітня 2015 12:13