С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.01.2022
Сообщений: 16

Вставить данные в список таким образом, чтобы список оставался отсортированным

18.10.2022, 01:36. Показов 609. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Нужно выполнить задание, но сталкиваюсь с ошибками в коде для remove и insert функций. Не понимаю в чем дело. Insert должна вставлять данные в список таким образом, чтобы список оставался отсортированным. А remove находит и удаляет узел, содержащий дату из списка. Если узел, содержащий данные, был найден и удален, функция возвращает значение True. Если такой узел не был найден (даты не было в списке), функция возвращает значение False.

Тестовый код приложил.

a1.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class SortedList:
    class Node:
        
 
        def __init__(self, data=None):
            self.data = data
            self.next = None
            self.prev = None
 
 
    def __init__(self):
        self.front = None
        self.back = None
        self.count = 0
 
 
    def insert(self,data):  
        n = SortedList.Node(data)
    
        if self.front is None:    
            self.front  = n
            self.back  = n
        else:  
            n.prev = self.back 
            self.back .next = n    
            self.back  = n         
        self.count += 1
 
    def remove(self,data):
        curr = self.front
        deleted_fl = False
        if curr is None:  
            pass
        elif curr.data == data:  
            self.front = curr.next
            if self.front is not None: 
                self.front.prev = None  
                deleted_fl = True
            elif self.back.data == data: 
                self.back = self.back.prev
                self.back.next = None
                deleted_fl = True
            else: 
                while curr:
                    if curr.data == data:
                        curr.prev.next = curr.next
                        curr.next.prev = curr.prev
                        deleted_fl = True
                    curr = curr.next
            if deleted_fl:
                self.count -= 1
            return deleted_fl
test_a1.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import unittest
from a1 import SortedList
 
