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
相关产品推荐
相关产品推荐

