You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何根据用户选择的讲师索引匹配输出对应完整文本行

Python实现按讲师筛选课程行的指导

实现思路

  • 优化原始数据存储逻辑:避免后续二次读取文件,遍历文件时除了存储讲师列表,同时存储所有完整的原始行数据
  • 处理用户输入合法性校验:将用户输入的数字转换为整数,判断是否在可选的索引范围内,避免程序报错
  • 匹配并输出结果:根据用户选择的索引拿到对应讲师名,筛选出所有该讲师对应的行输出

现有问题修正&代码实现

你原有代码存在笔误:拆分后的字段变量是f,但判断长度时写的是未定义的fields,需要先修正。

完整可运行代码示例(无第三方依赖)

# 提前读取文件所有行,避免后续二次读取,替换为你实际的文件路径
with open('course.txt', 'r', encoding='utf-8') as f:
    all_lines = [line.strip() for line in f if line.strip()]

# 字段存储逻辑优化
subjects = []
lecturers = []
course_info = []  # 新增:存储每一行的(讲师名, 原始行)映射关系

for line in all_lines:
    fields = line.split(',')
    if len(fields) == 8:
        subjects.append(fields[0])
        lect_name = fields[7].strip()
        lecturers.append(lect_name)
        course_info.append( (lect_name, line) )

# 讲师选择逻辑优化
def L(lecturer_list):
    print("\nLecturers\n---------")
    for ind, name in enumerate(lecturer_list, start=1):
        print(f"[{ind}] {name}")
    # 循环校验用户输入合法性
    while True:
        pick = input("\npick a lecturer: ")
        # 判断输入是否为数字
        if not pick.isdigit():
            print("请输入有效的数字编号")
            continue
        pick_idx = int(pick) - 1
        # 判断索引是否在合法范围
        if 0 <= pick_idx < len(lecturer_list):
            target_lecturer = lecturer_list[pick_idx]
            break
        else:
            print(f"请输入1到{len(lecturer_list)}之间的数字")
    # 筛选所有对应讲师的行并输出
    print(f"\n--- {target_lecturer} 的所有课程 ---")
    for lec, line in course_info:
        if lec == target_lecturer:
            print(line)

# 交互选择逻辑
while True:
    filter_type = input("Choose filter. Or [Q]uit: ")
    if filter_type.upper() == 'Q':
        break
    elif filter_type.upper() == 'S':
        # 此处补充你原有按科目筛选的逻辑
        break
    elif filter_type.upper() == 'L':
        L(lecturers)
        break

如果你确实需要每次筛选时重新读取文件(比如文件内容会实时更新),可以把筛选部分的逻辑替换为以下代码,不需要预存course_info:

print(f"\n--- {target_lecturer} 的所有课程 ---")
# 替换为你实际的文件路径
with open('course.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        fields = line.split(',')
        if len(fields) == 8 and fields[7].strip() == target_lecturer:
            print(line)

内容的提问来源于stack exchange,提问作者Dom Leigh-Pop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 12:15:06