#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()