Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 算法将365天转换为月日和月日(波斯日历)_Python_Algorithm - Fatal编程技术网

Python 算法将365天转换为月日和月日(波斯日历)

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, '

大家好,我想写一个算法,将数字转换成日和月,例如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, '\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