|
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)}.") |
|
|
|
|
|
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() |
|
|