Я хочу написать декоратор, который будет подсчитывать количество свопов в алгоритме сортировки. Я создал функцию swap для замены чисел и декоратор, который подсчитывает каждый вызов этой функции. Проблемы, с которыми я столкнулся, заключаются в следующем: когда я подсчитываю количество вызовов для нескольких алгоритмов, он подсчитывает «обмены» для каждого из них и суммирует их. Другая проблема заключается в том, что каждый «своп» печатается в консоли. Ниже я привожу декоратор, обмен и пример алгоритма.
Декоратор:
def swapCounter(func):
def counter(*args, **kwargs):
counter.calls += 1
print(f"Swaps {counter.calls}")
return func(*args, **kwargs)
counter.calls = 0
return counter
Обмен:
def swap(arr, i, j):
arr, arr[j] = arr[j], arr
Пример алгоритма сортировки:
def bubbleSort(arr):
for i in range(len(arr)):
for j in range(0, len(arr)-i-1):
if arr[j] > arr[j+1]:
swap(arr, j, j+1)
return arr
Я пробовал добавлять флаги в декоратор и в функцию подкачки. При обмене флаг будет установлен в конце, что позволит декоратору выполнить сброс в нужный момент. Однако это не дало никаких результатов: AttributeError: объект «функция» не имеет атрибута «вызовы»
def swapCounter(func):
def counter(*args, **kwargs):
counter.calls+=1
if kwargs.get("flag")==True:
print(f"Swaps {counter.calls}")
counter.calls = 0
return func(*args, **kwargs)
return counter
def swap(arr=None, i=None, j=None, flag=None):
arr, arr[j] = arr[j], arr
def bubbleSort(arr):
for i in range(len(arr)):
for j in range(0, len(arr)-i-1):
if arr[j] > arr[j+1]:
swap(arr, j, j+1)
swap(True)
Подробнее здесь: https://stackoverflow.com/questions/791 ... algorithms
Python: декоратор для подсчета свопов в алгоритмах сортировки ⇐ Python
Программы на Python
-
Anonymous
1730923033
Anonymous
Я хочу написать декоратор, который будет подсчитывать количество свопов в алгоритме сортировки. Я создал функцию swap для замены чисел и декоратор, который подсчитывает каждый вызов этой функции. Проблемы, с которыми я столкнулся, заключаются в следующем: когда я подсчитываю количество вызовов для нескольких алгоритмов, он подсчитывает «обмены» для каждого из них и суммирует их. Другая проблема заключается в том, что каждый «своп» печатается в консоли. Ниже я привожу декоратор, обмен и пример алгоритма.
Декоратор:
def swapCounter(func):
def counter(*args, **kwargs):
counter.calls += 1
print(f"Swaps {counter.calls}")
return func(*args, **kwargs)
counter.calls = 0
return counter
Обмен:
def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i]
Пример алгоритма сортировки:
def bubbleSort(arr):
for i in range(len(arr)):
for j in range(0, len(arr)-i-1):
if arr[j] > arr[j+1]:
swap(arr, j, j+1)
return arr
Я пробовал добавлять флаги в декоратор и в функцию подкачки. При обмене флаг будет установлен в конце, что позволит декоратору выполнить сброс в нужный момент. Однако это не дало никаких результатов: AttributeError: объект «функция» не имеет атрибута «вызовы»
def swapCounter(func):
def counter(*args, **kwargs):
counter.calls+=1
if kwargs.get("flag")==True:
print(f"Swaps {counter.calls}")
counter.calls = 0
return func(*args, **kwargs)
return counter
def swap(arr=None, i=None, j=None, flag=None):
arr[i], arr[j] = arr[j], arr[i]
def bubbleSort(arr):
for i in range(len(arr)):
for j in range(0, len(arr)-i-1):
if arr[j] > arr[j+1]:
swap(arr, j, j+1)
swap(True)
Подробнее здесь: [url]https://stackoverflow.com/questions/79163367/python-decorator-to-count-swaps-in-sorting-algorithms[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия