Python使用datetime计算季度结果异常,输出不符合预期求助
代码错误原因与修正方案
错误核心原因
你的if/or条件写法确实存在逻辑错误:
Python中or为逻辑运算符,if month ==1 or 2 or 3的实际执行逻辑是:
- 先判断
month == 1的布尔结果 - 若上一步结果为
False,继续判断2的布尔值——所有非0整数的布尔值都是True,所以该条件永远会判定为成立 - 后续3个
if语句的条件也会全部判定为成立,quarter的值会被后续条件不断覆盖,最终保留最后一个if赋值的Q4,所以输出结果不符合预期。
正确实现方案
方案1:修正条件判断逻辑
每个判断分支都明确写全比较规则,同时替换为elif避免无效判断和值覆盖:
import datetime date = datetime.datetime(2022,1,1) month = date.month year = date.year if month == 1 or month == 2 or month == 3: quarter = 'Q1' elif month == 4 or month == 5 or month == 6: quarter = 'Q2' elif month == 7 or month == 8 or month == 9: quarter = 'Q3' elif month == 10 or month == 11 or month == 12: quarter = 'Q4' lookup = quarter + str(year) print(lookup)
方案2:简化为成员判断
用in关键字判断月份是否属于对应季度的月份集合,写法更简洁:
if month in (1,2,3): quarter = 'Q1' elif month in (4,5,6): quarter = 'Q2' elif month in (7,8,9): quarter = 'Q3' else: quarter = 'Q4'
方案3:数学计算直接生成季度
利用整数除法规则,一行代码即可计算出季度,无需多分支判断:
quarter = f'Q{(month - 1) // 3 + 1}'
内容的提问来源于stack exchange,提问作者mhooper
相关产品推荐
相关产品推荐

