Страницы

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

вторник, 12 марта 2019 г.

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

вводится последовательность целых чисел в первой строке вводится целое число во второй строке
путем расстановки знаков + и - получить из последовательности чисел первой строки число со второй строки
пример: вводятся 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')
Помогите подкорректировать код, чтобы он работал.Заранее спасибо


Ответ

Блок в 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")

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

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