File size: 5,715 Bytes
9ed4940
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74e6007
9ed4940
74e6007
9ed4940
 
 
 
 
 
 
 
 
 
 
 
 
 
74e6007
 
fe7df62
9ed4940
e6c03ed
9ed4940
74e6007
9ed4940
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74e6007
 
 
 
 
 
 
9ed4940
 
 
 
74e6007
9ed4940
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import streamlit as st
import random

def iq_test():
    # Вопросы для теста
    questions = [
        {"category": "Логика", "question": "Какое из слов не связано с остальными: Кошка, Собака, Лиса, Книга?",
         "options": ["Кошка", "Собака", "Лиса", "Книга"], "correct": 4},
        {"category": "Логика", "question": "Если все яблоки красные, а все красные объекты круглые, то яблоки — это?",
         "options": ["Квадратные", "Красные", "Круглые", "Круглые и красные"], "correct": 4},
        {"category": "Математика", "question": "Какое число следует за рядом: 3, 6, 12, 24, ?",
         "options": ["36", "48", "46", "30"], "correct": 2},
        {"category": "Математика", "question": "Какое число является корнем квадратного уравнения x² - 16 = 0?",
         "options": ["4", "8", "±4", "0"], "correct": 3},
        {"category": "Последовательности", "question": "Найдите пропущенный символ: A, C, E, G, ?",
         "options": ["H", "I", "J", "K"], "correct": 2},
        {"category": "Последовательности", "question": "Какое число пропущено: 2, 4, 8, 16, ?",
         "options": ["24", "28", "32", "40"], "correct": 3},
        {"category": "Аналогии", "question": "Слон относится к млекопитающим, как воробей к:",
         "options": ["Рыбам", "Млекопитающим", "Птицам", "Рептилиям"], "correct": 3},
        {"category": "Аналогии", "question": "Дерево — лист: книга — ?",
         "options": ["Обложка", "Страница", "Перо", "Ручка"], "correct": 2},
        {"category": "Пространственное мышление", "question": "Если повернуть квадрат на 90°, то сколько углов он будет иметь?",
         "options": ["4", "6", "8", "Количество не изменится"], "correct": 4},
        {"category": "Пространственное мышление", "question": "Какая фигура лишняя: квадрат, круг, треугольник, куб?",
         "options": ["Квадрат", "Круг", "Треугольник", "Куб"], "correct": 4}
    ]

    random.shuffle(questions)  # Перемешиваем вопросы

    # Переменные состояния
    if "current_question" not in st.session_state:
        st.session_state.current_question = 0
        st.session_state.score = 0
        st.session_state.responses = []  # Хранение ответов пользователя

    # Логика отображения вопросов
    if st.session_state.current_question < len(questions):
        current_q = questions[st.session_state.current_question]

        st.subheader(f"Категория: {current_q['category']}")
        st.write(f"Вопрос {st.session_state.current_question + 1}: {current_q['question']}")

        options = current_q["options"]
        correct_answer = current_q["correct"]

        # Формируем кнопки для выбора ответа
        for i, option in enumerate(options, 1):
            if st.button(option, key=f"q{st.session_state.current_question}_opt{i}"):
                if i == correct_answer:
                    st.session_state.score += 1
                # Сохраняем выбор пользователя
                st.session_state.responses.append({"question": current_q["question"], "selected": option, "correct": options[correct_answer - 1]})
                # Переход к следующему вопросу
                st.session_state.current_question += 1

    else:
        # Вывод результатов в конце теста
        st.header("Тест завершен!")
        st.write(f"Вы набрали {st.session_state.score} из {len(questions)} баллов.")
        
        iq_score = 80 + (st.session_state.score / len(questions)) * 60
        st.write(f"Ваш расчетный IQ: {int(iq_score)}.")

        # Интерпретация IQ
        if iq_score >= 140:
            st.success("Ваш уровень интеллекта: Гений!")
        elif 120 <= iq_score < 140:
            st.success("Ваш уровень интеллекта: Очень высокий!")
        elif 100 <= iq_score < 120:
            st.info("Ваш уровень интеллекта: Средний.")
        elif 80 <= iq_score < 100:
            st.warning("Ваш уровень интеллекта: Ниже среднего.")
        else:
            st.error("Результат низкий. Продолжайте тренироваться!")

        # Показать ответы на вопросы
        st.write("\nПодробные результаты:")
        for response in st.session_state.responses:
            st.write(f"Вопрос: {response['question']}")
            st.write(f"Ваш ответ: {response['selected']}")
            st.write(f"Правильный ответ: {response['correct']}\n")

        # Сбросить тест
        if st.button("Пройти тест заново"):
            st.session_state.current_question = 0
            st.session_state.score = 0
            st.session_state.responses = []

if __name__ == "__main__":
    st.title("IQ тест")
    iq_test()