2016-12-07 2 views
1

У меня это упражнение, рассчитывается стоимость отправки небольшой посылки. Расходы почтового отделения R5 на первые 300 г и R2 на каждые 100 г после этого (округленные) до максимального веса 1000 г.Python вложенное if-else только выполнено else

weight = raw_input("What are the weight of you parcel: ")  

if weight <= 1000: 
    if weight <= 300: 
     cost = 5 
    print("You parcel cost: " + cost) 
    else: 
     cost = 5 + 2 * round((weight - 300)/ 100) 
     print("You parcel cost: " + cost) 
else: 
    print("Maximum weight for amall parcel exceeded.") 
    print("Use large parcel service instead.") 

Когда я запускаю консоль IDLE, я нахожу только последние утверждения.

ответ

2

Во-первых, у вас есть отступа проблемы. Во-вторых, вы сравниваете строки в Интс. Затем сравните ...

>>> (350 - 300)/100 
0 
>>> (350 - 300)/float(100) 
0.5 

Вы должны проверить это самостоятельно, но round(0) = 0 и round(0.5) = 1.


Вот код, который должен исправить проблемы

weight = int(raw_input("What are the weight of you parcel: ")) 

if weight <= 1000: 
    if weight <= 300: 
    cost = 5 
    else: 
    cost = 5 + 2 * round((weight - 300)/float(100)) 
    print("Your parcel cost: {}".format(cost)) 
else: 
    print("Maximum weight for small parcel exceeded.") 
    print("Use large parcel service instead.") 
+0

Очень спасибо, вы ответите на мой вопрос, но я думаю, что вы забыли: – iratxe

+0

извините ... вы забыли: напечатайте («Стоимость посылки:« + str (стоимость)), в выражении if ..., теперь все это isyyyyyyyyyyy gut, спасибо – iratxe

+0

Нет, я не забыл. Вам не нужны два оператора печати - просто печатайте после и за пределами else –

1

weight становится string type на линии 1, затем в if statement сравнить weight с int. Исправьте это путем преобразования пользовательского ввода INT

Измените свою первую строку:

weight = int(raw_input("What are the weight of you parcel: ")) 

Кроме того, если вы используете python3 Я хотел бы изменить raw_input к input

+0

Не стоит ли вводить строку и int, чтобы поднять TypeError? – lucasnadalutti

+0

В Python 3 я думаю, но он работает в Python 2. – Iluvatar

+0

@lucasnadalutti думает так же, но, по-видимому, только в python3. – polku

4

Cast weight к междунар, weight = int(weight). Сейчас это строка, которая всегда имеет значение False по сравнению с 1000.

+0

@IIuvatar, что можно сделать и взломать ti .... Спасибо – iratxe

+0

Спасибо, у меня есть то, что вы мне скажите, но когда я пишу 350, не приходите первым else statements ... – iratxe

+0

Если ваш код написан так, у вас есть ложный отступ в первом выражении 'print'. – Iluvatar

0

поплавка (Использование input() вместо raw_input() для целых и не пытаться конкатенации строк и целых чисел

Следующий код работает:.

weight = input("What are the weight of you parcel: enter code here") 

if weight <= 1000: 
    if weight <= 300: 
     cost = 5 
     print("You parcel cost: " + str(cost)) 
    else: 
     cost = 5 + 2 * round((weight - 300)/ float(100)) 
     print("You parcel cost: " + str(cost)) 

else: 
    print("Maximum weight for amall parcel exceeded.") 
    print("Use large parcel service instead.") 
+0

Даже на Python 2.7? Я не знаком с 2.7, но я думал, что ввод попытается выполнить код Python – Pythogen

+0

Да, когда я пишу 350, я прихожу: не могу конкатенировать объекты 'str' и 'float' – iratxe

+0

Вопрос был помечен как python27 –

0

Cast переменная вес на поплавок при выполнении операции по математике по

weight=float(input()) 

Это решит все проблемы.

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