вложенные списки Python и ошибки логики цикла - PullRequest
0 голосов
/ 28 августа 2018

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

Логическая ошибка: вместо fanta следует печатать кокс

Код:

# creating a list of products in a vending machine
products = [(1,"fanta"),(2,"coke")]

# user input
choice = input("What do you want: ")

# creates a variable 'item' that is assigned to each item in list 'products'
for item in products:
    # creates two variables for each 'item' 
    item_number, product = (item)
    if choice == "fanta" or choice == str(1):
        # deletes the item because it was chosen
        del products[0]
        # why is product fanta and not coke since fanta is deleted?
        print(product, "are still left in the machine")

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Поскольку products является списком, остальные элементы можно распечатать с пониманием списка:

print(', '.join([product[1] for product in products]), "are still left in the machine")

напечатает все оставшиеся элементы в списке:

coke are still left in the machine

Если вы хотите удалить только items, введенный пользователем, вам не нужно перебирать список products, вы можете безопасно удалить эту строку:

for item in products: # remove this line

Тогда, если вы добавите больше элементов к products, например ::

products = [(1,"fanta"),(2,"coke"),(3,"mt. dew")]

после удаления списка пользователей из списка будет напечатан только оставшийся элемент:

What do you want: 1    
coke, mt. dew are still left in the machine

или

What do you want: fanta
coke, mt. dew are still left in the machine
0 голосов
/ 28 августа 2018

Одним из возможных решений является создание нового списка без подсписка.

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

# creating a list of products in a vending machine
products = [(1,"fanta"),(2,"coke")]

# user input
choice = input("What do you want: ")

if choice.isdigit():
    print([x for x in products if int(choice) != x[0]])
else:
    print([x for x in products if choice != x[1]])

Выход:

What do you want: 1
[(1, 'fanta'), (2, 'coke')]


What do you want: 1
[(2, 'coke')]

What do you want: 2
[(1, 'fanta')]

What do you want: fanta
[(2, 'coke')]

What do you want: coke
[(1, 'fanta')]
...