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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:27:03