Структуры данных в Python: синтаксические ошибки / ошибки форматирования, программа, которая удаляет элемент в списке и помещает его в конец очереди? - PullRequest
0 голосов
/ 28 сентября 2018

Итак, это мой «законченный» код для моего домашнего задания, которое состояло в том, чтобы изменить программу, удалив элемент из списка и добавив его в конец очереди.

Я перешел с Java на Python, поэтому у меня все еще возникают проблемы с пониманием и изучением правильного синтаксиса и форматирования.У меня есть ошибка в строке 41, где он говорит неверный синтаксис.Что было бы лучшим способом переписать это?(Я добавлю комментарий рядом с точной строкой в ​​коде). Также будет очень полезна любая помощь по форматированию (есть ли лучший способ написать цикл, слишком много избыточности и т. Д.), Я стараюсь изо всех сил!

Мой код:

class Queue(): 
    def __init__(self):
        self.items = [None] * 10
        self.size_ = 0
        self.front = 0
        self.rear = -1

    def size(self):
        return self.size_

    def isEmpty(self):
        return self.size_ == 0

    def peek(self):
        if self.isEmpty():
            raise Empty('Queue is empty')
        return self.items[self.front]

    def enqueue(self,item):
        self.addRear(item)

    def dequeue(self):
        return self.removeFront()

    def addRear(self, item):
        if self.size_ == len(self.items):
            self.resize(2 * len(self.items))
        avail = (self.rear + 1) % len(self.items)
        self.items[avail] = item
        self.rear = self.rear + 1
        self.size_ += 1

    def addFront(self,item):
        if self.size_ == len(self.items):
            self.resize(2*len(self.items))
        avail = 0
        if self.front == 0:
            if self.rear == -1:
                self.rear = 0
        avail = 0
        else:
            avail = len(self.items) - 1

        else: #################
              ########## Syntax error is here!! Should I rewrite the above as a while loop and then make this into an elif? 

            avail = (self.front - 1) % len(self.items)
        self.items[avail] = item
        self.front = avail
        self.size_ += 1

    def removeFront(self):
        if self.isEmpty():
            raise Empty('Queue is empty')
        answer = self.items[self.front]
        self.items[self.front] = None
        self.front = (self.front + 1) % len(self.items)
        self.size_ -= 1
        return answer

    def removeRear(self):
        if self.isEmpty():
            raise Empty('Queue is empty')
        answer = self.items[self.rear]
        self.items[self.rear] = None
        if self.rear == 0:
            self.rear = len(self.items) - 1
        else:
            self.rear = (self.rear - 1) % len(self.items)
            self.size_ -= 1
        return answer

    def resize(self, cap):
        old = self.items
        self.items = [None] * cap
        walk = self.front
        for k in range(self.size_):
            self.items[k] = old[walk]
            walk = (1 + walk) % len(old)
        self.front = 0
        self.rear = self.size_ - 1


q = Queue()
q.isEmpty()
q.addFront (100)
print(q.size())  
q.addFront (200)
q.addFront (500.58)
print(q.size())  
print(q.peek()) # print the front item of the queue
q.addRear(500)
q.addRear(600)
q.addFront(3.14)
print(q.size())
print(q.peek()) # print the front item of the queue
q.removeFront()
print(q.size())
print(q.peek()) # print the front item of the queue
q.addRear("True")
q.addRear("False")
print(q.size())   
q.isEmpty()   
q.addRear(8.4)
q.removeRear()
print(q.size())
print(q.peek()) # print the front item of the queue
q.addRear("C++")
q.addRear("Python")
q.addRear("Java")
print(q.size())
q.addFront ("Go")
q.addFront ("C")
print(q.size())
print(q.dequeue())
q.removeFront()   
q.removeFront()   
print (q.size())

Хорошо!Если я не достаточно конкретен, просто дайте мне знать.Я здесь, чтобы учиться, поэтому любой, кто является мастером в Python, научит меня искусству эффективного кода Python!

1 Ответ

0 голосов
/ 29 сентября 2018

Я не думаю, что могу помочь с редактированием вашего кода, но ошибка в вашем коде заключается в том, что else: не выбирает аргумент if, поскольку они останавливаются / прерываются при назначении vend = 0.

Если вы хотите добавить элемент за списком, вы можете просто использовать:

li = ['front', 'mid', 'back'] + ['newBack']

whick выводит:

['front', 'mid', 'back', 'newBack']

, если вы хотите добавить впереди, просто:

li = ['newFront'] + ['front', 'mid', 'back'] 

, который выводит:

['newFront', 'front', 'mid', 'back']

, если вы хотите удалить первый элемент, вы можете:

li = ['newFront', 'front', 'mid', 'back']
removed = li.pop(0)

, где результирующие значения будут:

li = ['front', 'mid', 'back']
removed = 'newFront'

примечание: list.pop (index) - это метод, который удаляет элемент из индекса в указанном списке и возвращает его, если значение индекса не вставлено, он удалит последний элемент в списке.pop полезен для управления очередью.

...