Создание редактируемого списка. Код не показывает ошибок, но не выполняет правильную функцию - PullRequest
0 голосов
/ 17 ноября 2018

У меня проблема с моим кодом. Он не выдает ошибку, но работает не так, как ожидалось. Я пытался сделать программу, в которой пользователь может добавлять, редактировать, удалять, просматривать элементы в списке компьютерных игр. Тем не менее, когда бы я ни вводил что-либо в программа, она не завершает программу, но ничего не делает Что я могу сделать?

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

def add():
    newUserGame = input("Enter a game to add onto the end of the list:\n")
    computerGames.append(newUserGame)
    print(computerGames)
    askQuestion()

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")
    askQuestion()

def view():
    print("This is the current list of games:")
    print(computerGames)
    askQuestion()

def edit():
    editGame = input("Enter the game you want to replace:\n")
    if editGame in compGames:
        gameIndex = compGames.index(editGame)
        editGameNew = input("Enter the new game to replace this one")
        compGames[gameIndex] = editGameNew
    else:
        print("This item is not in the list")
        print(compGames)
        editGame = input("Enter the game you want to replace:\n")
    askQuestion()

askQuestion()

while response != "END":
    if response == "ADD":
        add()
    elif response == "DELETE":
        delete()
    elif response == "VIEW":
        view()
    elif response == "EDIT":
        edit()

Выполняю GCSE Computing, поэтому прошу прощения за отсутствие у меня способности к кодированию. Заранее спасибо за любую помощь !!

1 Ответ

0 голосов
/ 25 ноября 2018

Вот рабочая версия вашего кода:

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 в функции редактирования, поскольку это была простая синтаксическая ошибка.

Я пытался объяснить это как можно лучше, но сфера может быть довольно сложной, чтобы разобраться, поэтому спросите меня, если у вас есть какие-либо вопросы. Надеюсь, это поможет.

...