2017-02-22 4 views
-4

私は教室外で学習するために、自動販売機をPythonで作成しようとしています。私は現在、自動販売機の飲み物や軽食のオプションを印刷しようとしています。関数choose()を追加する前に、リストオプションを完全に出力しました。選択()関数を追加すると、リストの最初の項目だけが出力されます。次の関数に行く前に完全に印刷されていないリスト

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

選択を求めるプロンプトを表示する前にすべてを印刷したい場合は、 'choose()'を1つのインデントレベルから移動してください。今はfor-loop内にあるので、1つの項目を印刷してプロンプトを表示します。移動すると、すべての項目が印刷され、プロンプトが表示されます。 –

答えて

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

私はchoose()は、ユーザーが項目のいずれかを選択することができますことを前提としています。選択を求めるプロンプトが表示される前にすべてを印刷したい場合は、choose()をインデントレベルの1つに移動してください。今はfor-loop内にあるので、1つの項目を印刷してプロンプトを表示します。移動すると、すべての項目が印刷され、プロンプトが表示されます。

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

私はばかです、あなたは正しいです。全く私のforループの中に入れていたことは全く分かりませんでした。助けてくれてありがとう。 –

+0

@ KillianO'Brien:愚かなエラーは、コースのパーです。どんなに長くプログラムしても、(それほど頻繁ではありませんが)あなたはそれらを作り続けるでしょう。あなたは事実の後でそれらを見つけ出すことでよくなるでしょう。 –

関連する問題