尝试编写一个简单的脚本来确定日期的月亮名称。我有一个日期和月亮名称的字典,并尝试迭代每个字典来比较今天的日期和满月的日期,希望最后一个匹配会成功,但Python似乎在第一个匹配后停止。
#!/usr/bin/python3
from datetime import date
def get_moon_name(d):
full_moons = {
'2022-12-07': 'Able',
'2023-01-06': 'Baker',
'2023-02-05': 'Charlie',
'2023-03-07': 'Delta' }
for md in full_moons.keys():
moon_date = date.fromisoformat(md)
print(f"Comparing {d} to {moon_date}")
if d >= moon_date:
moon_name = full_moons[md]
return moon_name
if __name__ == "__main__":
d_today = date.today()
print(f"This full moon's name is {get_moon_name(d_today)}")
删除第一个日期将产生贝克作为月球名称,所以它将匹配,如果它可以得到它。
这是Python 3.9.6(Mac OS)或3.10.9(自制程序)。
想法?我相信还有更像Python的方法,但我不明白为什么这个方法会失败。
速记:试着运行这个,期望它输出Baker,因为今天是1月6日,但是我得到的是Able,没有迹象表明它曾经查看过第二个值。
1条答案
按热度按时间2vuwiymt1#
return
语句将在第一次匹配后中断for
循环,因此您总是会得到Able作为答案。