Получаю ошибку AttributeError при добавлении в кортеж

darkeven

Новичок
Пользователь
Май 15, 2021
2
0
1
Есть в константах кортеж:
Python:
menu = namedtuple('menu', 'num name_of_pizza cost')
PIZZAS = [menu(0, 'Margarita pizza', 4.25),
          menu(1, 'Neapolitan pizza', 6.15),
          menu(2, 'Cheese pizza', 5.49),
          menu(3, 'Chicken pizza', 8.60),
          menu(4, 'Buffalo pizza', 7.25),
          menu(5, 'Hawaii pizza', 6.70),
          menu(6, 'Bavaria pizza', 9.99)
          ]
К нему нужно добавить позицию, написал функцию для добавления:
Python:
def add_new_pizza():
    while True:
        new_position = input("Enter name of pizza: ")
        if new_position == "":
            break
        price = input("Enter the price of pizza: ")
        names = {item[1] for item in PIZZAS}
        if new_position not in names:
            PIZZAS.append((len(PIZZAS), new_position, price))
            print("Pizza added successfully")
В результате получаю ошибку:
Python:
in print_menu
    print(F"{pizza_item.num}. {pizza_item.name_of_pizza} {pizza_item.cost}$")
AttributeError: 'tuple' object has no attribute 'num'
 

Eflin

Новичок
Пользователь
Май 15, 2021
1
1
3
namedtuple - это впервую очередь расширение для обычного кортежа. Кортеж обозначается с помощью скобок.

Но также, скобки используются при вычислениях и они имеют самый высокий приоритет при выполнении математических операций.

И в твоём случае эта самая скобка играет роль скобки, (грубо говоря) а не указателя на то, что ты используешь именованный кортеж!

Так что, вот так должно работать (не пробовал)

Python:
PIZZAS.append(menu(len(PIZZAS), new_position, price))
 
  • Мне нравится
Реакции: darkeven

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
В результате получаю ошибку
В ошибке сказано что объект pizza_item имеет класс tuple и у него нет атрибута num.
 

darkeven

Новичок
Пользователь
Май 15, 2021
2
0
1
namedtuple - это впервую очередь расширение для обычного кортежа. Кортеж обозначается с помощью скобок.

Но также, скобки используются при вычислениях и они имеют самый высокий приоритет при выполнении математических операций.

И в твоём случае эта самая скобка играет роль скобки, (грубо говоря) а не указателя на то, что ты используешь именованный кортеж!

Так что, вот так должно работать (не пробовал)

Python:
PIZZAS.append(menu(len(PIZZAS), new_position, price))
Благодарю!
 

Форум IT Специалистов