#python #variables
#python #переменные
Вопрос:
У меня есть 9 разных переменных, мы будем называть их a — i, я хочу проверить, есть ли a b c == d e f amp; a b c == g h i amp; a b c == a d g amp; a b c == b e h amp; a b c == c f i amp; a b c == a e i amp; a b c == c e g
. Но есть одна проблема. Я хочу протестировать все возможные варианты этого, такие как замена b и h или даже большего количества переменных. Я также подсчитал, что существует 45360 различных расположений. Мне интересно, есть ли какой-либо возможный способ сделать это… Я был бы признателен за любую помощь!
Комментарии:
1. Да, поместите ваши объекты в контейнер и используйте
itertools
или свой собственный алгоритм, чтобы получить нужные вам комбинации. Не используйте кучу переменных.
Ответ №1:
Вы можете использовать itertools.permutations для генерации списка всех перестановок, затем вы можете либо суммировать их, либо написать свою собственную функцию добавления:
def add3(n1, n2, n3):
return n1 n2 n3
list_of_nums = [a, b, c, d, e, f, g, h, i]
all_perm_sums = (add3(n1, n2, n3) for n1, n2, n3 in itertools.permutations(list_of_nums, 3))
all_perm_sums_are_equal = len(set(all_perm_sums)) == 1
Подсказка: будьте осторожны с плавающими точками, поскольку сложения с плавающей запятой не являются коммутативными, a b
не обязательно равны b a
, и они не ассоциативны, (a b) c
не обязательно равны a (b c)
. Это не должно быть проблемой, если все числа являются целыми числами.
Комментарии:
1. Это не совсем ответ на мой вопрос. Думаю, я сформулировал это немного неправильно. Если a = 2, b = 7, c = 6, d = 9, e = 5, f = 1, g = 4, h = 3, i = 8, оно должно возвращать значение true, потому что
a b c == d e f amp; a b c == g h i amp; a b c == a d g amp; a b c == b e h amp; a b c == c f i amp; a b c == a e i amp; a b c == c e g
, даже еслиa b d == c e f amp; a b d == g h i amp; a b d == a c g amp; a b d == b e h amp; a b d == d f i amp; a b d == a e i amp; a b d == d e g
это не так. (Во второй системе уравнений я только поменял местами c с d)