Python 算法将365天转换为月日和月日(波斯日历)
大家好,我想写一个算法,将数字转换成日和月,例如60表示30/2,使用波斯日历 以下是我找到的代码:Python 算法将365天转换为月日和月日(波斯日历),python,algorithm,Python,Algorithm,大家好,我想写一个算法,将数字转换成日和月,例如60表示30/2,使用波斯日历 以下是我找到的代码: #1 Years = 12 month and 365 days #Input numday=int(input('Enter The Number [1 Until 365]: ')) if 0<numday<=186: month =numday // 31 +1 day = numday % 31 print(' Month: ', month, '
#1 Years = 12 month and 365 days
#Input
numday=int(input('Enter The Number [1 Until 365]: '))
if 0<numday<=186:
month =numday // 31 +1
day = numday % 31
print(' Month: ', month, '\n'
, 'Day: ', day,'\n'
,month,'/',day)
if 186<numday<=366:
numday -= 186
month = numday // 30 +1 +6
day = numday % 30
print(' Month: ', month, '\n'
, 'Day: ', day, '\n'
, month, '/', day)
#1年=12个月365天
#输入
numday=int(输入('输入数字[1到365]:'))
如果0免责声明:此答案使用公历,而不是波斯历
使用标准库
使用模块:定义1月1日的datetime.date
对象,添加带有输入天数的datetime.timedelta
对象,并检查生成的datetime.date
对象的月份和日期
导入日期时间
def获取月日(numday):
d0=日期时间。日期(2021,1,1)
deltaT=datetime.timedelta(numday)
d=d0+deltaT
返回d月,d日
使用硬编码算法
不幸的是,代码中类似于numday//31+1
的逻辑不可能工作。原因是有些月份有31天,有些月份有30天,而二月只有28天。或29
我们需要硬编码每月的天数。然后我们将累积这些天数,得到每个月最后一天的天数;最后,我们将比较我们的天数和这些数字。我们可以使用。如果您对标准库中的模块过敏,可以编写自己的accumulate
函数来获取列表的累积和
导入itertools
def获取月日(numday):
assert(0因为您说您使用的是波斯日历…将月份四舍五入到上限值的正确方法是使用math.ceil
。您的日期不能为0,因此在使用模运算符时需要将其设置为31。以下是前6个月的代码,包括以下两个更改:
import math
numday = int(input('Enter The Number [1 Until 365]: '))
if 0 < numday <= 186:
month = math.ceil(numday / 31)
day = numday % 31
if day == 0:
day = 31
print(' Month: ', month, '\n', 'Day: ', day, '\n', month, '/', day)
你为什么不直接使用@PaulLemarchand我想写代码的算法而不是library@nazanin77你能详细解释一下为什么你想在这里重新发明轮子吗?因为在日期/时间处理中有很多边缘情况,所以更谨慎的做法是使用更久经考验的东西。datetime
它不是第三方库,不是吗“在标准库中,就像random
或string
@esqew一样,我不想写代码,我想写算法,并展示将数字转换为月份和日期的过程。op在评论中说,他们使用的是波斯日历……这在帖子中根本没有明确说明。这个日历有31天的时间。”他刚出生6个月,剩下的30天,最后一个月29天。好吧-_-
>>>186
Month: 6
Day: 31
6 / 31