Pylance fixes

This commit is contained in:
oSTEVEo 2026-04-03 01:30:35 +03:00
parent 7026ad395d
commit 94bc3b8524
5 changed files with 41 additions and 21 deletions

View File

@ -37,7 +37,7 @@ def bst_find(root: dict|None, name: str) -> str|None:
if node != None: if node != None:
return node['phone'] return node['phone']
def find_node_to_delete(root: dict, name: str) -> dict|None: def find_node_to_delete(root: dict|None, name: str) -> dict|None:
"""Поиск в ширину.""" """Поиск в ширину."""
while root != None: while root != None:
if root['name'] == name: if root['name'] == name:

View File

@ -20,7 +20,7 @@ def hash_fun(name: str, size: int) -> int:
n -= 1 n -= 1
return int(hashSum) % size return int(hashSum) % size
def ht_insert(buckets: list, name: str, phone: str, blen:int = 50) -> list: def ht_insert(buckets: list|None, name: str, phone: str, blen:int = 50) -> list:
"""Возвращает новый массив бакетов """Возвращает новый массив бакетов
Вычисляет индекс, вызывает ll_insert для соответствующего бакета. Вычисляет индекс, вызывает ll_insert для соответствующего бакета.
Функция не меняет размер массива бакетов автоматически!""" Функция не меняет размер массива бакетов автоматически!"""
@ -43,8 +43,8 @@ def ht_delete(buckets: list, name: str) -> list:
buckets[index] = ll_delete(buckets[index], name) buckets[index] = ll_delete(buckets[index], name)
return buckets return buckets
def ht_find(buckets: list, name: str) -> str: def ht_find(buckets: list|None, name: str) -> str|None:
if buckets == []: if buckets == [] or buckets == None:
raise ValueError("Длинна buckets должна быть больше 0") raise ValueError("Длинна buckets должна быть больше 0")
size = len(buckets) size = len(buckets)

View File

@ -32,7 +32,7 @@ def ll_find(head : dict|None, name: str) -> str|None:
currentNode = currentNode['next'] currentNode = currentNode['next']
return None return None
def ll_delete(head : dict|None, name: str) -> dict: def ll_delete(head : dict|None, name: str) -> dict|None:
"""Удаляет узел, возвращает новую голову.""" """Удаляет узел, возвращает новую голову."""
if head == None: if head == None:
return None return None

View File

@ -31,6 +31,14 @@ names_pool = (
"Добрыня" "Добрыня"
) )
_non_existent_names = [
"Ноль", "Целковый", "Полушка", "Четвертушка", "Осьмушка",
"Пудовичок", "Медячок", "Серебрячок", "Золотничок", "Девятичок"
]
assert set(names_pool).isdisjoint(set(_non_existent_names)), \
"В списке несуществующих имён существуют существующие имена сущностей"
names_pool_to_find = random.choices(names_pool, k=100) + _non_existent_names
def generate_phone(phone_len=11) -> str: def generate_phone(phone_len=11) -> str:
# 88005553535 # 88005553535
return str(random.randint(10**phone_len, 10**(phone_len+1)-1)) return str(random.randint(10**phone_len, 10**(phone_len+1)-1))

View File

@ -1,24 +1,36 @@
import time import time
from typing import Callable, Any from typing import Callable, Any
from task1.util.randomNames import names_pool_to_find
def _concrete_insert_tester(func: Callable[[Any, str, str], Any], records: list) -> float: def test(records: list,
"""Исследует время работы функции вставки""" insert_func: Callable[[Any, str, str], Any],
aboba = None find_func: Callable[[Any, str], Any],
delete_func: Callable[[Any, str], Any]) -> dict:
data = None
# Вставка всех записей
start = time.perf_counter() start = time.perf_counter()
for item in records: for item in records:
aboba = func(aboba, name=item[0], phone=item[1]) data = insert_func(data, item[0], item[1])
end = time.perf_counter() end = time.perf_counter()
insert_time = end - start
elapsed = end - start # Поиск 110 случайных записей
return elapsed start = time.perf_counter()
for name in names_pool_to_find:
find_func(data, name)
end = time.perf_counter()
find_time = end - start
def insert_tester(func_to_test: Callable[[Any, str, str], Any], records_shuffled, records_sorted) -> dict: # Удаление 50 случайных записей
"""Возвращает словарь с временем сортировки в обоих режимах""" start = time.perf_counter()
shuffled = _concrete_insert_tester(func_to_test, records_shuffled) for name in names_pool_to_find:
sorted = _concrete_insert_tester(func_to_test, records_sorted) data = delete_func(data, name)
end = time.perf_counter()
return {"Function": func_to_test.__name__, delete_time = end - start
"shuffled": shuffled,
"sorted": sorted return {
} "insert_time" : insert_time ,
"find_time" : find_time ,
"delete_time": delete_time
}