2015-03-22 3 views
0

надеюсь кто-то может помочь. im пытается создать виртуальный торговый автомат. ive дошел до моего кода, но застрял на нескольких вещах. Мне нужна помощь в создании кода в этом разделе.Python Виртуальный торговый автомат

count = 0 
TotalCredit = 0 
coinNum = int (input("How many coins would you like to enter: ")) 
while count in range (coinNum): 
    coin = float (input ("Coins accepted 0.10 0.20 0.50 1.00: £ ")) 
    TotalCredit = TotalCredit + coin 
count = count + 1 

так, если монеты Введенные ничего, кроме 0,10 0,20 0,50 1,00 печатает сообщение «Invalid монета вошла пожалуйста, попробуйте еще раз» и возвращается назад, чтобы начать.

Мне также нужен цикл while, если в нем недостаточно кредитов, он печатает «Недостаточно средств, пожалуйста, добавьте больше кредитов» и вернется, чтобы вы могли добавить кредит. Я знаю, что минимальная сумма кредита равна 0,59, поэтому у меня есть идея, что цикл является чем-то вроде «while TotalCredit < 0.59, но не уверен, как отправить пользователя обратно, чтобы добавить больше. ive перечисленный ниже код, чтобы вы могли видеть, насколько далеко ушел. им всего 15 и просто изучать кодирование, поэтому, пожалуйста, как можно больше помощи будет очень ценится.

