You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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")

为啥这么改?

  1. 日期范围修正:原代码的dob_start错写成1911年1月31日,会漏掉1911年1月1日到30日出生的人;而公民身份要求1922年之前,用< 1922-01-01比搞个区间判断更直接,不容易出错。
  2. 条件逻辑修正:直接正向判断「出生日期在目标区间 并且 签发时间早于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

火山引擎 最新活动