使用模运算符处理零余数时遇到一些困难。
基本上这是我的代码行
fday= (day+24) % 30
我试图在任何一天加上24,然后拿下余下的。但是,如果用户当天输入6,则结果为零,这是我不想要的。
如果输入6,如何使操作返回6?有更好的方法吗?
更新
我正在尝试使用之前定义的变量(day
)并将该值添加24天。
然而,如果用户进入该月的第25天,然后我添加24,我得到49,但是49个月不是一个月。
这就是为什么我试图使用模运算来给我剩余的余数,因为它可以在一个月内运行30天。
另一个例子:
如果输入5,则为5 +24,即29,然后是29%30 = 29
。所以5对于我正在尝试做的工作(这只是为了增加24天的价值并仍然保持在30以下的输出(因为为了我正在做的目的,一个月只有30天)。
答案 0 :(得分:3)
您在评论中说,5
您希望29
,6
想要6
,7
想要1
6
}。这没有意义。当您计算一天模30
时,6
的正确值为0
而非30
或30
。
在数学中,0
除以29
和30
之间的余数 - 这就是模1
的模数。您想要的是30
和1
之间的数字。
所以你需要花一天时间,减去0
(在29
和1
而不是30
和{{{}之间获取一天{1}}),添加24
,然后执行模30
,然后添加1
(以获取1
之间的一天30
。
result = ((day - 1 + 24) % 30) + 1
这样,您始终可以在1
和30
之间获得正确的数字,并且您不必将6
视为特例。
答案 1 :(得分:1)
考虑使用datetime
模块中的功能,而不是尝试重新发明它:
>>> from datetime import date, timedelta
>>> for month in (4, 5):
... for day in (5, 6, 7, 8):
... start = date(2011, month, day)
... later = start + timedelta(days=24)
... print str(start), str(later)
...
2011-04-05 2011-04-29
2011-04-06 2011-04-30
2011-04-07 2011-05-01
2011-04-08 2011-05-02
2011-05-05 2011-05-29
2011-05-06 2011-05-30
2011-05-07 2011-05-31
2011-05-08 2011-06-01