大家好,我想写一个算法,将数字转换成日和月,例如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)
但是有一个问题,比如186号,应该有另一个if,因为它应该显示31/6而不是0/7,我找不到解决方案
免责声明:此答案使用的是公历,而不是波斯历
使用标准库
使用模块datetime:为一月一日定义一个
datetime.date
对象,添加一个带有输入天数的datetime.timedelta
对象,并检查结果datetime.date
对象的月份和日期使用硬编码算法
不幸的是,代码中类似
numday // 31 +1
的逻辑不可能工作。原因是有些月份有31天,有些月份有30天,而二月只有28天。或29我们需要硬编码每月的天数。然后我们将累积这些天数,得到每个月最后一天的天数;最后,我们将比较我们的天数和这些数字。我们可以使用^{} 。如果您对标准库中的模块过敏,可以编写自己的
accumulate
函数来获取列表的累积和既然你说你用的是波斯日历。。。将月份四舍五入到上限值的正确方法是使用
math.ceil
。您的日期不能为0,因此在使用模运算符时需要将其设置为31。以下是前6个月的代码,包括以下两项更改:输出:
相关问题 更多 >
编程相关推荐