Python季节判断代码:使用'in'无输出,仅'not in'有效问题求助
问题原因解析
你的核心问题出在**month_list的结构和in运算符的判断逻辑**上:
month_list是一个包含四个子列表的列表,每个元素都是类似['January', 'February', ...]的月份集合,而input_month是字符串类型的月份名称。- 当你写
input_month in month_list[0:]时,Python会检查这个字符串是否是month_list里的直接元素——也就是是否等于某个子列表,这显然不可能,所以这个条件永远为False。此时month_check函数不会执行任何代码,直接结束,自然没有任何输出。 - 而用
input_month not in month_list[0:]时,条件永远为True,所以会调用which_month(),程序才会继续执行并输出结果。
另外你的代码还有几个额外问题:
which_dates2函数里错误使用了month_spring列表(该函数对应夏季判断),which_dates3里错用了month_winter,逻辑完全混乱。- 日期判断里出现了
<=32的错误(没有月份有32天)。 month_check里的return which_month()没必要,直接调用which_month()即可,因为该函数没有返回值。- 部分分支未处理无效日期的情况(比如
which_dates1里December的分支,日期不符合时没有输出Invalid)。
修正后的代码
input_month = input().strip() input_day = int(input()) # 定义各季节对应的月份及日期区间规则 season_rules = { 'Winter': [ ('January', (1, 31)), ('February', (1, 29)), # 简单处理闰年,需严格判断可额外添加逻辑 ('March', (1, 19)), ('December', (21, 31)) ], 'Spring': [ ('March', (20, 31)), ('April', (1, 30)), ('May', (1, 31)), ('June', (1, 20)) ], 'Summer': [ ('June', (21, 30)), ('July', (1, 31)), ('August', (1, 31)), ('September', (1, 21)) ], 'Autumn': [ ('September', (22, 30)), ('October', (1, 31)), ('November', (1, 30)), ('December', (1, 20)) ] } def check_season(): # 先验证月份是否合法 valid_months = [month for rule in season_rules.values() for month, _ in rule] if input_month not in valid_months: print('Invalid') return # 遍历季节规则判断日期 for season, rules in season_rules.items(): for month, (start_day, end_day) in rules: if input_month == month: if start_day <= input_day <= end_day: print(season) return else: print('Invalid') return check_season()
修正说明
- 用字典重新组织季节规则,逻辑更清晰,避免子列表嵌套导致的判断混乱。
- 先统一验证月份合法性,再匹配对应的日期区间。
- 修正了日期范围的错误,每个月份使用正确的天数上限。
- 所有分支都处理了无效输入的情况,不会出现无输出的问题。
内容的提问来源于stack exchange,提问作者Peraza99
相关产品推荐
相关产品推荐

