【问题标题】:Writing a program that takes a date as input and outputs the date's season编写一个程序,将日期作为输入并输出日期的季节
【发布时间】:2020-09-14 13:26:37
【问题描述】:

例如:如果输入是:
四月
11
输出是:春天

此外,检查 string 和 int 是否有效(实际的月份和日期)。 例如:如果输入是:
蓝色
65
输出为:无效

每个季节的日期是:
春季:3 月 20 日 - 6 月 20 日
夏季:6 月 21 日 - 9 月 21 日
秋季:9 月 22 日 - 12 月 20 日
冬季:12 月 21 日 - 3 月 19 日

我链接了我的代码,但它不适用于这 2 个输入(我不知道为什么)
1.对于 11 月 7 日,我的输出是“夏天”,而应该是“秋天”
2.对于 9 月 31 日,我的输出是“Summer”,而它应该是“Invalid”

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 == 'March':
    if not(1<=input_day<=31):
        print ("Invalid")
    elif input_day<=19:
        print("Winter")
    else:
        print ("Spring")
elif input_month == 'April' :
    if not(1<=input_day<=30):
        print("Invalid")
    else:
        print("Spring")
elif input_month == 'May':
    if not(1<=input_day<=31):
        print("Invalid")
    else:
        print("Spring")
elif input_month == 'June':
    if not(1<=input_day<=30):
        print("Invalid")
    elif input_day<=20:
        print ("Spring")
    else:
        print("Summer")
elif input_month == 'July' or 'August':
    if not(1<=input_day<=31):
        print("Invalid")
    else: 
        print("Summer")
elif input_month == 'September':
    if not(1<=input_day<=30):
        print("Invalid")
    elif input_day<=21:
        print ("Summer")
    else:
        print ("Autumn")
elif input_month == "October":
    if not(1<=input_day<=31):
        print("Invalid")
    else:
        print("Autumn")
elif input_month == "November":
    if not(1<=input_day<=30):
        print("Invalid")
    else:
        print ("Autumn")
elif input_month == "December":
    if not(1<=input_day<=31):
        print("Invalid")
    elif input_day <=20:
        print ("Autumn")
    else:
        print ("Winter")
elif input_month == 'January':
    if not(1<=input_day<=31):
        print("Invalid")
    else:
        print("Winter")
elif input_month == "February":
    if not(1<=input_day<=29):
        print("Invalid")
    else:
        print ("Winter")

【问题讨论】:

    标签: python


    【解决方案1】:

    你的代码行错误:

    elif input_month == 'July' or 'August':
    

    应该是:

    elif input_month == 'July' or input_month == 'August':
    

    elif input_month in ('July', 'August')
    

    正如下面提到的@Steven Rumbalski。

    代码input_month == 'July' or 'August' 的计算结果始终为True

    因为它被解析为(input_month == 'July') or ('August')

    空字符串被视为False,所有其他字符串被视为True,因此'August' 的计算结果始终为True

    【讨论】:

    • 有助于解释为什么input_month == 'July' or 'August' 总是计算为True。此代码被解析为(input_month == 'July') or ('August')。空字符串被视为False,所有其他字符串被视为True,因此'August' 的计算结果始终为True。修复代码的另一种方法是elif input_month in ('July', 'August'):
    • @ThRnk 好吧,是操作顺序搞砸了。该程序现在可以运行,但我真的不明白为什么那行代码在 11 月 7 日和 9 月 31 日把它搞砸了。是因为代码卡在了这一行吗?因此不执行后面的行? elif input_month == 'June': if not(1
    • @StevenRumbalski 哦,我不知道。谢谢你。但是即使input_month == 'July' or 'August' 评估为TrueNovemberSeptember 的代码行不应该执行吗?所以,分别输出AutumnInvalid
    • 因为它总是被评估为True,如果它没有在该行上方输入任何if block,它将进入该行,并查看是否not(1&lt;=input_day&lt;=31),打印InvalidSummer.
    • @help_me_pls:不。无论input_month 的值如何,测试input_month == 'July' or 'August' 的计算结果始终为True
    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多