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

Python if语句中如何判断日期数值是否处于1-31的指定区间

日期区间校验逻辑实现方案

现有代码的错误点

  • day == range(32)写法逻辑错误:range()生成的是可迭代的序列对象,拿整数直接和range对象做相等判断永远不会得到True,无法实现区间校验。
  • for day in range(1,day)属于多余逻辑:这段循环会覆盖你原本传入的日期输入变量,循环内的day是遍历生成的临时值,和你需要校验的原始输入日期无关,直接删掉即可。

区间判断的正确写法

Python支持链式比较表达式,判断整数是否在1到31的闭区间,直接写1 <= day <= 31即可,写法简洁、执行效率高,是日常开发最常用的写法。
如果要使用range实现相同效果,需要用成员运算符in判断值是否在range生成的序列内,即day in range(1, 32)——注意range的结束边界是开区间,要覆盖到31必须把结束参数设为32,这种写法可读性和效率都不如链式比较,不推荐日常使用。

参考代码

仅判断1月冬季场景的最简实现:

# 注意不要把输入的日期变量和循环变量重名,避免值被覆盖
# month 为字符串类型的月份输入,input_day 为int类型的日期输入
if month == 'January' and 1 <= input_day <= 31:
    print('It is Winter')

如果需要覆盖全月份的日期合法性校验+季节判断,可以用字典维护月份和对应天数的映射关系,减少重复的if判断:

# 各月份最大天数映射,闰年2月的29天可结合你的闰年判断逻辑动态调整
month_day_config = {
    'January': 31,
    'February': 28,
    'March': 31,
    'April': 30,
    'May': 31,
    'June': 30,
    'July': 31,
    'August': 31,
    'September': 30,
    'October': 31,
    'November': 30,
    'December': 31
}

if month not in month_day_config:
    print("月份输入不合法,请输入正确的英文月份名")
else:
    max_day = month_day_config[month]
    if not 1 <= input_day <= max_day:
        print(f"日期输入不合法,{month}仅有{max_day}天")
    else:
        # 日期合法后执行季节判断
        if month in ('December', 'January', 'February'):
            print('It is Winter')
        elif month in ('March', 'April', 'May'):
            print('It is Spring')
        elif month in ('June', 'July', 'August'):
            print('It is Summer')
        else:
            print('It is Autumn')

内容的提问来源于stack exchange,提问作者TylerDr16

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:31:00