Ввод входных данных в последовательные строки с использованием понимания списка в python - PullRequest
0 голосов
/ 17 июня 2020

Я хочу взять две строки подряд в качестве входных данных, где первая строка - это мой массив, а второй массив - это элементы, которые я хочу искать с помощью двоичного поиска. Однако после ввода обеих строк он ожидает большего количества строк и работает не так, как ожидалось.

def my_bin(a, key):
    l = 0
    h = len(a) - 1
    loc = -1
    while(l < h):
        m = l + (h - l) // 2
        if (a[m] == key):
            loc = m
        elif (key < a[m]):
            h = m
        elif(key > a[m]):
            l = m + 1

    return loc

if __name__ == '__main__':
    a = [int(x) for x in input().split()]
    ktf = [int(x) for x in input().split()]
    ktf = ktf[1:]
    a = sorted(a)
    for ele in ktf:
        t = my_bin(a, ele)
        print(t, end=" ")

пример: строка 1: 7 8 6 546 878 98 34 543
строка 2: 4 6 7 8 786

выход: 0 1 2 -1

Первая строка - это массив для сортировки и поиска. Вторая строка имеет первое значение в виде числа значений для поиска, которое здесь равно «4», а затем значения для поиска в указанном выше массиве.

1 Ответ

0 голосов
/ 17 июня 2020

Проблема не во вводе. Пока l oop внутри вашего my_bin не завершается, так как у вас есть только if and elif, если он не соответствует ни одному из условий, он будет в не завершающемся l oop.

...