Как сказать python, что (a + b) = (b + a) и (a * b) = (b * a) - PullRequest
3 голосов
/ 09 апреля 2020

У меня есть все возможные комбинации операций между числами в списке:

list = ['2','7','8']

7+8*2
8+7*2
2*8+7
2+8*7
2-8*7
8-2/7
etc

Я хочу знать, можно ли сказать, что такие операции, как ('7 * 2 + 8' и '8 + 7 * 2 'и' 2 * 7 + 8 ') или (7 * 8 * 2 и 2 * 8 * 7 и 7 * 2 * 8) et c. такие же. Я хочу знать, как выполнить только одну операцию, если это та же самая операция.

Это мой код для создания этих различных операций:

Op = ['+','-','*','/']
array = []
for i in Op:
    array.append(string1 + i + string2)
    return array

1 Ответ

2 голосов
/ 09 апреля 2020

Если я вас хорошо понимаю, думаю, у меня есть идея для вас.

Прежде всего, вам нужно создать все возможные сочетания цифр и выражений. Вы можете сделать это следующим образом:

import itertools
num_list = ['2','7','8']
op = ['+','-','*','/'] * 2 # *2 for the case of same operator twice

num_perm = list(itertools.permutations(num_list))
op_perm = list(itertools.permutations(op, 2)) # We want perm of two operators.

Теперь вам нужно объединить все перестановки с математическим выражением, это хороший способ для этого:

list_of_experssions = list()
for num in num_perm :
    for op in op_perm:
        list_of_experssions.append(num[0] + op[0] + num[1] + op[1] +num[2])

Последний необходимо проверить, равны ли результаты двух выражений (используя функцию eval), но сами выражения различны:

for exp1 in list_of_experssions:
    for exp2 in list_of_experssions:
        if eval(exp1) == eval(exp2) and exp1 != exp2:
            print(exp1, exp2)

В вашем случае мы получили 336 математических выражений и 2560 пар равных выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...