2015-12-28 4 views
0

У меня есть основная проблема в Python, где я должен проверить, нашел ли мой код обратного отслеживания некоторые решения (я должен найти все подсписные числа от 1 до n номеров с свойством |x[i] - x[i-1]| == m). Как проверить, есть ли какое-то решение? Я имею в виду потенциальные решения, которые я нахожу, я просто печатаю их и не сохраняю их в памяти. Я должен напечатать правильное сообщение, если нет никаких решений.Python backtracking

+0

Может диссоциируют вычислений от I/O (здесь, печать), используя генератор. Затем вы можете проверить, есть ли у вас хотя бы первое значение в генераторе. – DainDwarf

ответ

0

Как я предложил в комментариях, вы можете отделить вычисления с печатью ввода/вывода, создав генератор ваших решений |x[i] - x[i-1]| == m

Давайте предположим, что вы определили генератор для получая свои решения:

def mysolutions(...): 
    .... 
    # Something with 'yield', or maybe not. 
    .... 

Вот генератор декоратора, который вы можете использовать, чтобы проверить, если реализован генератор имеет значение

from itertools import chain 
def checkGen(generator, doubt): 
    """Decorator used to check that we have data in the generator.""" 
    try: 
     first = next(generator) 
    except StopIteration: 
     raise RuntimeError("I had no value!") 
    return chain([first], generator) 

Используя этот декоратор, теперь вы можете определить ваше предыдущее решение с:

@checkGen 
def mysolutions(...): 
    .... 

Затем, вы можете просто использовать его как есть, для отделяя ваш I/O:

try: 
    for solution in mysolutions(...): 
     print(solution) #Probably needs some formatting 
except RuntimeError: 
    print("I found no value (or there was some error somewhere...)")