Исправление кода функции калькулятора, который возвращает неправильное числовое значение в Python? - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь написать простую 4-х функциональную калькуляторную программу на Python, и у меня возникла проблема с выводом. Я могу вернуть правильные значения для сложения, но не любую другую функцию. Мой код выглядит так:

def binop(expression):
    """expression = math expression"""
    if expression.find("+") != -1:
        operator = expression.find("+")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 + num2
    elif expression.find("-") != -1:
        operator = expression.find("-")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 - num2
    elif expression.find("/") != -1:
        operator = expression.find("/")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 / num2
    elif expression.find("*") != -1:
        operator = expression.find("*")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1: -1])
        return num1 * num2

Но он возвращает неправильные значения для вычитания, умножения и деления. Сложение в порядке.

Есть предложения? Мне не разрешено импортировать или использовать любые функции eval или compile.

1 Ответ

1 голос
/ 02 марта 2020

Вы неправильно используете операцию нарезки для num2.

Общий синтаксис для нарезки: "a[start:stop:step]", где

  • start An целое число, указывающее, с какой позиции начинать нарезку. По умолчанию 0
  • end Целое число, указывающее, в какой позиции заканчивать нарезку
  • step Целое число, определяющее шаг нарезки. По умолчанию 1

Рассмотрим выражение expression = "10/20", здесь индекс оператора равен 2, и когда вы вызываете expression[operator + 1: -1], это вернет 2, а не 20, как требуется.

Итак, вам нужно позвонить expression[operator + 1:], чтобы он вернул 20. Вот правильный код:

def binop(expression):
    """expression = math expression"""
    if expression.find("+") != -1:
        operator = expression.find("+")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1:])
        return num1 + num2
    elif expression.find("-") != -1:
        operator = expression.find("-")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1:])
        return num1 - num2
    elif expression.find("/") != -1:
        operator = expression.find("/")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1:])
        return num1 / num2
    elif expression.find("*") != -1:
        operator = expression.find("*")
        num1 = int(expression[0:operator])
        num2 = int(expression[operator + 1:])
        return num1 * num2
...