公交模拟器乘客年龄范围搜索功能开发技术求助
公交模拟器年龄范围搜索功能修改方案
修改思路
- 兼容两种输入格式:单一年龄(如
30)和年龄区间(如55-67) - 解析用户输入,区分搜索类型后执行对应匹配逻辑
- 调整结果输出,适配不同搜索场景的提示
修改后的完整代码
class Buss: namn_passagerare = [] # 存储乘客姓名 passagerare = [] # 存储乘客年龄 antal_passagerare = 0 # 乘客数量 max_passagerare = 3 # 公交车最大载客量 def clear(): # 可补充清屏逻辑,例如导入os后调用 os.system('cls' if os.name == 'nt' else 'clear') pass def find_age(): try: if Buss.antal_passagerare > 0: clear() print(Buss.namn_passagerare) # 打印乘客姓名列表 print(Buss.passagerare) # 打印乘客年龄列表 leta_input = input('搜索年龄(支持单一年龄或格式如55-67的区间): ') # 解析输入内容 if '-' in leta_input: # 处理年龄区间 start_str, end_str = leta_input.split('-', 1) start_age = int(start_str.strip()) end_age = int(end_str.strip()) # 确保起始年龄不大于结束年龄 if start_age > end_age: start_age, end_age = end_age, start_age # 查找匹配区间的乘客索引 hitta = [i for i, age in enumerate(Buss.passagerare) if start_age <= age <= end_age] if hitta: print(f'年龄在{start_age}-{end_age}之间的乘客位于位置: {", ".join(map(str, hitta))}') else: print(f'未找到年龄在{start_age}-{end_age}之间的乘客。') else: # 处理单一年龄搜索 leta = int(leta_input.strip()) hitta = [i for i, age in enumerate(Buss.passagerare) if age == leta] if hitta: print(f'年龄为{leta}的乘客位于位置: {", ".join(map(str, hitta))}') else: print(f'未找到年龄为{leta}的乘客。') input('按Enter继续') else: clear() except ValueError: print('输入格式错误,请输入数字或num-num格式的区间。') input('按Enter继续')
关键修改说明
输入解析逻辑:
- 将输入转为字符串处理,通过
-判断是否为区间搜索 - 拆分区间字符串后转换为整数,同时处理起始年龄大于结束年龄的异常情况
- 增加异常捕获,处理非数字输入的错误场景
- 将输入转为字符串处理,通过
匹配条件调整:
- 区间搜索时使用
start_age <= age <= end_age作为判断条件 - 保留原单一年龄的精确匹配逻辑
- 区间搜索时使用
输出优化:
- 根据搜索类型(单一/区间)生成对应的提示文本
- 增加输入格式错误的提示信息
内容的提问来源于stack exchange,提问作者Dominik Lundén
相关产品推荐
相关产品推荐

