2015-10-05 3 views
-4

Мой код, окружающий цикл while, по большей части отлично работает. Однако цикл while не перестает повторяться, даже если пользователь вводит 5, которые должны заставить его выйти. Это теперь включает весь код, имеющие отношение к функции Я пытаюсь отлаживать, я извиняюсь за путаницу:Пока цикл повторяется не будет

def dinos(): 
welcomeTheCustomer() 
selection = "\0" 
while selection != "4": 
    selection = requestUserInput() 

    if selection is "1": 
     order() 
    elif selection is "2": 
     checkOut() 
    elif selection is "3": 
     startOver() 

print("Have a good day!") 


def askUserToChooseADonut(): 
print("\n -MENU-\n 1.Strawberry Twizzler\n 2.Chocolate-dipped Maple Puff\n 3.Vanilla Chai Strudel\n 4.Honey-Drizzled Lemon Dutchie\n 5.Done\n") 
donutChoice = int(raw_input("Please enter a selection: ")) 
return(donutChoice) 

def askUserToSpecifyDonutQuantity(): 
donutQuantity = "d" 
while not donutQuantity.isdigit(): 
    donutQuantity = str(raw_input("Please enter a quantity of donuts: ")) 
return int(donutQuantity) 
print ("Confirmed") 

def order(): 
donutChoice = 0 

donutQuantity1 = 0 
donutQuantity2 = 0 
donutQuantity3 = 0 
donutQuantity4 = 0 

while not (donutChoice == 5): # loop until the customer selects '5. Done' 
    donutChoice = int(askUserToChooseADonut()) 
    donutQuantity = askUserToSpecifyDonutQuantity() 

    if donutChoice is 1: 
     donutQuantity1 = donutQuantity 
    elif donutChoice is 2: 
     donutQuantity2 = donutQuantity 
    elif donutChoice is 3: 
     donutQuantity3 = donutQuantity 
    elif donutChoice is 4: 
     donutQuantity4 = donutQuantity 

return (donutQuantity1, donutQuantity2, donutQuantity3, donutQuantity4) 
+0

'is' не то же самое, как' '==. –

+3

Также является 'donutChoice' целым числом или строкой? '" 5 "! = 5'. – Bakuriu

+2

Python использует отступы, чувствительные к синтаксису .... Пожалуйста, используйте ссылку редактирования на свой вопрос и исправьте код –

ответ

2

вы проверяете donutChoice в строку в этой строке

while donutChoice != "5": 

но с междунар в это один

if donutChoice is 1: 

Я предполагаю, что переменная donutChoice является ИНТ, чтобы ваш цикл в то время как должно быть, как это

while donutChoice != 5 

(Кстати, я думаю you should use '==' instead of 'is').

+0

Это целое число, но даже при изменении «5» на 5 цикл while не прекращает повторять , Мне нужно, чтобы он зацикливался до тех пор, пока donutChoice не равен 5, поэтому я не понимаю, как использование == поможет? –

+0

Я рекомендую вам добавить несколько строк журнала и распечатать 'type (donutChoice)', 'donutChoice == 5' и' donutChoice == "5" ', для более легкого отладки – huapito

+0

Я добавил donutChoice == 5 в код, но Я не понимаю, что вы подразумеваете под строками журнала? Извините, я очень новичок в кодировании. –

0

Я уверен, что вы пропустили основную концепцию в Python: 7 и "7" являются НЕ то же самое.

>>> a = 7 
>>> b= "7" 

>>> print(type(a)) 
<class 'int'> 

>>> print(type(b)) 
<class 'str'> 

Имея while != 5 будет продолжать цикл для [-inf-4] U [6-inf]. Но если вы перейдете на while <5, будет цикл только для [-inf-4].

+0

Я неправильно сделал donutChoice строку, однако изменяя это целое число не решило проблему, спасибо! –

+0

Измените ее на 'while <5' – Leb

0

Вы смешиваете строки и целые числа. Преобразуйте все в int. В идеале функции должны возвращать целые числа.

Кроме того, похоже, что вам не нужно использовать все эти аналогичные переменные. Вместо этого используйте список:

donutChoice = 0 
donutQuantity = [0] * N_DONUT 

while donutChoice in range(5): 
    donutChoice = int(askUserToChooseADonut()) 
    quantity = int(askUserToSpecifyDonutQuantity()) 
    # There should be verification in "askUserToChooseADonut", 
    # so this if should not be necessary. 
    if donutChoice != 0 
     donutQuantity[donutChoice-1] += quantity 
return donutQuantity 
0

С помощью этого кода вы принимаете ввод как строку и сравниваете его с целым числом.

while donutChoice != 5: # loop until the customer selects '5. Done' 
    donutChoice = askUserToChooseADonut() 

Изменить это, чтобы заставить вход быть целым числом:

while donutChoice != 5: # loop until the customer selects '5. Done' 
    donutChoice = int(askUserToChooseADonut()) 

(Вы должны делать то же самое для вашего количества пончиков, если ожидается, что это должно быть целым числом)

С консоли, вы можете понять, почему donutChoice никогда не будет равна 5.

>>> "1" == 1 
False 

Далее больше, вы должны изменить все свои if donutChoice is ... на if donutChoice == .... Он будет работать для низких целых чисел, потому что python interns насчитывает от 1 до 256 для лучшей производительности (так будет работать is), он начнет вести себя странно, если эти цифры будут расти. Для целых сравнений рекомендуется всегда использовать ==.

>>> a = 1 
>>> a is 1 
True 
>>> a = 257 
>>> a is 257 
False 
0

Этот код отлично подходит для меня. Я использую python 3.3.3

Защиту порядка():

donutChoice = "0" 

donutQuantity1 = 0 
donutQuantity2 = 0 
donutQuantity3 = 0 
donutQuantity4 = 0 

while donutChoice != "5": # loop until the customer selects '5. Done' 
    donutChoice = input("Enter a choice: ") 
    donutQuantity = input("Enter the Quantity: ") 

    if donutChoice is 1: 
     donutQuantity1 = donutQuantity 
    elif donutChoice is 2: 
     donutQuantity2 = donutQuantity 
    elif donutChoice is 3: 
     donutQuantity3 = donutQuantity 
    elif donutChoice is 4: 
     donutQuantity4 = donutQuantity 

return (donutQuantity1, donutQuantity2, donutQuantity3, donutQuantity4) 

порядка()

Tushar

+0

Спасибо, но я обязателен для этого класса, чтобы использовать 2.7.1 –

+0

Пробовал на 2.7, а ... !!! За работой –

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