Створимо тестові питання іншого типу - з кількома правильними відповідями.

Загальна логіка проекту залишається незмінною: з файлу зчитується об'єкт питання з текстами варіантів та номерами правильних відповідей. За допомогою елементів інтерфейсу: напису Label, списку Listbox та кнопок Button відбувається послідовне виведення питань та варіантів відповідей.

Необхідно налаштувати можливість давати кілька відповідей в списку Listbox. За це відповідає властивість selectmode=MULTIPLE.

Необхідно внести зміни у процес зчитування питання з файлу, а точніше в етап зчитування правильних відповідей, яких буде кілька, а не одна, як у попередньому проекті. Тому рядок з файлу, в якому буде кілька чисел, потребує додаткової обробки. Для подальшої обробки з нього слід видалити пробіли, розділити текстовий рядок на окремі числа і записати їх у поле об'єкта під назвою self.correct (у попередньому проекті у це поле було записано єдине число - номер правильної відповіді)

    k=text.readline().split()

    question.set_correct(k)

Новий метод об'єкту оброблятиме цю властивість та формуватиме список правильних відповідей з текстів відповідних варіантів:

   def show_correct_text(self):

        k=''

        for i in self.correct:

            k=k+"\n"+self.ans[int(i)-1]

        return k

Основні зміни відбуваються у функції перевірки правильності відповіді користувача. Вибрані елементи списку Listbox (options.curselection()потрібно співставити з правильним варіантом (з методу quiz[number].show_correct_text()). Слід застосовувати порівняння власне текстового вмісту відповідей, без незначущих пробілів та переходів рядків - через функцію strip().

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

Last modified: Wednesday, 10 July 2024, 6:48 AM