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

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

18.10.2022, 01:36. Показов 646. Ответов 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
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru