Проєкт "Тестування". Етап 2. Питання з кількома відповідями
Створимо тестові питання іншого типу - з кількома правильними відповідями.
Загальна логіка проекту залишається незмінною: з файлу зчитується об'єкт питання з текстами варіантів та номерами правильних відповідей. За допомогою елементів інтерфейсу: напису 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