如何实现基于字典值匹配的教师代课查询功能?
教师缺勤代课匹配程序问题解决
现有字典结构
dic1={'T1':{'ID':101,'Salary':20000,'ML':15,'DL':10,'CL':12,'P1':'8th','P2':'9th','P3':'10th','FP':4}, 'T2':{'ID':102,'Salary':15000,'ML':15,'DL':10,'CL':12,'P4':'10th','P5':'7th','P6':'12th','FP':2}, 'T3':{'ID':103,'Salary':15000,'ML':15,'DL':10,'CL':12,'P7':'5th','P8':'10th','P2':'12th','FP':1}, 'T4':{'ID':104,'Salary':15000,'ML':15,'DL':10,'CL':12,'P4':'4th','P6':'9th','P1':'10th','FP':3}}
需求说明
输入缺勤教师姓名,识别该教师所有授课时段(以P开头的字段),输出其他教师中空课时段(FP字段)与这些授课时段序号匹配的教师。例如:若T1缺勤,其授课时段为P1、P2、P3(对应序号1、2、3),需输出FP值为1的T3、FP值为2的T2、FP值为3的T4。
原代码问题分析
你写的代码存在逻辑错误:
- 变量
k是缺勤教师所有P开头字段组成的字典,但后续遍历中拿单个键值对j和整个字典k对比,永远不可能相等,因此不会触发输出。 - 循环结束后的
print语句只会输出最后一次循环的变量值,没有实际意义。
修正后的代码
# 定义教师字典 dic1={'T1':{'ID':101,'Salary':20000,'ML':15,'DL':10,'CL':12,'P1':'8th','P2':'9th','P3':'10th','FP':4}, 'T2':{'ID':102,'Salary':15000,'ML':15,'DL':10,'CL':12,'P4':'10th','P5':'7th','P6':'12th','FP':2}, 'T3':{'ID':103,'Salary':15000,'ML':15,'DL':10,'CL':12,'P7':'5th','P8':'10th','P2':'12th','FP':1}, 'T4':{'ID':104,'Salary':15000,'ML':15,'DL':10,'CL':12,'P4':'4th','P6':'9th','P1':'10th','FP':3}} a = input("Enter Teacher name: ") # 提取缺勤教师授课时段对应的FP序号(如P1→1,P2→2) absent_period_ids = [int(key[1:]) for key in dic1[a].keys() if key.startswith('P')] # 遍历所有教师,筛选符合条件的代课教师 for teacher_id, teacher_info in dic1.items(): if teacher_id == a: continue # 跳过缺勤教师自身 if teacher_info['FP'] in absent_period_ids: print(f"教师{teacher_id}的空课时段FP={teacher_info['FP']},可代缺勤教师的P{teacher_info['FP']}时段")
字典结构优化建议
原字典字段分散,可读性和维护性较差,建议按功能分组整理:
dic1 = { 'T1': { 'ID': 101, 'Salary': 20000, 'Leaves': {'ML': 15, 'DL': 10, 'CL': 12}, 'TeachingPeriods': {'P1': '8th', 'P2': '9th', 'P3': '10th'}, 'FreePeriod': 4 }, 'T2': { 'ID': 102, 'Salary': 15000, 'Leaves': {'ML': 15, 'DL': 10, 'CL': 12}, 'TeachingPeriods': {'P4': '10th', 'P5': '7th', 'P6': '12th'}, 'FreePeriod': 2 }, 'T3': { 'ID': 103, 'Salary': 15000, 'Leaves': {'ML': 15, 'DL': 10, 'CL': 12}, 'TeachingPeriods': {'P7': '5th', 'P8': '10th', 'P2': '12th'}, 'FreePeriod': 1 }, 'T4': { 'ID': 104, 'Salary': 15000, 'Leaves': {'ML': 15, 'DL': 10, 'CL': 12}, 'TeachingPeriods': {'P4': '4th', 'P6': '9th', 'P1': '10th'}, 'FreePeriod': 3 } }
优化后结构更清晰,后续提取授课时段或请假信息时,无需再筛选字段,直接通过分组键即可获取。
内容的提问来源于stack exchange,提问作者123
相关产品推荐
相关产品推荐