class A1TestCase(unittest.TestCase):
    """These are the test cases for functions and classes """
    
 
    def test_insert(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        my_data2 = ["orange", "apple", "cherry", "banana", "mango","pear","plum"]
        first_list = SortedList()
        second_list = SortedList()
        for i in my_data:
            first_list.insert(i)
 
        for i in my_data2:
            second_list.insert(i)
 
        my_data.sort()
        my_data2.sort()
        j = 0
        for i in first_list:
            self.assertEqual(i,my_data[j])
            j+=1
 
        self.assertEqual(j,len(my_data))
 
        j = 0
        for i in second_list:
            self.assertEqual(i,my_data2[j])
            j+=1
 
        self.assertEqual(j,len(my_data2))
 
        j = len(my_data) - 1
        for i in reversed(first_list):
            self.assertEqual(i,my_data[j])
            j-=1
 
        j = len(my_data2) - 1
        for i in reversed(second_list):
            self.assertEqual(i,my_data2[j])
            j-=1
 
 
 
    def test_len(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        my_data2 = ["orange", "apple", "cherry", "banana", "mango","pear","plum"]
        first_list = SortedList()
        second_list = SortedList()
        j=0
        for i in my_data:
            first_list.insert(i)
            j+=1
            self.assertEqual(len(first_list),j)            
 
        j=0
        for i in my_data2:
            second_list.insert(i)
            j+=1
            self.assertEqual(len(second_list),j)            
 
 
 
    def test_remove(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        sorted_data = [4,8,6,7,1,3,5,10,15,2,9]
        sorted_data.sort()
 
        first_list = SortedList()
 
        for i in my_data:
            first_list.insert(i)
 
        for i in my_data:
            self.assertEqual(first_list.remove(i),True)
            sorted_data.remove(i)
            self.assertEqual(len(first_list),len(sorted_data))
 
            j = 0
            for k in first_list:
                self.assertEqual(k,sorted_data[j])
                j+=1
 
            j = len(sorted_data) - 1
            for k in reversed(first_list):
                self.assertEqual(k,sorted_data[j])
                j-=1
 
 
 
    def test_is_present(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        my_data2 = ["orange", "apple", "cherry", "banana", "mango","pear","plum"]
        not_present = [16, 11, 12, 25,100]
        not_present2 = ["lichee", "peach", "watermelon", "grape"]
        first_list = SortedList()
        second_list = SortedList()
        for i in my_data:
            first_list.insert(i)
 
        for i in my_data2:
            second_list.insert(i)
 
        for i in my_data:
            self.assertEqual(first_list.is_present(i),True)
 
        for i in my_data2:
            self.assertEqual(second_list.is_present(i),True)
 
        for i in not_present:
            self.assertEqual(first_list.is_present(i),False)
 
        for i in not_present2:
            self.assertEqual(second_list.is_present(i),False)
 
 
 
 
if __name__ == '__main__':
    unittest.main()
Ошибка видна скриншоте
Миниатюры
Вставить данные в список таким образом, чтобы список оставался отсортированным  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2022, 01:36
Ответы с готовыми решениями:

Сформировать односвязный список так, чтобы после вставки каждого нового значения, список оставался отсортированным по возрастанию
сформировать односвязный список целочисл знач, таким образом чтобы после вставки каждого нового значения, список оставался отсортированным...

Вставить в непустой список новый элемент таким образом, чтобы сохранилась упорядоченность
Использовать таблицу 2.2. Дополнительно написать функцию, которая вставляет в непустой список, элементы которого упорядочены по...

в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным
Помогите пожалуйста! Как мне сделать задачу на C++ в win32. В Dos я ее сделал, а вот как сделать ее не в Dos я не знаю. Вот сама задача: ...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
18.10.2022, 08:25
evgeniyrus, метод insert должен содержать итерационный цикл или рекурсию. У тебя нет ни того, ни другого. Этот код не может быть правильным.

Добавлено через 20 минут
Вот набросал сортированный односвязный список. У тебя код должен быть сложнее

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Node:
    def __init__(self,val):
        self.value=val
        self.next=None
        
class Sorted_list:
    def __init__(self):
        self.start=None
        
    def insert(self,val):
        curr=self.start
        if curr is None:
            self.start=Node(val)
            return
        if curr.next is None:
            if curr.value >= val:
                if curr.value >= val:
                    self.start=Node(val)
                    self.start.next=curr
                else:    
                    curr.next=Node(val)
            return
        while True:
            if curr.next is None:
                curr.next=Node(val)
                return
            if curr.next.value >= val:
                q=Node(val)
                q.next=curr.next
                curr.next=q
                return
            curr=curr.next
            
    def print(self):
        curr=self.start
        while not (curr is None):
            print(curr.value)
            curr=curr.next
        
        
lst=Sorted_list()
lst.insert(7)
lst.insert(-7)
lst.insert(0)
lst.insert(9)
lst.insert(11)
lst.insert(10)
lst.print()
0
0 / 0 / 0
Регистрация: 22.01.2022
Сообщений: 16
18.10.2022, 08:48  [ТС]
Спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2022, 08:48
Помогаю со студенческими работами здесь

в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным
Подскажите, что не так делаю: Задание: Дан одномерный массив длиной N. Массив заполняется датчиком случайных чисел (лучше использовать...

Изменить список таким образом, чтобы все цены оказались в рублях
Дан список - цены товаров, которые Аркадий заказал в одном американском магазине. Новое компьютерное кресло, подставка под ноутбук, вебка и...

Список: Упорядочить элементы списка таким образом, чтобы все гласные были в начале
Здравствуйте. Нужно создать односвязный список из псевдослучайных символов от А до Я, упорядочив элементы таким образом, чтобы все...

Добавить в отсортированный бинарный файл число таким образом, чтобы файл остался отсортированным
помогите пожалуйста написать программу, которая добавляет в отсортированный бинарный файл число, таким образом, чтобы файл остался...

Преобразовать список таким образом, чтобы в начале были расположены нули, а потом – положительные числа
При этом использование встроенных функций не допускается, считается, что списки имеют двухуровневую структуру Добавлено через 46 минут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru