Python не суммирует (добавляет) числа, просто склеивая их вместе

89
7

Итак, я только начал изучать, как кодировать (совершенно новый в этом), и я решил пойти с Python... Поэтому я недавно изучаю, как использовать функции для математики, и я делал свою собственную "кодировку", чтобы увидеть если я могу придумать результат, я хочу, чтобы использовать функции для добавления x + y и дать мне результат, но я продолжаю получать литерал x + y, а не сумму этих двух чисел. например. 1 + 1 = 11 (вместо 2)


Ниже приведен код, может ли кто-нибудь рассказать мне, что я делаю неправильно. Спасибо! ~
(и да, я использую книгу, но она как-то расплывчата в объяснениях [Learn Python the Hard Way])


def add(a, b):
print "adding all items"
return a + b

fruits = raw_input("Please write the number of fruits you have \n> ")
beverages = raw_input("Please write the number of beverages you have \n> ")

all_items = add(fruits, beverages)
print all_items


FYI, код, который мне дал книга, был:


    def add(a, b):
print "ADDING %d + %d" % (a, b)
return a + b

def subtract(a, b):
print "SUBTRACTING %d - %d" % (a, b)
return a - b

def multiply(a, b):
print "MULTIPLYING %d * %d" % (a, b)
return a * b

def divide(a, b):
print "DIVIDING %d / %d" % (a, b)
return a / b

print "Let do some math with just functions!"

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)

# puzzle
print "Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print "that becomes: ", what, "Can you do it by hand?"

спросил(а) 2017-10-22T20:20:00+03:00 2 года, 11 месяцев назад
1
Решение
132

В python (и многих других языках) оператор + выполняет двойную задачу. Его можно использовать для получения суммы двух чисел (число + число) или конкатенации строк (строка + строка). Конкатенация здесь означает объединение.


Когда вы используете raw_input, вы возвращаете пользовательский ввод в виде строки. Таким образом, выполнение fruits + beverages вызывает последнее значение +, которое является конкатенацией строк.


Чтобы обрабатывать ввод пользователя как число, просто используйте встроенную функцию int():

all_items = add(int(fruits), int(beverages))

int() здесь преобразует обе строки в целые числа. Затем эти числа передаются на add(). Имейте в виду, что если вы не выполняете проверку, чтобы убедиться, что пользователь ввел номер, неправильный ввод вызовет ValueError.

ответил(а) 2017-10-22T20:22:00+03:00 2 года, 11 месяцев назад
71

Функция raw_input возвращает строку, а не число. Оператор +, используемый в строках, объединяет их.

Вам нужно разобрать строки в числах, используя int() или float() в результате.

ответил(а) 2017-10-22T20:26:00+03:00 2 года, 11 месяцев назад
69

Оператор "+" может быть оператором конкатенации для строк, списков и т.д. и оператора сложения для чисел. Попробуйте добавить int() wrappers к вашим входам. Также вы можете увидеть тип переменной через type()

ответил(а) 2017-10-22T20:23:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема