[英]Working with a remainder of Zero with modulo operation?
我在使用模運算符處理零余數時遇到了一些困難。
基本上這是我的代碼行
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天用於我的工作)。
您在評論中說,要5
想要29
,要6
想要6
,要7
想要1
。 那沒有道理。 在計算以30
為模的30
時, 6
的正確值為30
而不是6
或0
。
在數學中,除以30
會得到0
到29
之間的余數-這就是模30
的模數。 您想要的是1
到30
之間的數字。
因此,您需要花費一天, 減去1
(以得到0
和29
之間的一天而不是1
和30
),相加24
,然后取模30
,然后加1
(得到1
和30
之間的一天。
result = ((day - 1 + 24) % 30) + 1
這樣一來,您始終可以獲得正確的1
到30
之間的數字,而不必將6
視為特例。
考慮使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.