2011-10-01 38 views
-1

我在使用模運算符處理零餘數時遇到了一些困難。用模運算處理零的餘數?

基本上這是我的代碼行

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

+1

你可以給這些輸入幾個例子投入和預期的產出?我無法真正理解你想從你的問題中得到什麼。 –

+0

好吧,基本上即時通訊嘗試採取以前定義的變量(日),並將24天添加到該值..但是,如果用戶輸入該月的第25天,然後我將24添加到它。病得49,但49天不是在一個月內,這就是爲什麼即時通訊試圖使用模操作給我餘下的,因爲它在一個月的事情30天的作品。 – pythonoob

+0

@pythonnoob:那麼我不明白爲什麼輸入6應該輸出6.輸入5和7應該給出什麼? –

回答

3

您的評論說,對於5你想29,爲6你想6,併爲7你想1,這是沒有意義的。對於6正確的價值3060當你」重新計算一天的模30

在數學中,除以30給出了一個殘數r在029之間 - 這就是模30是。 想要的是130之間的數字。

所以,你需要休息一天,1(獲得029代替130之間的天),加入24,然後做模30,然後添加1(找回130之間的一天。

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

這樣,您總能獲得1和之間的正確數量,您不必將6視爲特例。

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