Как выйти из Double For Loop с помощью пользовательского ввода - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть блок кода, который содержит 2 для циклов и глубокое соответствие строк.Когда условие вызывает этот поиск, я хочу, чтобы у пользователя был «Выход» из этого цикла, поскольку он может работать ДЛИННОЕ время.Я обнаружил, что в среднем, когда мой код достигает этого поиска, он обычно находит совпадение через 2 - 15 секунд ИЛИ не делает этого вообще.

Я нашел в Интернете код об использовании msvcrt.kbhit () и getche () для использованиянажатие клавиши, чтобы позволить это.Я пытался все варианты, которые я могу придумать, чтобы связать все это воедино, но я столкнулся с одними и теми же проблемами.

  1. Код, который я хочу запустить для выполнения глубокого поиска, запускает и находитсовпадение и никогда не завершается само по себе.

  2. То же, что и 1, но будет ждать, пока я нажму клавишу ввода, чтобы выйти из цикла, который не является правильным.

  3. Код запустится, найдет совпадение и выйдет самостоятельно, ТОГДА я протестирую входы, которые не найдут совпадение, и выход «enter» не будет работать.

ImНахождение моего двойного цикла for и текущие разрывы, чтобы получить наш цикл, затрудняют размещение всего в правильном месте.Любая помощь будет принята с благодарностью!

В конце концов.Я хочу, чтобы мои двойные циклы запускались и разрывались, когда совпадение найдено, и непрерывно пытались сделать совпадение, пока оно либо НЕ СДЕЛАНО, либо пользователь нажимает ввод, чтобы выйти.

Исходный код проблемы:

if foundHeadline == False:
    print 'Still didnt find Headline and performing a deep dive search'
    find = False
    keyboard = Controller()
    # startTime = time.time()
    # elapsed = 0
    # while elapsed < 10:
    # userinput = raw_input("Press Enter to Stop Search: ")
    running = 0
    print 'Press Enter to Exit Search . . .'

    # findVariable = False
    while not msvcrt.kbhit() or msvcrt.getche() != '\r':
        for i in range(15):
            headlineFound = 0
            for subset in itertools.combinations(itemsList, i):
                if ''.join(subset) == cmcHeadline:
                    # print(''.join(subset))
                    headlineFound += 1
                    if headlineFound == 2:
                        print 'Deep Dive Headline Found: ', ''.join(subset)
                        find = True
                        foundHeadline = True
                        keyboard.press('\r')
                        keyboard.release('\r')
                        # findVariable = True
                        break
            if find:
                break
        if msvcrt.getche() == '\r':
            print 'Breaking out of Search'

Обновленный код решения

if foundHeadline == False:
    print 'Still didnt find Headline and performing a deep dive search'

    find = False
    keyboard = Controller()

    print 'Press "Ctrl + C" to exit the search. . .'
    print ''

    try:
        while True:
            for i in range(15):
                headlineFound = 0
                for subset in itertools.combinations(itemsList, i):
                    if ''.join(subset) == cmcHeadline:
                        # print(''.join(subset))
                        headlineFound += 1
                        if headlineFound == 2:
                            print 'Deep Dive Headline Found: ', ''.join(subset)
                            find = True
                            foundHeadline = True
                            print ''
                            keyboard.press(Key.ctrl.value)
                            keyboard.press('c')
                            keyboard.release('c')
                            keyboard.release(Key.ctrl.value)
                            break
                if find:
                    break
    except KeyboardInterrupt:
        pass
...