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

Python节目查询功能:输入校验与实例访问问题求解

解决方案

核心思路

  1. 先提取所有有效节目名,用于输入合法性校验
  2. 循环接收用户输入,过滤空输入、无效节目名,直到获取合法输入
  3. 根据合法节目名查找对应数据,按要求格式输出

完整代码(基于Program类实现)

先修正类定义和数据格式(修复语法错误),再实现校验与查询逻辑:

class Program:
    def __init__(self, channel, start, end, name, viewers, percentage):
        self.channel = channel
        self.start = start
        self.end = end
        self.name = name
        self.viewers = viewers 
        self.percentage = percentage  # 补全未赋值的参数

# 修正后的节目数据嵌套列表(时间用字符串避免语法错误)
programs_raw = [
    [1, '16:00', '17:45', 100, 'Matinee: The kiss on the cross'],
    [1, '17:45', '17:50', 45, 'The stock market today'],
    [2, '16:45', '17:50', 30, 'News'],
    [4, '17:25', '17:50', 10, 'Home building'],
    [5, '15:45', '16:50', 28, 'Reality']
]

# 转换为Program实例列表
programs = []
for item in programs_raw:
    # 补全percentage参数(这里用0作为默认值,可根据实际调整)
    prog = Program(item[0], item[1], item[2], item[4], item[3], 0)
    programs.append(prog)

def get_valid_program_name():
    # 提取所有有效节目名,存入集合提升查询效率
    valid_names = {p.name for p in programs}
    print('Enter the name of the desired program:')
    
    while True:
        user_input = input('>').strip()
        # 处理空输入
        if not user_input:
            print('请输入非空的节目名称,请重试。')
            continue
        # 校验节目名是否存在
        if user_input in valid_names:
            return user_input
        else:
            print(f"'{user_input}' 不在节目单中,请输入有效的节目名称。")
            print(f"可选节目:{', '.join(valid_names)}")

def get_formatted_output(program_name):
    # 根据节目名查找对应实例并格式化输出
    for prog in programs:
        if prog.name == program_name:
            # 将时间的冒号替换为点,匹配要求的输出格式
            start = prog.start.replace(':', '.')
            end = prog.end.replace(':', '.')
            return f"{prog.name} {start}-{end} has {prog.viewers} viewers"

# 主程序
if __name__ == "__main__":
    valid_name = get_valid_program_name()
    print(get_formatted_output(valid_name))

无需类的简化实现(直接用嵌套列表)

如果不想使用类,直接基于原始嵌套列表开发:

programs_list = [
    [1, '16:00', '17:45', 100, 'Matinee: The kiss on the cross'],
    [1, '17:45', '17:50', 45, 'The stock market today'],
    [2, '16:45', '17:50', 30, 'News'],
    [4, '17:25', '17:50', 10, 'Home building'],
    [5, '15:45', '16:50', 28, 'Reality']
]

def get_valid_program_name():
    valid_names = [item[4] for item in programs_list]
    print('Enter the name of the desired program:')
    
    while True:
        user_input = input('>').strip()
        if not user_input:
            print('请输入非空的节目名称,请重试。')
            continue
        if user_input in valid_names:
            return user_input
        else:
            print(f"'{user_input}' 不在节目单中,请输入有效的节目名称。")
            print(f"可选节目:{', '.join(valid_names)}")

def get_formatted_output(program_name):
    for item in programs_list:
        if item[4] == program_name:
            start = item[1].replace(':', '.')
            end = item[2].replace(':', '.')
            return f"{program_name} {start}-{end} has {item[3]} viewers"

if __name__ == "__main__":
    valid_name = get_valid_program_name()
    print(get_formatted_output(valid_name))

关键说明

  • 输入校验:通过提取所有有效节目名,判断用户输入是否在列表内;同时处理空输入,避免无效值。
  • 数据查询:遍历节目集合,匹配节目名后提取时间、观众数,按要求格式化输出。
  • 语法修正:原嵌套列表中的时间(如16:00)需改为字符串,否则Python会识别为非法语法。

内容的提问来源于stack exchange,提问作者Ella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:35:16