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

ZyBooks季节判定实验作业代码报错排查(9月31日、11月7日用例异常)

问题排查结果

根因说明

代码核心错误出在7月、8月的条件判断写法上,这是导致两个测试用例输出异常的直接原因:

  • 原代码写的elif input_month == 'July' or 'August':存在逻辑优先级错误,Python会先算==判断,再算or运算,等价于elif (input_month == 'July') or bool('August'):
  • 非空字符串在Python中布尔值恒为True,因此这个分支条件永远成立,会拦截所有6月之后、未被前面分支匹配的输入,导致后续9-12月的判断分支完全无法执行

错误对应表现

  • 测试用例11月7日:输入月份November不匹配1-6月的分支条件,直接被上述永远成立的7/8月分支拦截,判断日期7在1-31范围内后直接输出Summer,根本不会走到11月对应输出Autumn的分支,结果错误。
  • 测试用例9月31日:9月的输入同样被7/8月分支拦截,该分支仅校验日期是否在1-31范围内,31符合条件就直接输出Summer,完全不会走到9月分支里“9月最多30天”的合法性校验,既没有识别出9月31日是非法日期,也没有执行9月的季节判断逻辑,结果错误。

修正方案

将7/8月的错误判断条件替换为正确的多值匹配写法,两种写法均可:

# 写法1
elif input_month == 'July' or input_month == 'August':
# 写法2
elif input_month in ('July', 'August'):

修正后完整代码

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

months = ('January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December')
if not (input_month in months):
    print ('Invalid')
    
elif input_month == 'January':
    if not (0 < input_day <= 31):
        print('Invalid')
    else:
        print('Winter')
        
elif input_month == 'February':
    if not (0 < input_day <= 29):
        print('Invalid')
    else:
        print('Winter')
        
elif input_month == 'March':
    if (0 < input_day < 20):
        print('Winter')
    elif (20 <= input_day <= 31):
        print('Spring')
    else:
        print('Invalid')
        
elif input_month == 'April':
    if not (0 < input_day <= 30):
        print('Invalid')
    else:
        print('Spring')
        
elif input_month == 'May':
    if not (0 < input_day <= 31):
        print('Invalid')
    else:
        print('Spring')
        
elif input_month == 'June':
    if (0 < input_day <= 20):
        print('Spring')
    elif (20 < input_day <= 30):
        print('Summer')
    else:
        print('Invalid')
        
# 修正此处条件判断
elif input_month in ('July', 'August'):
    if not (0 < input_day <= 31):
        print('Invalid')
    else:
        print('Summer')
        
elif input_month == 'September':
    if not(0 < input_day <= 30):
        print("Invalid")
    elif (0 < input_day <= 21):
        print ("Summer")
    else:
        print ("Autumn")
        
elif input_month == 'October':
    if not (0 < input_day <= 31):
        print('Invalid')
    else:
        print('Autumn')
        
elif input_month == 'November':
    if not (0 < input_day <= 30):
        print('Invalid')
    else:
        print('Autumn')
        
elif input_month == 'December':
    if (0 < input_day <= 20):
        print('Autumn')
    elif (20 < input_day <= 31):
        print('Winter')
    else:
        print('Invalid')

验证结果

  • 输入November、7:正确输出Autumn
  • 输入September、31:正确输出Invalid
  • 输入April、11:输出Spring,符合示例要求
  • 输入Blue、65:输出Invalid,符合示例要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:24:19