使用模数运算使用零余数?

时间:2011-10-01 22:28:12

标签: python

使用模运算符处理零余数时遇到一些困难。

基本上这是我的代码行

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天)。

2 个答案:

答案 0 :(得分:3)

您在评论中说,5您希望296想要67想要1 6 }。这没有意义。当您计算一天模30时,6的正确值为0而非3030

在数学中,0除以2930之间的余数 - 这就是模1的模数。您想要的是301之间的数字。

所以你需要花一天时间,减去0 (在291而不是30和{{{}之间获取一天{1}}),添加24,然后执行模30,然后添加1 (以获取1之间的一天30

result = ((day - 1 + 24) % 30) + 1

这样,您始终可以在130之间获得正确的数字,并且您不必将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