Добавление к списку классов не похоже на работу - PullRequest
0 голосов
/ 16 марта 2020

У меня есть следующий код:

class Cola:
    def __init__(self):
        self.cola = [] 
    def add_list(self, element):
        self.cola.append(element)
    def numElements(self):
        return len(self.cola) 

def list_entry():
    membership= input("  Membership card? (y/n):  ")
    name= input("  Name:  ")
    lastname= (input("  Lastname:  "))
    return (membership, name, lastname)

def add_list():
    new= list_entry()
    Cola().add_list(new)

n = int(input("Choose an option\n   1.Add to waiting list\n   2.Show waiting customers\n   3.Close for today\n Option:   ")) 
while n<5:
    if n==1:
        add_list()
        n = int(input("Choose an option\n   1.Add to waiting list\n   2.Show waiting customers\n   4.Close for today\n Option:   ")) 
    elif n==2:
        waiting= Cola().numElements()
        print(waiting)
        n = int(input("Choose an option\n   1.Add to waiting list\n   2.Show waiting customers\n   4.Close for today\n Option:   ")) 
    elif n==3:
        print("See you")
        n=5

Проблема в том, что я ожидаю, что когда пользователь выберет 3, должен появиться номер экземпляра в списке, но вместо этого я всегда получаю 0, что говорит мне, что Я ничего не добавляю в список. Что я делаю не так?

Дополнительно: я подозреваю, что в долгосрочной перспективе список списков будет более полезным. Как я могу это сделать?

1 Ответ

4 голосов
/ 16 марта 2020

Всякий раз, когда вы говорите Cola(), вы создаете новый объект класса Cola. Вам необходимо сохранить элемент в переменной. Кроме того, вы также можете превратить созданные вами функции в методы:

class Cola:
    def __init__(self):
        self.cola = []
    def add_list(self, element):
        self.cola.append(element)
    def numElements(self):
        return len(self.cola)

def list_entry():
    membership= input("  Membership card? (y/n):  ")
    name= input("  Name:  ")
    lastname= (input("  Lastname:  "))
    return (membership, name, lastname)


cola_item = Cola()

n = int(input("Choose an option\n   1.Add to waiting list\n   2.Show waiting customers\n   3.Close for today\n Option:   "))
while n<5:
    if n==1:
        cola_item.add_list(list_entry())
        n = int(input("Choose an option\n   1.Add to waiting list\n   2.Show waiting customers\n   3.Close for today\n Option:   "))
    elif n==2:
        waiting= cola_item.numElements()
        print(waiting)
        n = int(input("Choose an option\n   1.Add to waiting list\n   2.Show waiting customers\n   3.Close for today\n Option:   "))
    elif n==3:
        print("See you")
        n=5

(я предположил, что ваша система счисления была 1, 2 или 3) Надеюсь, это поможет.

Также для ответьте на ваш дополнительный вопрос, если вы делаете это так, как я предлагаю, то вы, по сути, делаете именно это, за исключением того, что вы создаете список кортежей. Если вы поместите:

for item in cola_item.cola:
    print(item)

внутри блока elif n==2, вы сможете увидеть, что он печатает. Если вам явно нужен список списков, вы можете изменить return (membership, name, lastname) на return [membership, name, lastname]

В этом разница между списком и кортежем

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