簡體   English   中英

使用模運算以零的余數工作嗎?

[英]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而不是60

在數學中,除以30會得到029之間的余數-這就是模30的模數。 想要的是130之間的數字。

因此,您需要花費一天, 減去1 (以得到029之間的一天而不是130 ),相加24 ,然后取模30 ,然后1 (得到130之間的一天。

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

這樣一來,您始終可以獲得正確的130之間的數字,而不必將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM