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

Python北半球季节判断代码同时输出季节与Invalid的修正求助

问题:如何修正日期季节判断代码的重复输出问题

我写的日期季节判断代码,部分用例会同时输出季节和Invalid,比如输入April 11会输出Spring+Invalid,请问怎么改才能得到正确输出?

题目要求:编写程序,输入日期(月份字符串与日期整数),输出北半球对应季节,同时校验输入是否为真实有效的月份与日期。北半球季节划分:春季3月20日-6月20日,夏季6月21日-9月21日,秋季9月22日-12月20日,冬季12月21日-次年3月19日。示例:输入April 11输出Spring;输入Blue 65输出Invalid。

原代码

input_month = input()
input_day = int(input())

if input_month == ('April' or 'May') and 1<= input_day <=31:
    print('Spring')
if input_month == ('March') and 20<= input_day <= 31:
    print('Spring')
if input_month == ('June') and 1<= input_day <= 20:
    print('Spring')

if input_month == ('July' or 'August') and 1<= input_day <=31:
    print('Summer')
if input_month == ('June') and 20<= input_day <= 30:
    print('Summer')
if input_month == ('September') and 1<= input_day <= 21:
    print('Summer')

if input_month == ('October') and 1<= input_day <= 31:
    print('Autumn')
if input_month == ('November') and 1<= input_day <=31:
    print('Autumn')
if input_month == ('September') and 22<= input_day <= 30:
    print('Autumn')
if input_month == ('December') and 1<= input_day <= 20:
    print('Autumn')

if input_month == ('January') and 1<= input_day <= 31:
    print('Winter')
if input_month == ('February') and 1<= input_day <= 28:
    print('Winter')
if input_month == ('December') and 21<= input_day <= 31:
    print('Winter')
if input_month == ('March') and 1 <=input_day <= 19:
    print('Winter')

else:
    print('Invalid')

测试结果

总得分: 6 / 10

1: 输出对比
0 / 1
输出不一致,查看高亮部分。
特殊字符说明
输入
April
11
你的输出
Spring
Invalid
预期输出
Spring
2: 输出对比
1 / 1
输入
March
3
你的输出
Winter
3: 输出对比
1 / 1
输入
Word
21
你的输出
Invalid
4: 输出对比
1 / 1
输入
February
39
你的输出
Invalid
5: 输出对比
0 / 1
输出不一致,查看高亮部分。
特殊字符说明
输入
June
21
你的输出
Summer
Invalid
预期输出
Summer
6: 输出对比
0 / 1
输出不一致,查看高亮部分。
特殊字符说明
输入
November
7
你的输出
Autumn
Invalid
预期输出
Autumn
7: 输出对比
1 / 1
输入
September
31
你的输出
Invalid
8: 输出对比
1 / 1
输入
December
-1
你的输出
Invalid
9: 输出对比
1 / 1
输入
February
0
你的输出
Invalid
10: 输出对比
0 / 1
输出不一致,查看高亮部分。
特殊字符说明
输入
October
31
你的输出
Autumn
Invalid
预期输出
Autumn

问题根源

  1. else分支绑定错误:最后一个else仅与紧邻的if(即判断3月1-19日为冬季的语句)绑定,而非所有季节判断逻辑。只要该if不成立,无论前面是否输出了季节,都会执行else打印Invalid。
  2. 月份判断逻辑错误:input_month == ('April' or 'May')写法无效,('April' or 'May')会返回第一个真值'April',导致May无法被识别。
  3. 日期校验不完整:未先校验月份是否合法,也未针对不同月份的最大日期做精准校验(比如April、June只有30天)。

修改后的代码

input_month = input().strip()
try:
    input_day = int(input().strip())
except ValueError:
    print('Invalid')
    exit()

# 定义合法月份及其对应最大天数
valid_months = {
    '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 input_month not in valid_months or not (1 <= input_day <= valid_months[input_month]):
    print('Invalid')
else:
    # 判断季节
    if (input_month == 'March' and input_day >=20) or \
       input_month in ['April', 'May'] or \
       (input_month == 'June' and input_day <=20):
        print('Spring')
    elif (input_month == 'June' and input_day >=21) or \
         input_month in ['July', 'August'] or \
         (input_month == 'September' and input_day <=21):
        print('Summer')
    elif (input_month == 'September' and input_day >=22) or \
         input_month in ['October', 'November'] or \
         (input_month == 'December' and input_day <=20):
        print('Autumn')
    else:
        # 剩余合法日期均为冬季
        print('Winter')

修改说明

  1. 异常处理:加入try-except捕获日期输入非整数的情况,直接输出Invalid并退出。
  2. 合法月份字典:用字典存储所有合法月份及对应最大天数,快速校验月份和日期有效性。
  3. 前置合法性校验:先判断月份是否合法、日期是否在对应月份范围内,不合法直接输出Invalid。
  4. 季节判断优化:用elif替代独立if,确保仅输出一个季节;修正月份判断逻辑为input_month in ['April', 'May'],整合季节条件让逻辑更清晰。
  5. else绑定正确:季节判断的elif链最后用else处理冬季情况,确保所有合法日期都进入对应季节分支,不会触发多余的Invalid输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:10:27