Python多日期条件判断逻辑修正:如何实现仅当双条件同时满足时执行身份取消分支
搞定这个公民身份取消逻辑的bug!
嘿,咱们先把需求掰扯清楚:只有当两个条件同时凑齐的时候,才要取消公民身份:
- 出生日期卡在1911年1月1日到1914年12月31日之间(对了,你原代码里把
dob_start设成1911年1月31日了,这明显不对,得从1月1日开始算对吧?) - 公民身份的签发时间在1922年之前(也就是得早于1922年1月1日,原代码里的
cit_end设成1922年底,这也不符合需求)
再看你写的原条件:if not dob_start <= dob <= dob_end and not cit_start <= citizenship <= cit_end,这逻辑完全搞反了啊!它现在的意思是「出生日期不在目标区间 并且 签发时间也不在目标区间」的时候才保留身份,剩下的情况都取消——这和咱们要的正好相反,而且需求明明是两个条件同时满足才取消。
修正后的代码
from datetime import datetime # 先把日期范围改对,贴合需求 dob_start = datetime(year=1911, month=1, day=1) # 修正原代码的1月31日错误 dob_end = datetime(year=1914, month=12, day=31) cit_cutoff = datetime(year=1922, month=1, day=1) # 1922年之前=小于1922年1月1日 # 测试用例 citizenship = datetime(year=1920, month=4, day=15) dob = datetime(year=1910, month=5, day=5) # 核心逻辑:两个条件同时满足才取消,否则保留 if dob_start <= dob <= dob_end and citizenship < cit_cutoff: print("cancelled") else: print("keep it")
为啥这么改?
- 日期范围修正:原代码的
dob_start错写成1911年1月31日,会漏掉1911年1月1日到30日出生的人;而公民身份要求1922年之前,用< 1922-01-01比搞个区间判断更直接,不容易出错。 - 条件逻辑修正:直接正向判断「出生日期在目标区间 并且 签发时间早于1922年」,满足这个组合条件就执行取消操作,否则保留身份,完美匹配需求描述。
你可以换几个测试用例验证:
- 比如dob是1912年5月,citizenship是1921年10月:会输出
cancelled - dob是1910年(不在1911-1914区间),citizenship是1921年:输出
keep it - dob是1913年,citizenship是1922年1月:输出
keep it
内容的提问来源于stack exchange,提问作者michael1982




