Я думаю, что было бы очень полезно создать функцию для получения ввода да / нет.Но по моему мнению, это не должно быть рекурсивным в отличие от ответа Лиамхокинса.Простого цикла while будет достаточно.И нет необходимости печатать какие-либо сообщения об ошибках, поскольку для пользователя совершенно очевидно, что что-то пошло не так, если вопрос задается снова с четкими инструкциями, как ответить.
def get_decision(question: str='y/n: '):
ans = ''
while ans not in ['y', 'n']:
ans = input(question)
return ans
everyone = {}
def people_database():
while True:
name = input("What is the name you would like to add?: ")
age = input("What is the age you would like to add?: ")
residence = input("What is the residence you would like to add?: ")
everyone["people"] = {"Name": name,
"Age": age,
"Residence": residence}
if get_decision('Would you like to add another? Enter y or n: ') == 'n':
break
people_database()
Вы, конечно, можете расширить списокпринятых ответов и соответственно усложняют условие принятия решения, но это минимальный пример.По моему мнению, принятие только одного символа для определенного действия более понятно, чем угадывание, что пользователь делает, хотя в этом случае это довольно однозначно.
Примечание, я не знаю полной историиваш случай, но кажется, что переопределение ключа people
в словаре не полезно в цикле.Возможно, вы захотите увеличить идентификатор, чтобы имитировать «базу данных»:
people = {}
def people_database():
person_id = 0
while True:
name = input('Name?: ')
age = input('Age?: ')
residence = input('Residence?: ')
people[person_id] = {
'Name': name,
'Age': age,
'Residence': residence
}
if get_decision('Would you like to add another? Enter y or n: ') == 'n':
break
person_id += 1
if __name__ == '__main__':
people_database()