# -*- coding: utf-8 -*- import io, re, sys def find_oj_section(html, start): n = len(html) depth = 1 i = start + len('
0 and i < n: o = html.find('', i) if c == -1: return -1 if o != -1 and o < c: depth += 1 i = o + 4 else: depth -= 1 i = c + 6 return i for f in sys.argv[1:]: c = io.open(f, encoding='utf-8').read() pat = re.compile(r'
') print('===', f.replace('\\', '/').split('/')[-1]) total_panels = 0 bad = [] for m in pat.finditer(c): name = m.group(1) end = find_oj_section(c, m.start()) blk = c[m.start():end] expl = blk.count('class="oj-explains"') panels = blk.count('class="prob-detail"') total_panels += panels if expl != 1 or panels != 5: bad.append('%s: expl=%d panels=%d' % (name, expl, panels)) print(' oj-sections:', c.count('data-oj-section='), '| total prob-detail:', total_panels) if bad: print(' MISMATCH blocks:', bad) else: print(' OK: every student has exactly 1 题目讲解 block with 5 panels') print(' div balance:', c.count(''))