Skip to content

Instantly share code, notes, and snippets.

@0viktory0
Forked from dvmn-tasks/search.py
Last active September 23, 2022 16:48
Show Gist options
  • Save 0viktory0/8f564097442c647e8f85a903eafeab47 to your computer and use it in GitHub Desktop.
Save 0viktory0/8f564097442c647e8f85a903eafeab47 to your computer and use it in GitHub Desktop.
Упражнение на чтение кода №1 "Разбираемся в чужом алгоритме".

Файл search.py

Файл запрашивает у пользователя число в пределах от 0 до 100, создает последовательность из 10 рандомных четных чисел (Список) в этих же пределах и проверяет, есть ли в Списке запрошенное пользователем число. При наличии числа, сообщает пользователю, под каким индексом оно находится. При отсутствии, выводит сообщение "Число {} не найдено в списке".

s

Принимает на вход Список и число, которое было запрошено у пользователя (Число пользователя). Вычисляет индекс, который находится в середине списка и сравнивает число под этим индеком с Числом пользователя. При совпадении чисел - возвращает индекс этого числа. Если числа не совпали, берется новый отрезок списка. Если число из середины списка меньше Числа пользователя, отрезок начинается со следующего числа после найденного среднего числа и опять находится средний индекс в новом отрезке, который опять сравнивается с Числом пользователя. Если число из середины списка больше Числа пользователя, отрезок заканчивается до найденного среднего числа и опять находится средний индекс в новом отрезке, который опять сравнивается с Числом пользователя. Так происходит до тех пор, пока не переберуться все числа. При отсутсвии совпадений, возвращает пустое значение.

from random import sample
def s(list_, target):
left, right = 0, len(list_) - 1
while left <= right:
middle = (left + right) // 2
if list_[middle] < target:
left = middle + 1
elif list_[middle] > target:
right = middle - 1
else:
return middle
return
if __name__ == "__main__":
list_len = 10
rand_list = sorted(sample(range(0, 101, 2), list_len))
try:
target = int(input('Pick a number between 0-100: '))
target_index = s(rand_list, target)
print(f'List: {rand_list}')
if target_index is not None:
print(f'Found {target} in index {target_index}')
else:
print(f'Cannot find {target} in the list')
except ValueError:
print('Invalid input')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment