35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
# Служебная проверка данных викторины: у каждого вопроса 4 варианта,
|
||
# номер правильного ответа существует, тексты не пустые.
|
||
# Запуск: python check_questions.py
|
||
import re
|
||
import sys
|
||
|
||
with open("questions.js", encoding="utf-8") as f:
|
||
src = f.read()
|
||
|
||
texts = re.findall(r'text:\s*"([^"]*)"', src)
|
||
options_blocks = re.findall(r'options:\s*\[([^\]]*)\]', src)
|
||
corrects = [int(m) for m in re.findall(r'correct:\s*(\d+)', src)]
|
||
|
||
errors = []
|
||
|
||
if not (len(texts) == len(options_blocks) == len(corrects)):
|
||
errors.append("У какого-то вопроса не хватает поля (text/options/correct).")
|
||
|
||
for n, (text, block, correct) in enumerate(zip(texts, options_blocks, corrects), 1):
|
||
opts = re.findall(r'"([^"]*)"', block)
|
||
if not text.strip():
|
||
errors.append(f"Вопрос {n}: пустой текст.")
|
||
if len(opts) != 4:
|
||
errors.append(f"Вопрос {n}: вариантов {len(opts)}, а нужно 4.")
|
||
if not (0 <= correct < len(opts)):
|
||
errors.append(f"Вопрос {n}: correct={correct} указывает мимо вариантов.")
|
||
|
||
if errors:
|
||
print("ПРОБЛЕМЫ:")
|
||
for e in errors:
|
||
print(" -", e)
|
||
sys.exit(1)
|
||
|
||
print(f"OK: {len(texts)} вопросов, у всех 4 варианта и правильный ответ на месте.")
|