函数返回错误公交票价求助:未实现时间因子且基础逻辑异常
公交票价计算代码问题排查与修复
嘿,我来帮你把这段代码的问题捋清楚,顺便改成符合规则的版本~先看看你当前代码里的核心问题:
现有代码的问题拆解
- 完全缺失时间因子处理:你的函数只接收了
age参数,但票价规则里时段是核心判断条件之一,这直接导致没法按规则计算不同时段的票价 - 条件判断逻辑全错:所有的
or都用反了,比如第一个判断age >=0 or age <=2——任何年龄都满足这个条件(要么大于等于0,要么小于等于2),应该用and来限定0-2岁的区间;后面的年龄区间判断也全是逻辑混乱,完全不符合你给出的规则 - 无用的
while True循环:函数里直接return了,这个循环根本不会执行,完全多余 - 票价数值与规则不符:比如0-2岁你设成了1.0,但规则是免费(0);其他票价也和给定的规则对不上
修复后的完整代码
按照你给出的票价规则,我重新写了逻辑清晰的版本,补上了时段参数,并且严格对应规则:
def calculate_ticket_price(age, hour): # 先处理0-2岁免费的情况 if 0 <= age <= 2: return 0.0 # 标记优惠人群:3-15岁或65岁以上 is_discount_group = (3 <= age <= 15) or (age >= 65) # 根据时段+年龄组匹配对应票价 if 6 <= hour <= 17: return 1.7 if is_discount_group else 2.7 elif 18 <= hour <= 22: return 2.5 if is_discount_group else 3.5 else: # 覆盖23点及0-5点的时段 return 3.0 if is_discount_group else 4.0 def main(): # 测试几个典型场景 # 场景1:5岁(优惠组),上午10点(6-17时段),票价1.7 price1 = calculate_ticket_price(5, 10) print(f"5岁,10点的票价:{price1}") # 场景2:30岁(成人组),晚上20点(18-22时段),票价3.5 price2 = calculate_ticket_price(30, 20) print(f"30岁,20点的票价:{price2}") # 场景3:70岁(优惠组),凌晨2点(0-5时段),票价3.0 price3 = calculate_ticket_price(70, 2) print(f"70岁,2点的票价:{price3}") # 场景4:1岁,任何时段,票价0.0 price4 = calculate_ticket_price(1, 12) print(f"1岁,12点的票价:{price4}") if __name__ == '__main__': main()
代码说明
- 新增了
hour参数(接收0-23的整数,代表当前时段),补上了缺失的时间因子 - 先判断0-2岁的免费情况,逻辑优先级清晰
- 用
is_discount_group变量标记优惠人群,避免重复判断年龄区间,提升可读性 - 按时段分分支,每个分支根据年龄组返回对应票价,完全匹配你给出的规则
- 加了几个测试示例,方便你快速验证不同场景的结果
内容的提问来源于stack exchange,提问作者parapluie
相关产品推荐
相关产品推荐

