Вот рабочая версия вашего кода:
computerGames = []
response = ""
def askQuestion():
for each in ('add','delete','edit','view','end'):
if each == 'view':
print('Type',each,'to',each,'the list')
elif each == "end":
print("Type",each,"to",each,'program')
else:
print('Type',each,'to',each,'an item in(to) the list')
response = input("Enter your choice\n").upper()
return response
def add():
newUserGame = input("Enter a game to add onto the end of the list:\n")
computerGames.append(newUserGame)
print(computerGames)
def delete():
userDeleteGame = input("Enter a game to delete:\n")
if userDeleteGame in computerGames:
computerGames.remove(userDeleteGame)
else:
print('Try again')
print(computerGames)
userDeleteGame = input("Enter a game to delete:\n")
def view():
print("This is the current list of games:")
print(computerGames)
def edit():
editGame = input("Enter the game you want to replace:\n")
if editGame in computerGames:
gameIndex = computerGames.index(editGame)
editGameNew = input("Enter the new game to replace this one")
computerGames[gameIndex] = editGameNew
else:
print("This item is not in the list")
print(computerGames)
editGame = input("Enter the game you want to replace:\n")
while response != "END":
response = askQuestion()
if response == "ADD":
add()
elif response == "DELETE":
delete()
elif response == "VIEW":
view()
elif response == "EDIT":
edit()
Первая проблема была из-за того, что называется областью действия. В верхней части программы вы пытаетесь создать экземпляр переменной «response», а затем обновить ее значение в функции askQuestion. Тем не менее, версия ответа с пустой строкой является глобальной переменной, и поэтому к ней можно получить доступ из любого места в программе, но обновленная версия ответа, введенная пользователем, является локальной переменной и поэтому не может быть доступна вне этой функции, так как вы не вернули новая переменная Поэтому, когда вы сравниваете значение «response» в цикле for и каждый оператор if, версия ответа, которую вы получаете, является пустой строкой. Поскольку у вас нет оператора else для перехвата ввода, не равного add, delete, view, edit или end, ни один из операторов if / elif / (else) не сработает, и цикл while повторяется. По этой причине я возвратил локальную переменную «response» из функции askQuestion и в цикле while установил значение глобальной переменной «response» как результат функции askQuestion.
Я также вызывал функцию askQuestion в вашем цикле while, а не в конце каждой из «оперативных» (из-за отсутствия лучшей фразы) функций, поскольку почти всегда лучше не повторять себя везде, где это возможно.
Наконец, я изменил каждый экземпляр compGames на computerGames в функции редактирования, поскольку это была простая синтаксическая ошибка.
Я пытался объяснить это как можно лучше, но сфера может быть довольно сложной, чтобы разобраться, поэтому спросите меня, если у вас есть какие-либо вопросы. Надеюсь, это поможет.