2017-02-22 10 views
-4

Я пытаюсь создать торговый автомат в python, чтобы продолжить изучение этого предмета вне класса. В настоящее время я пытаюсь напечатать варианты напитков или закусок торгового автомата. До того, как я добавил функцию choose(), она полностью распечатала параметры списка, как только я добавил функцию select(), она печатает только первый элемент в списке.Список не распечатывается полностью, прежде чем перейти к следующей функции

import time 
drinkPairs=[("Apple Juice", 1.50), ("Monster", 3.75), ("Red Bull", 3.75), ("Sprite", 2.00), ("Water", 1.00)] 
drinkDict, drinkPrice = zip(*drinkPairs) 

snackPairs=[('Pringles', 3.50), ('Doritos', 3.15), ('Chocolate Donuts', 2.50), ('Honey Bun', 3.75), ('Cinnamon Roll', 3.50)] 
snackDict, snackPrice = zip(*snackPairs) 


def select(): 
    if 'drink' in answer.lower(): 
     drink() 
    elif 'snack' in answer.lower(): 
     snack() 
    else: 
     error() 
#give selection of items and costs of items 
def drink(): 
    print('Here are the drink options:\n') 
    for i, p in enumerate(drinkDict): 
     print('{}: ${:.2f}\n'.format(p,drinkPrice[i])) 
     #choose() 
def snack(): 
    print('Here are the snack items') 
    for i, p in enumerate(snackDict): 
     print('{}: ${:.2f}\n'.format(p,snackPrice[i])) 
     choose() 
def error(): 
    print("I'm sorry, I don't understand. Please try again.\n") 
    time.sleep(2) 
    select() 

def choose(): 
    selection=input('Which item would you like?\n') 
    if 'apple' in selection.lower(): 
     amountDue= amountDue + 1.50 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'monster' in selection.lower(): 
     amountDue= amountDue + 3.75 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'bull' in selection.lower(): 
     amountDue= amountDue + 3.75 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'sprite' in selection.lower(): 
     amountDue= amountDue + 2.00 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'water' in selection.lower(): 
     amountDue= amountDue + 1.00 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'pringles' in selection.lower(): 
     amountDue= amountDue + 3.50 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'doritos' in select.lower(): 
     amountDue= amountDue + 3.15 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'chocolate' in select.lower(): 
     amountDue= amountDue + 2.50 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'honey' in select.lower(): 
     amountDue= amountDue + 3.75 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    elif 'roll' in select.lower(): 
     amountDue= amountDue + 3.50 
     selectTwo=input('Would you like anything else?\n') 
     if selectTwo.lower().startswith('n'): 
      amountDue() 
     elif any(x in selectTwo.lower() for x in options): 
      choose() 
     else: 
      chooseError() 
    else: 
     chooseError() 


def chooseError(): 
    print("I'm sorry ,I don't understand. Please try again {}.".format(name)) 
    time.sleep(2) 
    choose() 

#welcome user to vending machine 
name=input('Welcome to Vending 2.0. What is your name?\n') 

answer= input('Okay {}, would you like a drink or snack?\n'.format(name)) 
select() 
+5

, потому что 'choose' должен блокировать (мы не имеем код) и находится в пределах вашей петли ... –

+0

Я не хочу, чтобы добавить весь код, если нет необходимости. Я добавлю это, чтобы показать остальное. –

+1

Переместите 'select()' из одного уровня отступов, если вы хотите, чтобы все было напечатано, прежде чем отображать приглашение для выбора. Сейчас он находится внутри цикла for, поэтому вы печатаете один элемент, а затем показываете приглашение. Если вы переместите его, вы распечатаете все элементы, а затем отобразите приглашение. –

ответ

0
for i, p in enumerate(snackDict): 
     print('{}: ${:.2f}\n'.format(p,snackPrice[i])) 
     choose() # <===================================== problem is likely here 

Я предполагаю, что choose() позволяет пользователю выбрать один из пунктов. Переместите choose() на один уровень отступов, если вы хотите, чтобы все было напечатано, прежде чем отображать приглашение для выбора. Сейчас он находится внутри цикла for, поэтому вы печатаете один элемент, а затем показываете приглашение. Если вы переместите его, вы распечатаете все элементы, а затем отобразите приглашение.

for i, p in enumerate(snackDict): 
     print('{}: ${:.2f}\n'.format(p,snackPrice[i])) 
    choose() # removed one indent. now the choice will happen *after* the loop 
+0

Я идиот, ты прав. Полностью даже не понимал, что я помещаю его в свою петлю. Спасибо за помощь. –

+0

@ KillianO'Brien: Глупые ошибки равны для курса. Независимо от того, как долго вы программируете, вы продолжите их делать (хотя они будут менее частыми). И вам станет лучше обнаруживать их после факта. –