gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:00 25 4
gpt4 key购买 nike

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

我的代码的目的是基于 Arthur Benjamin 的 Think Like A Math Genius (2006) 中的一个片段,您可以在其中使用数学来执行一个简单的派对技巧。使用代码(基本上是根据格里高利历的模式实现快捷方式并找到除以七后的余数),可以快速准确地预测一周中过去和 future 的日子。

我目前的尝试导致 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)。

在 silo 中,remYear= Year%400 结尾附近的片段也按预期工作。

因此,在我未经训练的情况下,“过度计算”可能是由于我用来修复用户输入字符串 typedMonth 中的 Month 变量的一段代码造成的。需要强调的是,Month 的初始输入以字符串 typedMonth 开头。然后我使用 while 语句将用户输入的字符串转换为整数值。该整数值归因于变量“月”,以便可以对整数“日期”、“月”和“年”进行最终计算。剩余部分将对应于星期几(例如 0 = 星期日、1 = 星期一、2 = 星期二等)。

这是更新后的代码(第三次迭代)。感谢下面的评论,我现在可以输入大多数年份作为输入,程序将运行。逻辑错误仍然存​​在,尤其是分配给月份的代码。我将在未来的迭代中修复它们。

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(1,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 ['June']:
Month = 0
elif typedMonth in ['August']:
Month = 5
elif typedMonth in ['September', 'December']:
Month = 1
elif typedMonth in ['October']:
Month = 3


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

calcYear = int(Year % 100)

Day=(Date + Month + calcYear) % 7
print("The date is %d"%Date)
print("The month is %d"%Month)
print("The calculated year is %d"%calcYear)
print("The code for day is %d"%Day)

if Day in [0]:
print("You were born on a Sunday")
elif Day in [1]:
print("You were born on a Monday")
elif Day in [2]:
print("You were born on a Tuesday")
elif Day in [3]:
print("You were born on a Wednesday")
elif Day in [4]:
print("You were born on a Thursday")
elif Day in [5]:
print("You were born on a Friday")
elif Day in [6]:
print("You were born on a Saturday")
print("~~End Of Program~~")

有关限制 Year 计算范围的建议(限制 Year 的用户输入不能解决上述问题)或从初始字符串输入“typedMonth”重构变量 month 的值的建议将不胜感激。

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 模块不是标准库的一部分,但值得安装。

关于python - 尝试构建一个 python 程序,在用户输入生日时呈现出生日期。当前尝试就像一个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com