@Retr0Hacker

Как отсортировать массив экземпляров класса на Питоне?

Недавно перешли на ООП с С++ на Python. Основы языка более менее знаю, но вот до ООП пришлось работать впервые.

Задача такая: "Создать класс – вещественные числа, описать поле: значение вещественного типа. Определить конструктор, функции изменения поля и получение его значения, функции разделения числа на целую и дробную части, формирование действительного числа из двух целых, соответствующих целой и дробной частям (в формате с фиксированной точкой). Перегрузить операции < (сравнение действительных чисел по значению целой части), [] (выделение дробной части числа). Отсортировать массив экземпляров класса действительных чисел по убыванию значения целой части, программно проверить, будут ли числа в массиве упорядочены, если учитывать дробные части.

Прошу помощи со следующими пунктами:
1) Перегрузить операции < и []
2) Отсортировать массив экземпляров класса действительных чисел по убыванию значения целой части.
Код:
class Float(object):
	def __init__(self, arg):	#конструктор
		self.__arg = arg
	
	@property					#геттер
	def getarg(self):
		return self.__arg

	def display_info(self):		#выведение результатов
		print(f"\nЧисло: {self.__arg}")

	def rozdel(self):			#розділение на целую и дробную части
		self.a = int(self.__arg)
		self.b = self.__arg - int(self.__arg)
		print(f"\nЦелая часть: {self.a}, Дробная часть: {self.b}")
		self.c = self.a + self.b
		print(f"\nПочаткове число: {self.c}")

	def __lt__(self, other):	#перегрузка <
		return self.a < other.a

#------------------------------------------------------------------
def SortArr(arr):
	print(self.a)
	for i in range(len(arr)):
		min = i
		for j in range(i+1, len(arr)):
			if arr[j] < arr[min]:
				min = j
		arr[i], arr[min] = arr[min], arr[i]

#------------------------------------------------------------------
if __name__ == '__main__':
	size = int(input("Введите кол-во элементов: "))
	
	arr = [Float(i) for i in range(size)]
	j = 0

	for i in arr:
		j += 1
		print("---------------------")
		print("Вариант %d" %(j))
		a = float(input("Введите вещественное число: "))
		b = Float(a)
		b.display_info()
		b.rozdel()

	print("\n-*-*-*-*-*-*-*-*-*-*-*-*-")
	print("Данные после сортировки:")
	SortArr(arr)
	for i in range(size):
		print(arr)
	print("-*-*-*-*-*-*-*-*-*-*-*-*-")
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Смотри магические методы __gt__(), __lt__(), __eq__(), __neq__() для сравнения.
Для реализации оператора [] смотри __getitem__() для чтения и __setitem__() для записи.

Ну и задавай конкретный вопрос, что не понятно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
15 июн. 2024, в 23:15
4000 руб./за проект
15 июн. 2024, в 23:01
4400 руб./за проект
15 июн. 2024, в 22:59
70000 руб./за проект