Проект "Тестування". Етап 4. Перемішування та зображення

Перемішування питань

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

random.shuffle(quiz)

Для того, щоб працювала команда перемішування потрібно імпортувати модуль import random


Перемішування відповідей у питанні

Перемішування відповідей всередині питання організувати дещо складніше. Саме перемішування текстів відповідей відбувається у функції def show_question(n), де перед виведенням в область options потрібно додати команду random.shuffle(quiz[n].show_answers()).

Проте тепер не буде перевірятись правильність відповіді користувача. Проаналізуємо, яким чином зараз відбувається перевірка відповіді - функцію def check(e)

def check(e):

    result.grid(row=0,column=2)

    b=quiz[number].show_correct_text()

    a=''

    for i in options.curselection():

        a=a+options.get(i)+"\n"

    if a.strip()==b.strip():

        result.configure(text="YES")

        user[number]=1

    else:

        result.configure(text="NO")

        user[number]=0

Порівнюються дві змінні: a та b, котрі є рядками (string): b - правильна відповідь з файлу, а - відповідь користувача. Якщо варіанти перемішані, то відповідь користувача а змінюється: наприклад, замість "Червоний Зелений Синій" вона буде "Зелений Червоний Синій". Тож варто сортувати складові відповіді користувача, а також задавати правильну відповідь у відсортованому варіанті: "Зелений Синій Червоний".

Внесемо відповідні зміни у проект.

Сортування відповідей питання потрібно виконувати одразу після зчитування інформації з файлу, поки номери правильних відповідей відповідають їхнім текстам. Тому створимо в об'єкті Question властивість self.correct_text, котра при ініціалізації об'єкту буде порожнім рядком.

Після зчитування варіантів відповідей з файлу викличемо метод question.set_correct_text(), котрий полягає у заповненні властивості self.correct_text рядком з відсортованих правильних відповідей.

Спочатку формується список з правильних відповідей, а потім цей відсортований список перетворюється на рядок.

    def set_correct_text(self):

        k=[]

        for i in self.correct:

            k.append(self.ans[int(i)-1])

        self.correct_text=''.join(sorted(k))


Повернути значення цього рядка у програму можна функцією def show_correct_text_sorted(self).

    def show_correct_text_sorted(self):

        return self.correct_text

Таким чином, правильна відповідь на питання повертатиметься у програму функцією show_correct_text_sorted() і міститиме рядок з відсортованими правильними варіантами відповідей.


Функція перевірки правильності відповіді

Аналогічну операцію сортування потрібно виконати і з рядком, котрий утворюється з відповідей користувача, у функції def check(e)

def check(e):

    result.grid(row=0,column=2)

    b=quiz[number].show_correct_text_sorted()

    c=[]

    for i in options.curselection():

        c.append(options.get(i).strip())

    a="\n".join(sorted(c))

    if a.strip()==b.strip():

        result.configure(text="YES")

        user[number]=1

    else:

        result.configure(text="NO")

        user[number]=0

Таким чином, у змінній b міститься еталонна відповідь (з функції show_correct_text_sorted()), а у змінній а - відповідь користувача, із вибраними варіантами в алфавітному порядку. Якщо ці змінні збігаються, відповідь є правильною, про що сповіщає напис result, а у список user записується значення 1.


Зображення у тесті

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

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

pic=PhotoImage(file="python.gif")

picture = Label(root,image=pic, height=200, width=200)

picture.grid(row=0, column=2,sticky=W, rowspan=3)

Змінна pic містить назву файлу зображення, а picture - область його виведення.


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

Поле властивості ініціалізації об'єкту: self.picture='' 

Методи заповнення та показу властивості: 

    def add_pic(self,pic):

        self.picture=pic.strip()

    def show_pic(self):

        return self.picture

Зчитування з файлу: question.add_pic(text.readline())


Залишається додати зміну зображення у функції показу питання show_question:

    global pic

    pic=PhotoImage(file = quiz[n].show_pic())

    picture.configure(image = pic)

Остання зміна: неділя 3 травня 2015 6:03