Python付费通话计价器if语句仅返回最近分支结果问题求助
公用电话计费计算器代码问题修复方案
问题原因
- 逻辑运算符使用错误:你编写的
day == "Mon" or "Tue" or "Wed" or "Thr" or "Fri"写法不符合Python语法规则,非空字符串的布尔值永远为True,所以不管输入的day是什么,这部分判断结果永远是True,再加上and优先级高于or,所以两个if判断的整体条件永远为True,代码会按顺序执行两个if里的赋值,最终cost永远是第二个if赋值的duration * 0.25的结果,和输入参数无关。 - 时间判断逻辑矛盾:第二个if中的时间条件
start_time < 08.00 and start_time > 18.00不可能成立,同一个时间无法同时小于8点又大于18点,即使你删掉星期判断,这部分分支也永远不会触发。 - 隐藏的时间单位不匹配问题:你要求用户输入hhmm格式的时间,例如2350,直接转成float后是2350.0,远大于你设置的18.00阈值,时间判断的基准完全错误。
修复方案
步骤1:修正周内判断逻辑
将周判断改为更简洁的in语法,判断输入的星期是否在工作日列表中。
步骤2:修正第二组时间判断逻辑
将时间条件里的and改为or,匹配“不在8点到18点区间”的业务逻辑。
步骤3:修正时间单位转换
将输入的hhmm格式时间除以100,转成小时单位,和判断阈值对齐。
步骤4:修正拼写错误
原代码中的Thr是错误的周四缩写,正确为Thu,周日常用缩写为Sun而非Sund,可根据实际需求调整。
修复后的完整代码
day = str(input('Enter the day the call started at: ')) # 把hhmm格式的时间转成小时单位 start_time = float(input('Enter the time the call started at (hhmm): ')) / 100 duration = float(input('Enter the duration of the call (in minutes):')) cost = duration # 工作日8:00-18:00 费率0.4 if (8.00 <= start_time <= 18.00) and (day in ["Mon", "Tue", "Wed", "Thu", "Fri"]): cost = duration * 0.40 # 工作日其余时间 费率0.25 if (start_time < 8.00 or start_time > 18.00) and (day in ["Mon", "Tue", "Wed", "Thu", "Fri"]): cost = duration * 0.25 print(f'${cost}')
测试验证
- 输入1:Fri,2350,22 → 2350/100=23.5>18,属于工作日非高峰,费用=22*0.25=5.5
- 输入2:Sun,2350,22 → 不属于工作日,按初始值计算,费用=22.0
结果和预期一致。
内容的提问来源于stack exchange,提问作者Chexz
相关产品推荐
相关产品推荐

