Python, если оператор elif else

Я пытаюсь создать программу с python, которая вычисляет стоимость доставки.

Однако я не могу запустить программу там, где она работает правильно.

То, что моя общая сумма равна той же сумме, составляет 6 долларов США для США и 8 долларов США для Канады. Кажется, я не могу пройти.

total = raw_input('What is the total amount for your online shopping?')
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= "50":
        print "Shipping Costs $6.00"
    elif total <= "100":
            print "Shipping Costs $9.00"
    elif total <= "150":
            print "Shipping Costs $12.00"
    else:
        print "FREE"

if country == "Canada":
    if total <= "50":
        print "Shipping Costs $8.00"
    elif total <= "100":
        print "Shipping Costs $12.00"
    elif total <= "150":
        print "Shipping Costs $15.00"
    else:
        print "FREE"

Ответы

Ответ 1

  1. вы должны получить целое число из raw_input, а не строку. используйте int().
  2. значения сравнения, такие как 50, 100, 150,... также должны быть integer.

Ниже приведен фиксированный код.

total = int(raw_input('What is the total amount for your online shopping?'))
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= 50:
        print "Shipping Costs $6.00"
    elif total <= 100:
        print "Shipping Costs $9.00"   # improved indentation
    elif total <= 150:
        print "Shipping Costs $12.00"  # improved indentation
    else:
        print "FREE"

if country == "Canada":
    if total <= 50:
        print "Shipping Costs $8.00"
    elif total <= 100:
        print "Shipping Costs $12.00"
    elif total <= 150:
        print "Shipping Costs $15.00"
    else:
        print "FREE"

Ответ 2

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

Например:

if int(total) < 50

Также могут помочь переменные, чтобы избежать дублирования.

Ответ 3

Вы сравниваете число строк. Это невозможно, например, сравнение apple с orange, которое больше? Компьютер не понимает этого, ему нужно сравнить размер.

Для этого нам нужно преобразовать его в целое число. Используйте функцию int(). Здесь:

#convert it to an integer straight away
total = int(raw_input('What is the total amount for your online shopping?')) 
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= 50:
        print "Shipping Costs $6.00"
    elif total <= 100:
            print "Shipping Costs $9.00"
    elif total <= 150:
            print "Shipping Costs $12.00"
    else:
        print "FREE"

if country == "Canada":
    if total <= 50:
        print "Shipping Costs $8.00"
    elif total <= 100:
        print "Shipping Costs $12.00"
    elif total <= 150:
        print "Shipping Costs $15.00"
    else:
        print "FREE"

Надеюсь, это поможет!

Ответ 4

Когда вы сравниваете строки, он делает это лексикографически, как в телефонной книге. Например:

"a" < "b": True
"bill" < "bob": Истинный
"100" < "3": True

Если вы хотите сравнить числа в порядке их подсчета, вам нужно использовать тип int.

total = int(raw_input('What is the total amount for your online shopping?'))

Затем измените все строковые литералы в вашем коде, например "50", на целые литералы, такие как 50.

Ответ 5

Это:

total = raw_input('What is the total amount for your online shopping?')

создает строку. Сравнение строк и чисел не очень четко определено. Сначала вам нужно преобразовать общее число в число. Пример:

total = int(raw_input('What is the total amount for your online shopping?'))

(это игнорирует обработку входных ошибок, например, когда пользовательский ввод не является числом)

Обратите внимание, что изменения поведения в Python 2.x и Python 3.x. В Python 2.x:

Объекты разных типов, кроме разных числовых типов и разных типов строк, никогда не сравнивайте одинаковые; такие объекты упорядочиваются последовательно, но произвольно (так что сортировка гетерогенного массива дает согласованный результат).

...

Подробности реализации CPython: объекты разных типов, кроме номеров, упорядочены по их именам типов; объекты того же типа, которые не поддерживают правильное сравнение, упорядочиваются по их адресу.

а в Python 3.x:

Объекты разных типов, кроме разных числовых типов, никогда не сравниваются с равными.

Ответ 6

При использовании raw_input пользовательский ввод вводится как строка, и вы не можете вычислять числа в формате строк. Поэтому вам нужно изменить свой ввод строки на целое число, чтобы выполнить сравнения. Вы можете сделать следующее:

total = int(raw_input('What is the total amount for your online shopping?'))
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= 50:
        print "Shipping Costs $6.00"
    elif total <= 100:
        print "Shipping Costs $9.00"
    elif total <= 150:
        print "Shipping Costs $12.00"
else:
    print "FREE"

elif country == "Canada":
    if total <= 50:
        print "Shipping Costs $8.00"
    elif total <= 100:
        print "Shipping Costs $12.00"
    elif total <= 150:
        print "Shipping Costs $15.00"
    else:
        print "FREE"

else:
    print "Try Again"

Ответ 7

Это нравится добавлять яблоки и дома, чтобы получить общее, что невозможно. Он должен быть того же типа, в этом случае целочисленного типа, чтобы получить общее количество. Используйте int(), чтобы преобразовать строку в целое число.

 total = int(raw_input('What is the total amount for your online shopping?'))

также может быть (но менее предпочтительным):

 total = raw_input('What is the total amount for your online shopping?')
 total = int(total)

Ответ 8

input возвращает строку

если total должен возвращать ввод для математических операций, то вы должны использовать плавающий ввод

total = (raw_input ('Какова общая сумма ваших покупок в Интернете?')) всего = поплавок (всего)

Ответ 9

Я просто свежее здесь и программирование на питоне. Я пытался решить вашу проблему. Надеюсь, это поможет тебе.

if country == 'US':
if total <= 50:
    print ('Shipping Costs $6.00')
elif total <= 100:
        print ('Shipping Costs $9.00')
elif total <= 150:
        print ('Shipping Costs $12.00')
else:
    print ('FREE')

elif country == 'Canada':
if total <= 50:
    print ('Shipping Costs $8.00')
elif total <= 100:
    print ('Shipping Costs $12.00')
elif total <= 150:
    print ('Shipping Costs $15.00')
else:
    print ('FREE')

else:
print ('Country name is case sensetive so do it perfectly')