Python 我如何解决这个问题,使其显示从特定截止日期开始的季节(每个季节后21日)
问题是如何修改代码,使其显示特定日期的正确季节(例如:它在12月19日显示冬季,而我告诉它在21日显示冬季)。 如果你想知道为什么你会看到这两次,那是因为我无意中在不同的帐户上发布了相同的问题Python 我如何解决这个问题,使其显示从特定截止日期开始的季节(每个季节后21日),python,python-3.x,Python,Python 3.x,问题是如何修改代码,使其显示特定日期的正确季节(例如:它在12月19日显示冬季,而我告诉它在21日显示冬季)。 如果你想知道为什么你会看到这两次,那是因为我无意中在不同的帐户上发布了相同的问题 month = int(input("Enter a month: ")) day = int(input("Enter a day: ")) def season(month, day): if (month == 12 or 1 <= month
month = int(input("Enter a month: "))
day = int(input("Enter a day: "))
def season(month, day):
if (month == 12 or 1 <= month <= 4): #months
return "winter"
elif(4 <= month <= 5):
return "spring"
elif(6 <= month <= 9):
return "summer"
elif(9 <= month <= 12):
return "fall"
if month % 3 == 0 and day >= 21: #days
if season == "winter":
season = "spring"
elif season == "spring":
season = "summer"
elif season == "summer":
season = "fall"
else:
return "winter"
month=int(输入(“输入月份:”)
day=int(输入(“输入一天:”)
def季节(月、日):
如果(month==12或1您的解决方案走上了正确的轨道。您可能会发现,一个适当的数据结构可以为我们做很多繁重的工作。此外,我看到了一些错误
if month%3
语句只在else
案例中返回。在其他案例中会发生什么情况?None
被返回。我想您需要设置季节
,然后设置返回季节
但是您只是使用函数seasure()
重载了变量seasure
我建议使用dict
索引,由month
和day
的tuple
索引。本质上,创建一个复合索引。这是有效的,因为tuple
是不可变的,因此可以散列,因此可以用作dict
和其他地方的键
我还希望向您展示让计算机为您生成测试数据是多么容易,就像我在下面验证代码工作时所做的那样
def season(month, day):
SEASONS = { # must be ordered descending like this
(11, 21): "winter",
(8, 21): "fall",
(5, 21): "summer",
(2, 21): "spring",
(1, 1): "winter"
}
for k in SEASONS:
if (month, day) >= k:
return SEASONS[k]
res = []
for month in range(1, 13): # 1 through 12
for day in range(1, 32): # 1 through 31
result = season(month, day)
res.append([month, day, result])
from pprint import pprint
pprint(res, width=120)
输出:
[[1, 1, 'winter'],
[1, 2, 'winter'],
[1, 3, 'winter'],
...
[3, 19, 'winter'],
[3, 20, 'winter'],
[3, 21, 'spring'],
...
[6, 20, 'spring'],
[6, 21, 'summer'],
[6, 22, 'summer'],
...
[9, 20, 'summer'],
[9, 21, 'fall'],
...
[12, 20, 'fall'],
[12, 21, 'winter'],
...
[12, 30, 'winter'],
[12, 31, 'winter']]
据我所知,对于给定的日期和季节,您希望根据日历确定季节:
春季:3月21日至6月20日
夏季:6月21日至9月20日
秋季:9月21日至12月20日
冬季:12月21日至3月20日
您的代码与此非常接近,但存在一些问题:
- 你的if条件下的季节没有很好的定义
- 在检查了几个月后,您返回了结果,因此没有考虑当天
您的代码经过一些更改后:
def season(month, day):
res = ""
if (1 <= month <= 3): # months
res = "winter"
elif (4 <= month <= 6):
res = "spring"
elif (7 <= month <= 9):
res = "summer"
elif (10 <= month <= 12):
res = "fall"
if month % 3 == 0 and day >= 21: # days
if res == "winter":
return "spring"
elif res == "spring":
return "summer"
elif res == "summer":
return "fall"
else:
return "winter"
return res
那么,你能链接到另一个问题吗?这样社区就可以继续讨论你的问题了?你认为return
在做什么?(假设月份必须在1-12之间)哦,我是通过查看你的帖子历史发现的。这两个问题都是由同一个帐户提出的?看起来已经解决了。我遗漏了什么?修复代码的方法是编写一个调用seasure()的简单循环
有365个不同的日期和打印。这将是一个简单的测试套件,我想这不仅可以解决您当前的问题,而且可以保证它在一年中的所有日子都能正常工作。我不确定在我的答案20分钟后到达的另一个答案是什么,我补充说您选择了该答案。我已经指出了您的两个错误和prOvide提供了一个解决方案。您需要调用此函数,并使用您的日期和月份,如答案中的主编辑部分所示
month = int(input("Enter a month: "))
day = int(input("Enter a day: "))
print(season(month, day))