#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