python - возврат возвращает None - PullRequest
0 голосов
/ 04 мая 2018

Я написал функцию, которая получает два числа и операцию (строку) и возвращает результат двух чисел с данной операцией. Например, метод calc_matehamatic_expression (5,6, '+') должен возвращать 11. Я делю назначение на маленькие функции, но когда я вызываю эти маленькие функции, он всегда возвращает None. Может кто-нибудь объяснить мне, почему это происходит? Это код, который я написал:

def mathematical_sum(num1,num2):
    return num1 + num2

def mathematical_difference(num1,num2):
    return num1 - num2

def mathematical_product(num1,num2):
    return num1 * num2

def mathematical_division(num1,num2):
    if num2 != 0:
        return num1 / num2
    else:
        return None

def operation_error(operation):
    if operation != "+" or operation != "-" or operation != "*" or operation != "/":
        return None




def calculate_mathematical_expression(num1,num2,operation):
    if operation == "+":
        mathematical_sum(num1,num2)
    elif operation == "-":
        mathematical_difference(num1,num2)
    elif operation == "*":
        mathematical_product(num1,num2)
    elif operation == "/":
        mathematical_division(num1,num2)
    else:
        operation_error(operation)

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Вам нужно return

Когда вы return из функции, она возвращается только к функции, которая вызвала ее. Поэтому, когда вы return в mathematical_sum(), значение возвращается к calculate_mathematical_expression(), и вам нужно чтобы снова вернуться из этой функции, например так:

if operation == "+":
    return mathematical_sum(num1,num2)
elif operation == "-":
    return mathematical_difference(num1,num2)
elif operation == "*":
    return mathematical_product(num1,num2)
elif operation == "/":
    return mathematical_division(num1,num2)
else:
    return operation_error(operation)

... в противном случае calculate_mathematical_expression() возвращает None.


operation_error() не работает

  • Используйте and вместо or. В противном случае ваше состояние всегда будет True
  • Возвращает логическое значение, а не None. Здесь ваша функция всегда возвращает None

Пример:

def operation_error(operation):
    return operation != "+" and operation != "-" and operation != "*" and operation != "/"

Вам не нужно operation_error()

Поскольку у вас есть условие для каждого оператора, вам не нужна функция operation_error(), вы можете напрямую сделать это:

else:
    return None

... или даже удалите оператор else и пусть calculate_mathematical_expression() автоматически вернет None при достижении его конца.

0 голосов
/ 04 мая 2018

Ваша функция Calculate_mat математическое_выражение ничего не возвращает. Попробуйте следующий код:

def calculate_mathematical_expression(num1,num2,operation):
    if operation == "+":
        return mathematical_sum(num1,num2)
    elif operation == "-":
        return mathematical_difference(num1,num2)
    elif operation == "*":
        return mathematical_product(num1,num2)
    elif operation == "/":
        return mathematical_division(num1,num2)
    else:
        return operation_error(operation)
0 голосов
/ 04 мая 2018

Вам нужно вернуться снова внутрь calculate_mathematical_expression, например ::

def calculate_mathematical_expression(num1,num2,operation):
    if operation == "+":
        return mathematical_sum(num1,num2)

Возвращение в mathematical_sum не влияет на функцию, из которой вызывается.

...