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

Дек неограниченного размера

07.12.2020, 02:17. Показов 6023. Ответов 6

Студворк — интернет-сервис помощи студентам
Условие задачи:

Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

push_front
Добавить (положить) в начало дека новый элемент. Программа должна вывести ok.

push_back
Добавить (положить) в конец дека новый элемент. Программа должна вывести ok.

pop_front
Извлечь из дека первый элемент. Программа должна вывести его значение.

pop_back
Извлечь из дека последний элемент. Программа должна вывести его значение.

front
Узнать значение первого элемента (не удаляя его). Программа должна вывести его значение.

back
Узнать значение последнего элемента (не удаляя его). Программа должна вывести его значение.

size
Вывести количество элементов в деке.

clear
Очистить дек (удалить из него все элементы) и вывести ok.

exit
Программа должна вывести bye и завершить работу.
Размер дека должен быть ограничен только размером доступной оперативной памяти. Перед исполнением операций pop_front, pop_back, front, back программа должна проверять, содержится ли в деке хотя бы один элемент. Если во входных данных встречается операция pop_front, pop_back, front, back, и при этом дек пуст, то программа должна вместо числового значения вывести строку error.

Входные данные
Вводятся команды управления деком, по одной на строке.

Выходные данные
Требуется вывести протокол работы дека, по одному сообщению на строке.

Например:

ВводРезультат
push_backok
back1
exitbye
size0
push_back 1ok
size1
push_back 2ok
size2
push_front 3ok
size3
exitbye

Мой код:
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
size = 0 
deque = []
queue_head = 0
queue_tail = 0 
 
def isempty():
    return len(deque) == 0
 
def push_back(val):
    global deque, size
    deque.append(val)
    size += 1
    print('ok')
 
 
def push_front(val):
    global deque, size
    deque.insert(0, val)
    size += 1
    print('ok')
 
 
def pop_front():
  global queue_head, size
  if not isempty():
    queue_head = deque[0]
    size -= 1
    return queue_head
  else:
    return 'error'
 
def pop_back():
  global queue_tail, size
  if not isempty():
    queue_tail = deque[-1]
    size -= 1
    return queue_tail
  else:
    return 'error'
 
def front():
  if not isempty(): 
    return deque[0]
  else:
    print('error')
 
def back():
  if not isempty(): 
    return deque[-1]
  else:
    print('error')
 
def clear():
  global deque
  deque[:] = []
  print('ok')
 
while True:
  s = input().split(' ')
  if s[0] == 'push_front':
    push_front(int(s[1]))
  elif s[0] == 'push_back':
    push_back(int(s[1]))
  elif s[0] == 'pop_back':
    print(pop_back())
  elif s[0] == 'pop_front':
    print(pop_front())
  elif s[0] == 'front':
    print(front())
  elif s[0] == 'back':
    print(back())
  elif s[0] == 'size':
    print(size)
  elif s[0] == 'clear':
    clear()
  elif s[0] == 'exit':
    print('bye')
    break
Прошу помочь найти ошибку.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2020, 02:17
Ответы с готовыми решениями:

Дек неограниченного размера
Помогите пожалуйста! Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека,...

Создание универсальной очереди неограниченного размера
Консольное приложение должно быть выполнено с применением технологии объектно-ориентированого программирования. В шаблоне класса...

Реализовать дек ограниченного размера на базе массива
Деком называют структуру, которая сочетает очередь и стек : добавлять и убирать элементы можно с обоих концов. Надо реализовать дек...

6
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
07.12.2020, 10:16
Skiffi_,
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
from collections import deque
 
d = deque()
n = str(input()).split()
 
 
def push_back(elem):
    d.append(elem)
    print("ok")
 
 
def push_front(elem):
    d.appendleft(elem)
    print("ok")
 
 
def pop_front():
    print(d.popleft())
 
 
def pop_back():
    print(d.pop())
 
 
def back():
    print(d[-1])
 
 
def front():
    print(d[0])
 
 
def size():
    print(len(d))
 
 
def clear():
    d.clear()
    print("ok")
 
 
def exit():
    print("bye")
 
 
while n[0] != 'exit':
    if n[0] == 'push_back':
        push_back(n[1])
    elif n[0] == 'push_front':
        push_front(n[1])
    elif n[0] == 'pop_back':
        if len(d) > 0:
            pop_back()
        else:
            print('error')
    elif n[0] == 'pop_front':
        if len(d) > 0:
            pop_front()
        else:
            print('error')
    elif n[0] == 'back':
        if len(d) > 0:
            back()
        else:
            print('error')
    elif n[0] == 'front':
        if len(d) > 0:
            front()
        else:
            print('error')
    elif n[0] == 'size':
        size()
    elif n[0] == 'clear':
        clear()
    n = str(input()).split()
exit()
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
07.12.2020, 11:00
Catstail, удалить можно?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
07.12.2020, 11:25
Gdez, Вы про моё замечание? Могу. А код пусть остаётся. У меня не так много единомышленников.
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
07.12.2020, 12:00
Catstail, я про удаление своего кода , если он по соображениям модераторов по тем или причинам некорректен (считаю, на то они и существуют). Претензий не буду иметь от слова совсем
0
1 / 1 / 0
Регистрация: 03.12.2020
Сообщений: 4
07.12.2020, 15:26
Михаил,короч там это, ну ты понял
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
07.12.2020, 16:31
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

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
class Deque:
    def __init__(self, *content: any):
        self.content: [any] = list(content)
 
    def push_front(self, element: any) -> str:
        self.content.insert(0, element)
        return "ok"
 
    def push_back(self, element: any) -> str:
        self.content.append(element)
        return "ok"
 
    def pop_front(self) -> any:
        return self.content.pop(0) if self.content else "error"
 
    def pop_back(self) -> any:
        return self.content.pop(-1) if self.content else "error"
 
    def front(self) -> any:
        return self.content[0] if self.content else "error"
 
    def back(self) -> any:
        return self.content[-1] if self.content else "error"
 
    def size(self) -> int:
        return len(self.content)
 
    def clear(self):
        self.content.clear()
        return "ok"
 
 
deq = Deque()
for line in iter(input, "exit"):
    name, *args = line.split()
    print(getattr(deq, name)(*args))
print("bye")
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2020, 16:31
Помогаю со студенческими работами здесь

Стек и дек: Почему стек есть, с ним я могу работать, а дек я должен сам описывать?
Где взять этот дек? Почему я не могу в C# найти его и обратиться к нему? Почему стек есть, с ним я могу работать, а дек я должен сам...

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

Ввод неограниченного числа строк
Здравствуйте! Возникла проблема. Программа должна читать заранее не известное число строк, и выводить ответ (тестирующая система). Как в...

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

запуск неограниченного количества программ калькулятора
Помогите написать задачу по системному программному обеспечению. "Запуск неограниченного количества программ калькулятора и выборочное их...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru