Untitled
unknown
python
2 years ago
6.7 kB
18
Indexable
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()Editor is loading...
Leave a Comment