Форум сайта python.su
0
всем доброго времени суток!
вот такая задача:
Написать программу:на вход подается последовательность чисел через пробел, а также запрашивается у пользователя любое число.
Далее программа работает по следующему алгоритму:
Преобразование введённой последовательности в список
Сортировка списка по возрастанию элементов в нем (для реализации сортировки определите функцию)
Устанавливается номер позиции элемента, который меньше введенного пользователем числа, а следующий за ним больше или равен этому числу.
ПОЛУЧИЛОСЬ: ввод чисел осуществляется, ввод от пользователя также осуществляется. Далее преобразую полученные числа в список с добавлением числа от пользователя, далее сортирую этот список по возрастанию.
ЧТО НЕ ПОЛУЧИЛОСЬ: при поиске индекса введенного и добавленного в список элемента, выдаёт индекс последнего числа(как будто при добавлении в список), но список уже отсортирован и индекс не верный.
А по заданию задачи нужно найти соседние индексы относительно введенного числа и добавленного в список.
вот код:
def binary_search(num, element, left, right):
if left > right: # если левая граница превысила правую,
return False
middle = (right + left) // 2 # находим середину
if num == element: # если элемент в середине,
return middle # возвращаем этот индекс
elif element < num: # если элемент меньше элемента в середине
# рекурсивно ищем в левой половине
return binary_search(num, element, left, middle - 1)
else: # иначе в правой
return binary_search(num, element, middle + 1, right)
num = list(map(int, input(“Введите целые числа через пробел:”).split()))
element = int(input(“Введите любое целое число : ”))
num.append(element)
print(sorted(num))
index = num.index(element)
#element_index = binary_search(num, element, 0, len(num))
print('Индекс введенного элемента:', element, ‘в списке равен:’, index)
#print(element_index)
Офлайн
857
Не надо добавлять число в список, а надо просто найти в списке позиции, где стоят два элемента и первый элемент меньше введённого числа, а второй элемент больше или равен введённому числу. Если такой позиции нет, вернуть -1 или 0 в зависимости от того, с какого числа начинается отсчёт позиций. Слово “номер”, которое есть в задании, обычно говорит о натуральных числах, а они в нашей математике начинаются с единицы, так как использовались для нумерации предметов, которые существуют. В международной математике ноль включают в натуральные числа, поэтому там всегда идёт оговорка, входит ноль или не входит. Следовательно, раз нуля в номерах не бывает, то его можно использовать в качестве понятия “номер позиции не найден, так как такой позиции в списке нет”.
Когда такой позиции нет? Когда ты ввёл одни единицы, а число ввёл миллион. И когда ты ввёл одни пятёрки, а число ввёл единицу.
Ещё есть случай, когда таких позиций несколько и с этим нужно что-то делать. Но обычно берётся самая первая слева направо.
Отредактировано py.user.next (Дек. 11, 2021 03:08:26)
Офлайн
0
py.user.nextПодскажите как это кодом записать, никак не пойму, с помощью цикла?
Не надо добавлять число в список, а надо просто найти в списке позиции, где стоят два элемента и первый элемент меньше введённого числа, а второй элемент больше или равен введённому числу. Если такой позиции нет, вернуть -1 или 0 в зависимости от того, с какого числа начинается отсчёт позиций. Слово “номер”, которое есть в задании, обычно говорит о натуральных числах, а они в нашей математике начинаются с единицы, так как использовались для нумерации предметов, которые существуют. В международной математике ноль включают в натуральные числа, поэтому там всегда идёт оговорка, входит ноль или не входит. Следовательно, раз нуля в номерах не бывает, то его можно использовать в качестве понятия “номер позиции не найден, так как такой позиции в списке нет”.Когда такой позиции нет? Когда ты ввёл одни единицы, а число ввёл миллион. И когда ты ввёл одни пятёрки, а число ввёл единицу.Ещё есть случай, когда таких позиций несколько и с этим нужно что-то делать. Но обычно берётся самая первая слева направо.
Офлайн
857
>>> def lst_sort(lst): ... return sorted(lst) ... >>> def lst_find_num(lst, num): ... for i in range(len(lst) - 1): ... if num > lst[i] and num <= lst[i + 1]: ... return i + 1 ... return -1 ... >>> def f(): ... seq = list(map(int, input('Input sequence: ').split())) ... num = int(input('Input number: ')) ... seq_sorted = lst_sort(seq) ... position = lst_find_num(seq_sorted, num) ... print('Sequence', *seq) ... print('Number', num) ... print('Sequence Sorted', *seq_sorted) ... print('Position in sorted sequence', *seq_sorted, ... 'for number', num, ... 'is', position) ... >>> f() Input sequence: 5 4 3 2 1 Input number: 3 Sequence 5 4 3 2 1 Number 3 Sequence Sorted 1 2 3 4 5 Position in sorted sequence 1 2 3 4 5 for number 3 is 2 >>> >>> f() Input sequence: 5 4 3 2 1 Input number: 6 Sequence 5 4 3 2 1 Number 6 Sequence Sorted 1 2 3 4 5 Position in sorted sequence 1 2 3 4 5 for number 6 is -1 >>> >>> f() Input sequence: 5 4 3 2 1 Input number: 0 Sequence 5 4 3 2 1 Number 0 Sequence Sorted 1 2 3 4 5 Position in sorted sequence 1 2 3 4 5 for number 0 is -1 >>>
Офлайн