Добавление в список (из экземпляра класса) в python

#python #python-3.x

#python #python-3.x

Вопрос:

Я определил класс на python, содержащий множество ресторанов и подробную информацию о них. Теперь моя задача — создать переменную list на основе этого экземпляра класса, позволяющую пользователю добавлять или печатать список. Проблема, с которой я сталкиваюсь, заключается в операторе (ans == 2), в котором пользователь может добавлять свои новые рестораны и сведения о них.

Это код

 class Restaurant:
    def __init__(self,name,website,cuisine):
        self.name = name
        self.website = website
        self.cuisine = cuisine

dominoes = Restaurant("Dominoes", "www.dominoes.co.uk", "pizza")
yosushi = Restaurant("Yo Sushi!", "www.yosushi.co.uk", "sushi")
fiveguys = Restaurant("Five Guys", "www.fiveguys.co.uk" ,"burger")
  

Часть, которую я делаю, — это следующая, и мне сказали, что вышеупомянутый класс уже определен.

 def menu():
    restaurants = [dominoes, yosushi, fiveguys]
    ans= int(input("CS1822 Restaurant DBn1. Display restaurant listn2. Add a restaurantn3. 
ExitnPlease enter your choice:"))

while (ans != 3):

    if (ans == 1):
        for i in restaurants:
            print(i.name,i.website,i.cuisine)
        menu()

    if (ans == 2):
        new_res = (input("Enter restaurant name: "))
        restaurants.append(new_res)
        new_res.website = input("Enter website: ")
        new_res.cuisine = input("Enter cuisine: ")
        menu()

    if (ans == 3):
        print("Goodbye!")
  

Это ошибка, которую я получаю

 ***Error***
Traceback (most recent call last):
  File "__tester__.python3", line 22, in <module>
    while (ans != 3):
NameError: name 'ans' is not defined
  

Мои две проблемы, по которым я хотел бы получить помощь::
a) в моем цикле while указано, что переменная ans не определена и не
б) мой оператор if (ans == 2) полностью неверен и вообще не выполняется, указывая, что new_res не является объектом, который можно добавить.

Спасибо

Ответ №1:

Отступ, как он есть, делает цикл while НЕ частью функции menu() . Причина, по которой он говорит, что он не определен, заключается в том, что цикл while не имеет доступа к ans, поскольку он существует только в функции menu() .

 def menu():
    restaurants = [dominoes, yosushi, fiveguys]
    ans= int(input("CS1822 Restaurant DBn1. Display restaurant listn2. Add 
          a restaurantn3. ExitnPlease enter your choice:"))

    while (ans != 3):

        if (ans == 1):
            for i in restaurants:
                print(i.name,i.website,i.cuisine)
            menu()

        if (ans == 2):
            new_res = (input("Enter restaurant name: "))
            restaurants.append(new_res)
            new_res.website = input("Enter website: ")
            new_res.cuisine = input("Enter cuisine: ")
            menu()

        if (ans == 3):
            print("Goodbye!")
  

Эти 3 следующие строки являются проблемой с ans == 2. Вы обрабатываете строковую переменную ‘new_res’ как объект Restaurant.

 restaurants.append(new_res)
new_res.website = input("Enter website: ")
new_res.cuisine = input("Enter cuisine: ")
  

Вам нужно создать новый объект Restaurant, а затем добавить список ресторанов.

 if (ans == 2):
    res_name = input("Enter restaurant name: ")
    res_website = input("Enter website: ")
    res_cuisine = input("Enter cuisine: ")
    new_res = Restaraunt(res_name, res_website, res_cuisine)
    restaurants.append(new_res)
    menu()