Вы можете сделать
import math
def get_combinations(number, minimum, maximum):
ret = []
for x in range(minimum, math.ceil(number/2)):
ret.append((x, number - x))
for x in range(maximum - number):
ret.append((maximum - x, maximum - (number + x)))
return ret
, который возвращает list
из tuple
с.
Давайте пройдемся по:
ret = []
Это просто определениемассив, который нужно вернуть, чтобы мы могли добавить к нему материал.
for x in range(minimum, math.ceil(number/2)):
Цикл всех возможных комбинаций добавка .То, что это делает, проходит через этот список:
(1, x-1), (2, x-2), ..., (n, x-n)
Однако, он учитывает только половину числа (округляется в большую сторону);это нормально, потому что для наших целей (1, 6)
и (6, 1)
одинаковы, и мы не должны включать оба.
ret.append((x, number - x))
Это просто представление Python для (n, x-n)
.
for x in range(maximum - number):
Цикл всех возможных вычитающих комбинаций. Этот проходит через этот список:
(maximum, maximum - x), (maximum - 1, maximum - (x + 1)), ..., (maximum - n, maximum - (x + n))
Вперед!
ret.append((maximum - x, maximum - (number + x)))
Опять же, только представление Python для (maximum - n, maximum - (x + n))
.
return ret
И наконец, верните заполненный список.