Python: Список покупок: Товары не хранятся - PullRequest
0 голосов
/ 27 октября 2018

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

shopping_list = []


def show_help():
    print("What should we pick up at the store?")

    print("""
  Enter 'DONE' to stop adding items.
  Enter 'HELP' for this help.
  Enter 'SHOW' to see your current list.
  """)


def add_to_list():
shopping_list.append(new_item)
print("Here is the item that it's been added {}. There are now {} items".format(new_item, len(shopping_list)))


def show_list():
    index =  1
    for index, item in shopping_list:
        print("Here is the current  shopping list: {}. {}".format(index,item))
    index = index + 1
show_help()

while True:
    new_item = input("> ")

     if new_item == 'DONE':
        break
     elif new_item == 'HELP':
        show_help()
        continue
     elif new_item == 'SHOW':
        show_list()
        continue

     add_to_list()

show_list()

Вопрос: Почему строка не сохраняется всписок

Ответы [ 4 ]

0 голосов
/ 27 октября 2018

у вас также была неправильная функция show_list.Это был тест на Python 3.7

shopping_list = []

def show_help():
    print("What should we pick up at the store?")

    print("""
  Enter 'DONE' to stop adding items.
  Enter 'HELP' for this help.
  Enter 'SHOW' to see your current list.
  """)


def add_to_list():
    shopping_list.append(new_item)
    print("Here is the item that it's been added {}. There are now {} items".format(new_item, len(shopping_list)))


def show_list():
    for index, item in enumerate(shopping_list):
        print("Here is the current  shopping list: {}. {}".format(index, item))
    show_help()

while True:
    new_item = input("> ")

    if new_item == 'DONE':
        break
    elif new_item == 'HELP':
        show_help()
        continue
    elif new_item == 'SHOW':
        show_list()
        continue

    add_to_list()

show_list()
0 голосов
/ 27 октября 2018

Это так, потому что вы не передаете какой-либо элемент методу add_to_list().

Код должен выглядеть следующим образом:

shopping_list = []


def show_help():
    print("What should we pick up at the store?")

    print("""
  Enter 'DONE' to stop adding items.
  Enter 'HELP' for this help.
  Enter 'SHOW' to see your current list.
  """)


def add_to_list(new_item):
    shopping_list.append(new_item)
    print("Here is the item that it's been added {}. There are now {} items".format(new_item, len(shopping_list)))


def show_list():
    index =  1
    for index, item in shopping_list:
        print("Here is the current  shopping list: {}. {}".format(index,item))
    index = index + 1
show_help()

while True:
    new_item = input("> ")

     if new_item == 'DONE':
        break
     elif new_item == 'HELP':
        show_help()
        continue
     elif new_item == 'SHOW':
        show_list()
        continue

     add_to_list(new_item)

show_list()
0 голосов
/ 27 октября 2018

input() интерпретирует входные данные, т.е. если пользователь, например, вводит целочисленное значение, функция ввода возвращает это целочисленное значение.Если пользователь с другой стороны вводит список, функция возвращает список.

Если вы не заключите свой ввод в кавычки, Python воспринимает ваше имя как переменную.Итак, сообщение об ошибке имеет смысл!

Чтобы избежать этой ошибки, вы должны преобразовать переменную input в строку.Например: «ABC»


В качестве альтернативы вы можете использовать raw_input().raw_input не интерпретирует вход.Он всегда возвращает ввод пользователя без изменений, т.е. необработанный.Этот необработанный ввод можно изменить на тип данных, необходимый для алгоритма.

Дальнейшее чтение

0 голосов
/ 27 октября 2018

Исходя из вашей ошибки, я думаю, что вы, возможно, используете Python 2.7, и ошибка в том, что вы использовали input() вместо raw_input().При использовании Python 3 input() следует использовать.

Поэтому измените new_item = input("> ") на new_item = raw_input("> "), и это должно остановить вашу ошибку.


Однако в вашем коде также есть ошибка, когда вы распечатываете окончательный список и в функции show_list.Цикл for проходит только через каждый элемент списка, если только вы не вызовете enumerate, который будет возвращать индекс и элемент по мере его прохождения.

Это, вероятно, то, что вы ищете в этой функции:

def show_list():
    for index, item in enumerate(shopping_list):
        print("Here is the current shopping list: {}. {}".format(index,item))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...