Update app.py
Browse files
app.py
CHANGED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import random
|
3 |
+
|
4 |
+
def iq_test():
|
5 |
+
# Вопросы для теста
|
6 |
+
questions = [
|
7 |
+
{"category": "Логика", "question": "Какое из слов не связано с остальными: Кошка, Собака, Лиса, Книга?",
|
8 |
+
"options": ["Кошка", "Собака", "Лиса", "Книга"], "correct": 4},
|
9 |
+
{"category": "Логика", "question": "Если все яблоки красные, а все красные объекты круглые, то яблоки — это?",
|
10 |
+
"options": ["Квадратные", "Красные", "Круглые", "Круглые и красные"], "correct": 4},
|
11 |
+
{"category": "Математика", "question": "Какое число следует за рядом: 3, 6, 12, 24, ?",
|
12 |
+
"options": ["36", "48", "46", "30"], "correct": 2},
|
13 |
+
{"category": "Математика", "question": "Какое число является корнем квадратного уравнения x² - 16 = 0?",
|
14 |
+
"options": ["4", "8", "±4", "0"], "correct": 3},
|
15 |
+
{"category": "Последовательности", "question": "Найдите пропущенный символ: A, C, E, G, ?",
|
16 |
+
"options": ["H", "I", "J", "K"], "correct": 2},
|
17 |
+
{"category": "Последовательности", "question": "Какое число пропущено: 2, 4, 8, 16, ?",
|
18 |
+
"options": ["24", "28", "32", "40"], "correct": 3},
|
19 |
+
{"category": "Аналогии", "question": "Слон относится к млекопитающим, как воробей к:",
|
20 |
+
"options": ["Рыбам", "Млекопитающим", "Птицам", "Рептилиям"], "correct": 3},
|
21 |
+
{"category": "Аналогии", "question": "Дерево — лист: книга — ?",
|
22 |
+
"options": ["Обложка", "Страница", "Перо", "Ручка"], "correct": 2},
|
23 |
+
{"category": "Пространственное мышление", "question": "Если повернуть квадрат на 90°, то сколько углов он будет иметь?",
|
24 |
+
"options": ["4", "6", "8", "Количество не изменится"], "correct": 4},
|
25 |
+
{"category": "Пространственное мышление", "question": "Какая фигура лишняя: квадрат, круг, треугольник, куб?",
|
26 |
+
"options": ["Квадрат", "Круг", "Треугольник", "Куб"], "correct": 4}
|
27 |
+
]
|
28 |
+
|
29 |
+
random.shuffle(questions) # Перемешиваем вопросы
|
30 |
+
|
31 |
+
# Переменные состояния
|
32 |
+
if "current_question" not in st.session_state:
|
33 |
+
st.session_state.current_question = 0
|
34 |
+
st.session_state.score = 0
|
35 |
+
|
36 |
+
# Получение текущего вопроса
|
37 |
+
if st.session_state.current_question < len(questions):
|
38 |
+
current_q = questions[st.session_state.current_question]
|
39 |
+
|
40 |
+
st.subheader(f"Категория: {current_q['category']}")
|
41 |
+
st.write(f"Вопрос {st.session_state.current_question + 1}: {current_q['question']}")
|
42 |
+
|
43 |
+
options = current_q["options"]
|
44 |
+
correct_answer = current_q["correct"]
|
45 |
+
|
46 |
+
# Формируем кнопки для выбора ответа
|
47 |
+
for i, option in enumerate(options, 1):
|
48 |
+
if st.button(option, key=f"q{st.session_state.current_question}_opt{i}"):
|
49 |
+
if i == correct_answer:
|
50 |
+
st.success("Правильно!")
|
51 |
+
st.session_state.score += 1
|
52 |
+
else:
|
53 |
+
st.error(f"Неправильно. Правильный ответ: {options[correct_answer - 1]}")
|
54 |
+
|
55 |
+
st.session_state.current_question += 1
|
56 |
+
st.experimental_rerun() # Перезагрузка страницы для следующего вопроса
|
57 |
+
else:
|
58 |
+
# Вывод результата
|
59 |
+
st.header("Тест завершен!")
|
60 |
+
st.write(f"Вы набрали {st.session_state.score} из {len(questions)} баллов.")
|
61 |
+
|
62 |
+
iq_score = 80 + (st.session_state.score / len(questions)) * 60
|
63 |
+
st.write(f"Ваш расчетный IQ: {int(iq_score)}.")
|
64 |
+
|
65 |
+
# Интерпретация IQ
|
66 |
+
if iq_score >= 140:
|
67 |
+
st.success("Ваш уровень интеллекта: Гений!")
|
68 |
+
elif 120 <= iq_score < 140:
|
69 |
+
st.success("Ваш уровень интеллекта: Очень высокий!")
|
70 |
+
elif 100 <= iq_score < 120:
|
71 |
+
st.info("Ваш уровень интеллекта: Средний.")
|
72 |
+
elif 80 <= iq_score < 100:
|
73 |
+
st.warning("Ваш уровень интеллекта: Ниже среднего.")
|
74 |
+
else:
|
75 |
+
st.error("Результат низкий. Продолжайте тренироваться!")
|
76 |
+
|
77 |
+
# Сбросить тест
|
78 |
+
if st.button("Пройти тест заново"):
|
79 |
+
st.session_state.current_question = 0
|
80 |
+
st.session_state.score = 0
|
81 |
+
st.experimental_rerun()
|
82 |
+
|
83 |
+
if __name__ == "__main__":
|
84 |
+
st.title("IQ тест")
|
85 |
+
iq_test()
|