Untitled
import PyQt5.QtCore from PyQt5.QtWidgets import * from random import * class Question: def __init__(self, question, right_answer, wrong1, wrong2, wrong3): self.question = question self.right_answer = right_answer self.wrong1 = wrong1 self.wrong2 = wrong2 self.wrong3 = wrong3 # создаём список вопросов, сами вопросы, добавляем их в список question_list = [] q1 = Question('0:0','∞', '0','1', '-0') q2 = Question('0!', '1', '-0', '0', '100') q3 = Question('2+2', '4', '5', '6', '69') q4 = Question('Сколько хромосом у папоротника', '39', '40', '300', '30') q5 = Question('В каком году родился Григорий Александрович Потёмкин', '1739','1379','1793','1937') q6 = Question('Сколько лет Владимиру Владимировичу Путину на момент 11.02.2024?', '71', '69', '72','61') q7 = Question('В каком году родился самый известнейший австрийский художник,\n смогший захватить пол мира, потерпевший поражение в 1945','1889', '1908','1998', '1898') question_list.append(q1) question_list.append(q2) question_list.append(q3) question_list.append(q4) question_list.append(q5) question_list.append(q6) question_list.append(q7) app = QApplication([]) # окно приложения window = QWidget() window.setWindowTitle('Memory Card') window.resize(400, 300) # интерфейс приложения btn_OK = QPushButton('Ответить') lbl_question = QLabel('Самый сложный вопрос в мире!') RadioGroupBox = QGroupBox('Варианты ответов') # группа на экране дя переключателей с ответами btn_1 = QRadioButton('Вариант 1') btn_2 = QRadioButton('Вариант 2') btn_3 = QRadioButton('Вариант 3') btn_4 = QRadioButton('Вариант 4') # группируем переключатели ответов RadioGroup = QButtonGroup() RadioGroup.addButton(btn_1) RadioGroup.addButton(btn_2) RadioGroup.addButton(btn_3) RadioGroup.addButton(btn_4) # линии для размещения виджетов line_ans1 = QHBowLayout() line_ans2 = QVBowLayout() line_ans3 = QVBowLayout() # вертикальные линии будут внутри горизонтальной... line_ans2.addWidget(btn_1) line_ans2.addWidget(btn_2) line_ans3.addWidget(btn_3) line_ans3.addWidget(btn_4) # разместим столбцы в одной линии line_ans1.addLayout(line_ans2) line_ans1.addLayout(line_ans3) # панель с вариантами ответов RadioGroupBox.setLayout(line_ans1) AnsGroupBox = QGroupBox('Результат теста') lb_Result = QLabel('текст') lb_Correct = QLabel('ответ') layout_res = QVBoxLayout() layout_res.addwidget(lb_Result, alignment=(Qt.AlignLeft | Qt.AlignTop)) layout_res.addwidget(lb_Correct, alignment=Qt.AlignCenter, stretch=2) AnsGroupBox.setLayout(layout_res) layout_line1 = QHBoxLayout() layout_line2 = QHBoxLayout() layout_line3 = QHBoxLayout() layout_line1.addWidget(lbl_question, alignment=(Qt.AlignCenter | Qt.AlignVCenter)) layout_line2.addWidget(RadioGroupBox) layout_line3.addWidget(AnsGroupBox) # скроем панель ответов, потому что сначала высвечивается панел вопросов: AnsGroupBox.hide() layout_line3.addStretch(1) layout_line3.addWidget(btn_OK, stretch=2) layout_line3.addStretch(1) layout_card = QVBoxLayout() layout_card.addLayout(layout_lin3, stretch=2) layout_card.addLayout(layout_lin3, stretch=8) layout_card.addStretch(1) layout_card.addLayout(layout_lin3, stretch=1) layout_card.addStretch(1) layout_card.addSpacing(5) def show_result(): # показать панель ответов RadioGroupBox.hide() AnsGroupBox.show() btn_OK.setText('Следующий вопрос') # показать панель вопросов RadioGroupBox.show() AnsGroupBox.hide() btn_OK.setText('Ответить') RadioGroup.setExclusive(False) btn_1.setChecked(False) btn_2.setChecked(False) btn_3.setChecked(False) btn_4.setChecked(False) RadioGroup.setExclusive(True) answers = [btn_1, btn_2, btn_3, btn_4] def ask(q): # функция записывает значения вопроса и ответов в нужные виджеты... shuffle(answers) answers[0].setText(q.right_answer) answers[1].setText(q.wrong1) answers[2].setText(q.wrong2) answers[3].setText(q.wrong3) lbl_question.setText(q.question) # вопрос lb_Correct.setText(q.right_answer) # ответ show_question() # показываем панель вопросов def show_correct(res): # установим текст в надпись 'результат' и покажем нужную панеь lbl_question.setText(res) show_result() def check_answer(): # проверяет вариант ответа, показывает панель ответов if answers[0].isChcked(): show_correct('Верно!') window.score += 1 print(f'Статистика:\nВсего вопросов: {window.total}\nПравильных ответов: {window.score}') print(f'Рейтинг: {window.score / window.total * 100}%') elif answers[1].isChecked() or answers[2].isChecked() or answers[3].isChecked(): show_correct('Неверно!') print(f'Рейтинг:{window.score / window.total * 100}%') def next_question(): # задаёт следующий вопрос из списка window.total += 1 print(f'Статистика:\nВсего вопросов: {window.total}\nПравильных ответов: {window.score}') cur_question = randint(0, len(question_list) - 1) q = question_list[cur_question] ask(q) def click_OK(): # определяет, надо показывать другой вопрос или проверить ответ на этот if btn_OK.text() == 'Ответить': check_answer() else: next_question() window.setLayout(Layout_card) window.setWindowTitle('Memory Card') window.cur_question = -1 btn_OK. clicked.connect(click_OK()) window.score = 0 # правильно window.total = 0 # всего next_question() window.show() app.exec()
Leave a Comment