Работа с остатком от нуля с помощью операции по модулю?

#python

#python

Вопрос:

У меня возникают некоторые трудности при работе с остатком от нуля с помощью оператора modulo.

По сути, это строка моего кода

 fday= (day 24) % 30 
  

Я пытаюсь просто добавить 24 к любому дню и взять оставшуюся часть. Однако, если пользователь вводит 6 за день, результат равен нулю, чего я не хочу.

Как я могу заставить операцию вернуть 6, если введено 6? Есть ли лучший способ сделать это?

Обновить:

Я пытаюсь взять ранее определенную переменную ( day ) и добавить 24 дня к этому значению.

Однако, если пользователь вводит 25-й день месяца, а затем я добавляю к нему 24, я получаю 49, но 49 дней не в месяце.

Вот почему я пытаюсь использовать операцию по модулю, чтобы вместо этого получить остаток, потому что она работает в течение 30 дней за один месяц.

Другой пример:

Если бы было введено 5, это было бы 5 24, что равно 29, а затем 290 = 29 . Итак, 5 работает для того, что я пытаюсь сделать (то есть просто добавить 24 дня к значению и при этом сохранить результат меньше 30 (потому что для целей того, что я делаю, в месяце всего 30 дней).

Комментарии:

1. Можете ли вы привести еще несколько примеров входных данных и желаемых выходных данных для этих входных данных? Я не могу понять, чего вы хотите от своего вопроса.

2. Ну, в основном я пытаюсь взять ранее определенную переменную (день) и добавить 24 дня к этому значению.. однако, если пользователь вводит 25-й день месяца, а затем я добавляю к нему 24. я получу 49, но 49 дней не в месяце, поэтому я пытаюсь использовать операцию по модулю, чтобы вместо этого получить остаток, потому что это работает для 30 дней за один месяц.

3. @pythonnoob: Тогда я не понимаю, почему ввод 6 должен давать результат 6. Что должны давать входные данные 5 и 7?

4. Итак, если бы было введено 5, это было бы 5 24, что равно 29, а затем 29% 30 = 29. Итак, 5 работает для того, что я пытаюсь сделать (то есть просто добавить 24 дня к значению и при этом сохранить результат меньше 30 (потому что у меня всего 30 дней в месяце для целей того, что я делаю)

5. pythonoob — вы не хотите 6 6 , вы хотите 30 , потому что 6-й день плюс 24 дня — это 30-й день месяца, а не 6-й день. Смотрите мой ответ.

Ответ №1:

Вы говорите в комментариях , что для 5 вас хотят 29 , для 6 вас хотят 6 и для 7 вас хотят 1 . В этом нет никакого смысла. Правильное значение для 6 30 не 6 равно или 0 , когда вы вычисляете день по модулю 30 .

В математике деление на 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 особом случае.

Ответ №2:

Рассмотрите возможность использования функциональности в 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