试图构建一个python程序,当用户输入生日时呈现出生日期。当前的尝试就像一个循环

试图构建一个python程序,当用户输入生日时呈现出生日期。当前的尝试就像一个循环,python,math,date-arithmetic,Python,Math,Date Arithmetic,我们都知道,在我们目前使用的公历中,一周中的任意一天可以是7个选项之一 我的代码的意图是基于Arthur Benjamin的Think Like a Math Genius(2006)中的一段,您可以使用数学来执行一个简单的派对把戏。使用代码(基本上实现基于公历模式的快捷方式,并在除以7后找到余数),可以快速准确地预测一周中的过去和未来几天 我当前的尝试导致PyCharm过度计算并消耗了大部分CPU活动。我认为这可能是因为我没有像限制“typedMonth”一样限制用户输入“Year”的范围 这

我们都知道,在我们目前使用的公历中,一周中的任意一天可以是7个选项之一

我的代码的意图是基于Arthur Benjamin的Think Like a Math Genius(2006)中的一段,您可以使用数学来执行一个简单的派对把戏。使用代码(基本上实现基于公历模式的快捷方式,并在除以7后找到余数),可以快速准确地预测一周中的过去和未来几天

我当前的尝试导致PyCharm过度计算并消耗了大部分CPU活动。我认为这可能是因为我没有像限制“typedMonth”一样限制用户输入“Year”的范围

这是原始代码:

print("Enter the full date: in dd/Month/yyyy")
Date = int(input("dd:"))
typedMonth = str(input("Month:"))
Year = int(input("yyyy: "))
while not int(Year) in range(0,3000):
    Year = int(input("Please enter year (yyyy) limited to [0 - 3000] : "))

if typedMonth in ['January']:
    Month = 3
    while int(Year) % 4 == 0:
        Month = 2
elif typedMonth in ['February']:
    Month = 6
    while int(Year) % 4 == 0:
        Month = 5
elif typedMonth in ['March', 'November']:
    Month = 6
elif typedMonth in ['April', 'July']:
    Month = 2
elif typedMonth in ['May']:
    Month = 4
elif typedMonth in ['August']:
    Month = 5
elif typedMonth in ['September', 'December']:
    Month = 1
elif typedMonth in ['October']:
    Month = 3
elif typedMonth in ['June']:
    Month = 0
else:
    Month = 0

remYear = Year%400

if 300 <= remYear <= 400:
    Year = Year + 1
elif 200 <= remYear <= 300:
    Year = Year + 3
elif 100 <= remYear <= 200:
    Year = Year + 5
else:
    Year = Year + 0

print(remYear)

Day = (Date + int(Month) + remYear) % 7
print(Day)
建议限制年的计算范围(限制用户输入年不会解决上述问题)或从初始字符串输入“typedMonth”重新构造可变月的值,我们将不胜感激

p.S.1也许我应该为这个项目使用另一个软件?我刚开始使用python,所以我不知道什么应用程序更适合这样的程序。如果您认为这是一个可行的解决方案,请推荐

p.S.2取得了进展!该计划对千禧一代婴儿(又名2001年后进入),我仍然需要修正逻辑


p.S.3由于下面的评论,我现在能够运行该程序了。代码中仍然存在明显的逻辑错误。我努力在时间允许的情况下开始这个项目的工作。我会相应地更新这篇文章。感谢您加入我的学习之旅

您问Python是否适合这种项目。是的,但是如果你使用得当,它会更合适。换句话说,不要让问题变得不必要的困难

我理解你为了适应编程而实施特定算法的冲动,但我不得不说这不是一个好的选择。日期算术通常是一个难题。如果您想使用计算快捷方式(您应该这样做),那么看看Python编程环境提供的快捷方式

例如:

>>> import datetime
>>> from dateutil import parser
>>> date = "25/December/1999"
>>> datetime.datetime.strftime(parser.parse(date), "%A")
'Saturday'

dateutil
模块不是标准库的一部分,但它值得安装

您使用的是什么输入,即产量和无限循环条件?我用我自己的输入运行了你的代码,它按预期计算。@noslenkwah你有没有试过一个不可被4整除的年份?@BenjaminPodszun-我用1989年5月14日,用Python 3.6BTW得到389个,你可以通过在dict:
{'1':3,'2':6,}
等。当然,如果是闰年,你仍然需要调整1月和2月的数字。要更像pythonic,而不是使用太多的
,如果elif else
尝试使用
dict()
>>> import datetime
>>> from dateutil import parser
>>> date = "25/December/1999"
>>> datetime.datetime.strftime(parser.parse(date), "%A")
'Saturday'