2016-09-17 1 views
-1

Я делаю код для школьного проекта, и я попытался включить цикл while, но оператор if, который находится внутри этого цикла, не распознается, и программа не распознает переменную Correct_Weight под каждым утверждением, и вместо этого она принимает это как 0, что вызывает деление на нулевую ошибку.Пока цикл не распознает оператор и переменные?

код это:

Coin_Grams = 0 
Correct_Weight = 0 
Difference = 0 
Total_Coins_Removed = [] 
Total_Coins_Added = [] 
Coins_To_Remove = 0 
Coins_To_Add = 0 
Number_Of_Bags_Checked = 0 
Continue = "y" 

print ("Welcome to our program!") 

while Continue == "y": 
    Type_Of_Coin = input("Please enter the type of coin in the bag") 
    break 
    if Type_Of_Coin == "1 pence": 
     Coin_Grams = 3.56 
     Correct_Weight = Coin_Grams * 100 
    elif Type_Of_Coin == "2 pence": 
     Coin_Grams = 7.12 
     Correct_Weight = Coin_Grams * 50 
    elif Type_Of_Coin == "5 pence": 
     Coin_Grams = 3.25 
     Correct_Weight = Coin_Grams * 100 
    elif Type_Of_Coin == "10 pence": 
     Coin_Grams = 6.50 
     Correct_Weight = Coin_Grams * 50 
    elif Type_Of_Coin == "20 pence": 
     Coin_Grams = 5.00 
     Correct_Weight = Coin_Grams * 50 
    elif Type_Of_Coin == "50 pence": 
     Coin_Grams = 8.00 
     Correct_Weight = Coin_Grams * 20 
    elif Type_Of_Coin == "1 pound": 
     Coin_Grams = 9.50 
     Correct_Weight = Coin_Grams * 20 
    elif Type_Of_Coin == "2 pounds": 
     Coin_Grams = 12.00 
     Correct_Weight = Coin_Grams * 10 
    else: 
     print ("Type of coin is wrong please try again") 


Current_Weight = int(input("How much does the bag weight?")) 

Difference = Current_Weight - Correct_Weight 
print ("The difference is" ,Difference, "grams") 

if Difference <= 0: 
    Coins_To_Add = abs(Difference)/Coin_Grams 
    Total_Coins_Add.append(Coins_To_Add) 
    print ("You need to add" ,round(Coins_To_Add), "coins") 
elif Difference >= 0: 
    Coins_To_Remove = Difference/Coin_Grams 
    Total_Coins_Removed.append(Coins_To_Remove) 
    print ("You need to remove" ,round(Coins_To_Remove), "coins") 
else: 
    print ("You don't need to remove or add any coins") 
Number_Of_Bags_Checked = Number_Of_Bags_Checked + 1 

Continue = input("Do you have any more bags to check? please answer as y or n") 
print ("\n") 

if Continue == "n": 
    print("\n") 
    print (Number_Of_Bags_Checked,"bags have been checked") 
    print ("\n") 
    print (Total_Coins_Removed,"coins have been removed in total") 
    print ("\n") 
    print (Total_Coins_Added,"coins have been added in total") 

и ошибка заключается в следующем:

enter image description here

+0

Что это за безусловный 'break' в вашем цикле while? – Mat

+0

Вы выполняете 'break' справа в верхней части цикла. –

+1

Пожалуйста, разместите сообщения об ошибках * в своем вопросе как текст *. Невозможно найти скриншот. –

ответ

0

На вершине Coin_Grams установлен в 0:

Coin_Grams = 0 

и вы никогда не ставьте его на что-то еще, потому что вы вырваться из петли сразу:

while Continue == "y": 
    Type_Of_Coin = input("Please enter the type of coin in the bag") 
    break 

Это не имеет значения, что другой код в цикле прошлого этого момента, потому что вы сказали, Python, чтобы его игнорировать.

Таким образом, вы получаете Coint_Grams, все еще установленный на 0, и это дает вам деление на ноль исключение.

Поместите breakв конце петли, а также использовать continue в блоке else::

while True: 
    Type_Of_Coin = input("Please enter the type of coin in the bag") 
    if Type_Of_Coin == "1 pence": 
     # etc. 

    else: 
     print ("Type of coin is wrong please try again") 
     # when you get here the type of coin was incorrect, start again 
     continue 

    break # when you get here the type of coin was correct, so break out 

Я также заменил условие while; ваш тест == всегда верен, и вам не нужно изменять значение переменной Continue, поэтому вы можете просто проверить для while True здесь.

+0

okei so, если я удаляю break, тогда вопрос ввода Type_Of_Coin продолжает повторяться бесконечно. –

+0

@CodyDenisa: Я уже давно добавил, как это решить; переместите 'break' в * конец * и убедитесь, что он не достигнут, когда запись типа монеты неверна, добавив' continue' в блок 'else'. –

+0

@MartijnPieters Хорошо, я сделал то, что вы показали мне, и это работает хорошо, это говорит мне о различии, сколько нужно удалить или добавить, НО, когда я отвечаю, что хочу продолжить вопрос «Продолжить», ничего не происходит, любые идеи почему? Поскольку я хочу, чтобы программа повторялась снова, если пользователь хочет проверить еще один мешок, цикл while должен повторить снова с вопросом Type_Of_Coin –

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