Модульное дополнение в Python - PullRequest
13 голосов
/ 14 июля 2011

Я хочу добавить число y к x, но обернуть x так, чтобы оно оставалось в диапазоне от нуля до 48. Обратите внимание, что y может быть отрицательным, но никогда не будет иметь величину больше 48. Есть ли лучший способ сделать это, чем:

x = x + y
if x >= 48:
    x = x - 48
elif x < 0:
    x = x + 48

Ответы [ 7 ]

17 голосов
/ 14 июля 2011
x = (x + y) % 48

Оператор по модулю - ваш друг.

>>> 48 % 48
0: 0
>>> 49 % 48
1: 1
>>> -1 % 48
2: 47
>>> -12 % 48
3: 36
>>> 0 % 48
4: 0
>>> 12 % 48
5: 12
3 голосов
/ 14 июля 2011

Если вы занимаетесь модульной арифметикой, вам просто нужно использовать оператор по модулю.

x = (x + y) % 48
2 голосов
/ 14 июля 2011

Не просто (x+ y)% 48 подойдет для вас. Подробнее о модуле здесь .

2 голосов
/ 14 июля 2011

Вы можете просто использовать

x = (x+y) % 48

, что даст вам положительное значение x для любых чисел.

2 голосов
/ 14 июля 2011

Вы можете использовать оператор по модулю:

x = (x+y) % 48
1 голос
/ 11 августа 2014

Вы также можете создать класс для обработки модульной арифметики, как это было сделано здесь: http://anh.cs.luc.edu/331/code/mod_arith.py
http://anh.cs.luc.edu/331/code/mod.py

1 голос
/ 14 июля 2011

(x + y)% 48

Замените 48 на то, что вам нравится.

...