save docs
This commit is contained in:
105
debug_match.py
Normal file
105
debug_match.py
Normal file
@@ -0,0 +1,105 @@
|
||||
import pandas as pd
|
||||
|
||||
df_teachers = pd.read_excel('老师信息示例.xlsx')
|
||||
df_students = pd.read_excel('学生信息示例.xlsx')
|
||||
|
||||
teachers = []
|
||||
for _, row in df_teachers.iterrows():
|
||||
availability = {}
|
||||
for col in df_teachers.columns:
|
||||
if col not in ['老师姓名', '老师类型']:
|
||||
val = row.get(col, '')
|
||||
if pd.notna(val) and str(val).strip():
|
||||
availability[col] = str(val)
|
||||
teachers.append({
|
||||
'id': row['老师姓名'],
|
||||
'name': row['老师姓名'],
|
||||
'type': row['老师类型'],
|
||||
'availability': availability
|
||||
})
|
||||
|
||||
students = []
|
||||
for _, row in df_students.iterrows():
|
||||
history_str = row.get('历史匹配老师', '')
|
||||
history = []
|
||||
if pd.notna(history_str) and str(history_str).strip():
|
||||
history = [t.strip() for t in str(history_str).split(',')]
|
||||
|
||||
availability = {}
|
||||
for col in df_students.columns:
|
||||
if col not in ['学生姓名', '历史匹配老师']:
|
||||
val = row.get(col, '')
|
||||
if pd.notna(val) and str(val).strip():
|
||||
availability[col] = str(val)
|
||||
|
||||
students.append({
|
||||
'id': row['学生姓名'],
|
||||
'name': row['学生姓名'],
|
||||
'availability': availability,
|
||||
'history': history
|
||||
})
|
||||
|
||||
print('=== 检查数据导入 ===')
|
||||
print(f'老师数量: {len(teachers)}')
|
||||
print(f'学生数量: {len(students)}')
|
||||
print()
|
||||
|
||||
print('=== 检查老师类型分布 ===')
|
||||
new_count = sum(1 for t in teachers if t['type'] == '新')
|
||||
old_count = sum(1 for t in teachers if t['type'] == '旧')
|
||||
print(f'新老师: {new_count}, 旧老师: {old_count}')
|
||||
print()
|
||||
|
||||
print('=== 检查学生历史记录分布 ===')
|
||||
history_counts = {}
|
||||
for s in students:
|
||||
cnt = len(s['history'])
|
||||
history_counts[cnt] = history_counts.get(cnt, 0) + 1
|
||||
print('学生历史记录数量分布:')
|
||||
for cnt in sorted(history_counts.keys()):
|
||||
print(f' {cnt} 个历史老师: {history_counts[cnt]} 人')
|
||||
print()
|
||||
|
||||
def parse_slots(time_str):
|
||||
slots = []
|
||||
for slot in time_str.split(';'):
|
||||
slot = slot.strip()
|
||||
if slot and '-' in slot:
|
||||
parts = slot.split('-')
|
||||
if len(parts) == 2:
|
||||
slots.append((parts[0].strip(), parts[1].strip()))
|
||||
return slots
|
||||
|
||||
print('=== 检查时间段匹配情况 ===')
|
||||
for student in students[:5]:
|
||||
history_count = len(student['history'])
|
||||
expected_type = '旧' if history_count == 0 else ('新' if history_count % 2 == 1 else '旧')
|
||||
|
||||
print(f'\n学生: {student["name"]}')
|
||||
print(f' 期望老师类型: {expected_type}')
|
||||
print(f' 可用时间: {student["availability"]}')
|
||||
print(f' 历史老师: {student["history"]}')
|
||||
|
||||
found_match = False
|
||||
for teacher in teachers:
|
||||
if teacher['type'] != expected_type:
|
||||
continue
|
||||
if teacher['id'] in student['history']:
|
||||
continue
|
||||
|
||||
for day, s_time in student['availability'].items():
|
||||
if day not in teacher['availability']:
|
||||
continue
|
||||
|
||||
t_time = teacher['availability'][day]
|
||||
s_slots = parse_slots(s_time)
|
||||
t_slots = parse_slots(t_time)
|
||||
|
||||
for s_start, s_end in s_slots:
|
||||
for t_start, t_end in t_slots:
|
||||
if s_start == t_start and s_end == t_end:
|
||||
print(f' ✓ {teacher["name"]} 在 {day} 有匹配时间段: {s_start}-{s_end}')
|
||||
found_match = True
|
||||
|
||||
if not found_match:
|
||||
print(f' ✗ 未找到匹配的老师')
|
||||
Reference in New Issue
Block a user