Stack python function debugging issue

Question:

I have implemented the stack in python code.

class stack:
    arrlen = 0
    def __init__(self,arr,poin):
        self.arr = arr
        self.poin = poin
        arrlen = len(self.arr)

    def push(obj):
        self.poin = (self.poin+1)%arrlen
        self.arr[self.poin] = obj

    def pop():
        self.poin = (self.poin-1)%arrlen

    def printStack():
        for i in range(self.poin):
            print("",self.arr[i])
            print("n")

I am try to run this code:

x = int(input("Hello.Please write down the number of tasks you want to do for today:n"))
array = [None]*x
y = 0
mytasks = stack(array,x);
while(y is not 4):
    y = int(input("What do you want to do 1)add task 2) remove task 3)print remaining tasks 4)exitn"))
    if y is 1:
            tsk = input("Write down the name of your task:n")
            mytasks.push(tsk)
    if y is 2:
            mytasks.pop()
    if y is 3:
            mytasks.printStack()

However every time I type 1 to add a task to the stack when the push()function is called it stops debugging and it shows me a error message:

TypeError: stack.push() takes 1 positional argument but 2 were given

What does this mean?

Before this issue I had had a issue with the init function so I had removed the arrlen variable but then I readded the arrlen variable so I dont know where I am wrong.I am using the IDLE Shell 3.10.4

Asked By: Volpina

||

Answers:

self is the first argument of every python class method. Therefore, your method push should look like something like:

def push(self, obj):

    self.poin = (self.poin+1)%arrlen

    self.arr[self.poin] = obj

And even the methods where you don’t want to take any inputs, you should put self as the only parameter.

Answered By: Rubens Kaiserman
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.