def vendingMachine(): 

    count = 0 
    TotalCredit = 0 
    coinNum = int (input("How many coins would you like to enter: ")) 
    while count in range (coinNum): 
     coin = float (input ("Coins accepted 0.10 0.20 0.50 1.00: £ ")) 
     TotalCredit = TotalCredit + coin 
    count = count + 1 

    print ("You have £",round(TotalCredit,2),"credit ")  
    print ("") 
    print ("Choose your item:") 
    print ("")  
    print ("1.Coco-Cola") 
    print ("2.Walkers Cheese & Onion") 
    print ("3.Lucozade") 
    print ("4.Wosits") 
    print ("5.Water") 
    print ("") 
    FinalCredit = TotalCredit 
    round (FinalCredit, 2) 

    item = int (input ("Enter the number for your item: ")) 
    print ("") 
    while item <1 or item >5: 
     print ("This item is not available.") 
     item = int (input ("Enter the number for your item: ")) 
    if item == 1: 
     FinalCredit = TotalCredit - 0.59 
     print ("You now have a Coca-Cola can, costing £0.59.") 
     print ("You have",round(FinalCredit,2),"credit remaning.") 
    elif item == 2: 
     FinalCredit = TotalCredit - 0.69 
     print ("You now have a Walkers crisp packet, costing £0.69.") 
     print ("You have", round(FinalCredit,2),"credit remaning.") 
    elif item == 3: 
     FinalCredit = TotalCredit - 0.99 
     print ("You now have a Lucozade drink, costing £0.99.") 
     print ("You have" ,round(FinalCredit,2),"credit remaning.") 
    elif item == 4: 
     FinalCredit = TotalCredit - 0.59 
     print ("You now have a Wosits crisp packet, costing £0.59.") 
     print ("You have",round(FinalCredit,2),"credit remaning.") 
    elif item == 5: 
     FinalCredit = TotalCredit - 0.79 
     print ("You now have a bottle of water, costing £0.79.") 
     print ("You have",round(FinalCredit,2),"credit remaning.") 
    else: 
     print ("This not an option.") 
     print ("") 
     print ("The rest of your money, £(0), has been   
    outputted.".format(round(FinalCredit,2)))  

vendingMachine() 
+1

Исправьте углубление. Для части * ввода монет * обратите внимание на это SO Q & A [запрашивать пользователя для ввода, пока он не даст действительный ответ] (http://stackoverflow.com/q/23294658/2823755) – wwii

+0

Хорошей практикой является запись вниз, на словах, то, что вы пытаетесь сделать, и шаги, необходимые для достижения этого (так же, как вы это делали, задавая этот вопрос). Взгляните на эту * спецификацию * и попробуйте сгруппировать ее в * функциональные * куски.Попробуйте превратить этот текст в код - поиграйте в оболочку, чтобы увидеть, как все работает. – wwii

+1

Если у вас возникли проблемы с представлением о том, как превратить ваш * псевдокод * в код, это может означать, что вам еще не хватает словарного запаса *, и вам нужно потратить больше времени на [учебник] (https: //docs.python. org/3/tutorial/index.html), [BeginnersGuideNonProgrammers] (https://wiki.python.org/moin/BeginnersGuide/NonProgrammers) – wwii

ответ

0

Как о вводе второй части кода в другой метод, а затем вызвать vendingMachine() на основе пользовательского ввода? Кроме того, чтобы остановить баланс от значения ниже 0, мы можем добавить дополнительное условное выражение в цепочке if/elif. Нам также необходимо добавить параметр TotalCredit (поясняется ниже). Я добавил некоторые другие изменения, о которых я расскажу позже.

def query(TotalCredit): 
    print ("You have £" + str(round(TotalCredit,2)) + " credit\n")  
    print ("Choose your item:\n\n1.Coco-Cola\n2.Walkers Cheese & Onion\n3.Lucozade\n4.Wosits\n5.Water\n") 
    FinalCredit = TotalCredit 
    round (FinalCredit, 2) 

    item = int (input ("Enter the number for your item: ")) 
    print ("") 
    while item <1 or item >5: 
     print ("This item is not available.") 
     item = int (input ("Enter the number for your item: ")) 
    if item == 1 and FinalCredit >= 0.59: 
     FinalCredit = TotalCredit - 0.59 
     print ("You now have a Coca-Cola can, costing £0.59.") 
    elif item == 2 and FinalCredit >= 0.69: 
     FinalCredit = TotalCredit - 0.69 
     print ("You now have a Walkers crisp packet, costing £0.69.") 
    elif item == 3 and FinalCredit >= 0.99: 
     FinalCredit = TotalCredit - 0.99 
     print ("You now have a Lucozade drink, costing £0.99.") 
    elif item == 4 and FinalCredit >= 0.59: 
     FinalCredit = TotalCredit - 0.59 
     print ("You now have a Wosits crisp packet, costing £0.59.") 
    elif item == 5 and FinalCredit >= 0.79: 
     FinalCredit = TotalCredit - 0.79 
     print ("You now have a bottle of water, costing £0.79.") 
    else: 
     print ("This not an option.\n") 
     print ("The rest of your money, £(0), has been outputted.".format(round(FinalCredit,2))) 
    print ("You have "+str(round(FinalCredit,2))+" credit remaning.") 
    again = input("Would you like to enter the vending machine (y/n)?") 
    while again != 'y' and again != 'n': 
     again = input("Please input y or n") 
    if again == 'y': 
     vendingMachine() 

Далее в vendingMachine(), все, что нам нужно сделать, это сделать вызов query() и передать TotalCredit.

def vendingMachine(): 
    TotalCredit = 0 
    count = 0 
    coinNum = int (input("How many coins would you like to enter: ")) 
    while count in range (coinNum): 
     coin = float (input ("Coins accepted 0.10 0.20 0.50 1.00: £ ")) 
     TotalCredit = TotalCredit + coin 
     count = count + 1 
    query(TotalCredit) 

Теперь программа будет продолжать работать до тех пор, пока пользователь не будет вводить «n» при появлении запроса. Вот полный код:

def query(TotalCredit): 
    print ("You have £" + str(round(TotalCredit,2)) + " credit\n")  
    print ("Choose your item:\n\n1.Coco-Cola\n2.Walkers Cheese & Onion\n3.Lucozade\n4.Wosits\n5.Water\n") 
    FinalCredit = TotalCredit 
    round (FinalCredit, 2) 

    item = int (input ("Enter the number for your item:\n")) 
    while item <1 or item >5: 
     print ("This item is not available.") 
     item = int (input ("Enter the number for your item: ")) 
    if item == 1 and FinalCredit >= 0.59: 
     FinalCredit = TotalCredit - 0.59 
     print ("You now have a Coca-Cola can, costing £0.59.") 
    elif item == 2 and FinalCredit >= 0.69: 
     FinalCredit = TotalCredit - 0.69 
     print ("You now have a Walkers crisp packet, costing £0.69.") 
    elif item == 3 and FinalCredit >= 0.99: 
     FinalCredit = TotalCredit - 0.99 
     print ("You now have a Lucozade drink, costing £0.99.") 
    elif item == 4 and FinalCredit >= 0.59: 
     FinalCredit = TotalCredit - 0.59 
     print ("You now have a Wosits crisp packet, costing £0.59.") 
    elif item == 5 and FinalCredit >= 0.79: 
     FinalCredit = TotalCredit - 0.79 
     print ("You now have a bottle of water, costing £0.79.") 
    else: 
     print ("This not an option.\n") 
     print ("The rest of your money, £(0), has been outputted.".format(round(FinalCredit,2))) 
    print ("You have " + str(round(FinalCredit,2)) + " credit remaning.") 
    again = input("Would you like to enter the vending machine (y/n)?\n") 
    while again != 'y' and again != 'n': 
     again = input("Please input y or n\n") 
    if again == 'y': 
     vendingMachine() 


def vendingMachine(): 
    count = 0 
    TotalCredit = 0 
    coinNum = int (input("How many coins would you like to enter: ")) 
    while count in range (coinNum): 
     coin = float (input ("Coins accepted 0.10 0.20 0.50 1.00: £ ")) 
     TotalCredit = TotalCredit + coin 
     count = count + 1 
    query(TotalCredit) 

vendingMachine() 

Некоторые другие вещи:

  • Вы можете поместить \n внутри строки, чтобы добавить новую строку, вместо использования пуста оператор печати
  • str преобразует тип в строку, а + между строками объединяется, их или объединяет.
  • raw_input такая же, как input, за исключением того, что возвращает строку (только в Python 2.7)
  • Если вы оказываетесь постоянно повторять ту же самую линию (ы) кода, то вам необходимо либо поставить его в функцию или найти лучшее место для него. Например, вы использовали print ("You have",round(FinalCredit,2),"credit remaning.") после каждого оператора if/elif. Вместо этого вы могли бы просто добавить его в конце (что я и сделал).

Удача в изучении программирования! Дайте мне знать, если у вас есть еще вопросы. В будущем убедитесь, что вы правильно отформатировали свой код перед публикацией. Я также принимаю совет @ wwii на псевдокоде и планирую, что вы собираетесь писать заранее.

+0

перейдите к нему, но это происходит. Traceback (последний последний звонок): Файл «C: /Users/Darren/Desktop/101.py», строка 47, в vendingMachine() Файл «C: /Users/Darren/Desktop/101.py» , строка 45, in vendingMachine query (TotalCredit) Файл «C: /Users/Darren/Desktop/101.py», строка 30, в запросе again = raw_input («Вы хотите ввести торговый автомат (y/n)? \ n ") NameError: имя 'raw_input' не определено –

+0

Похоже, вы используете Python 3. Я изменил все ссылки raw-input() на input(). Теперь он должен работать – hmir

Смежные вопросы