Страницы

Поиск по вопросам

среда, 22 января 2020 г.

расстановка алгебраических знаков - python

#python #python_3x


вводится последовательность целых чисел в первой строке
вводится целое число во второй строке

путем расстановки знаков + и - получить из последовательности чисел первой строки
число со второй строки

пример:
вводятся
123456789
200


и как итог получаем все возможные варианты получения числа со второй строки при помощи
чисел с первой и знаков “+” и “-”:

123-4+5-6-7+89
123+4+5+67-8+9
1+234-5-6-7-8-9


посоветовали использовать itertools.product для этого, но так как использовать сторонние
модули не могу, пришлось вынести ее в отдельную функцию

# -*- coding: utf-8 -*-
def product(*args, repeat = 1):
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod) # itertools.product(*iterables, repeat=1)
    print(result)
    return result

Input = input()
number = input()
for combination in product([['+','-','']]*8):
    combination = str(combination)
    expression = combination.join(Input)
    answer = eval(expression)
    if answer == number:
        print(expression)
        break
else:
    print('NONE')


Помогите подкорректировать код, чтобы он работал.Заранее спасибо
    


Ответы

Ответ 1



Блок в else выполняется, если из цикла не сделан выход через break, то есть ваш else выполняется всегда. Как передать параметры в функцию из списка, как перемешать цифры со знаками: for combination in product(*([['+','-','']] * (len(digits)-1))): d = [None]*(len(digits)+len(combination)) d[0::2] = digits d[1::2] = combination expression = ''.join(d) answer = eval(expression) if answer == number: print(expression) found = True if not found: print("NONE")

Комментариев нет:

Отправить комментарий